암호화 (Encryption) - 치환, 위치교환, 순열
암호화 (Encryption)
암호화
암호화 (Encryption)
– Plain text를 암호화 알고리즘(또는 키)를 이용하여 암호문으로 변환시키는 것
복호화(Decryption)
– 원래의 평문으로 변환시키는 것
암호화
– 알고리즘 + key
암호시스템(Cryptosystem)
– 암호화 + 복호화 알고리즘
암호화
예)
– 암호문 : “EH FDUHXOH IRU DVVDVVLQDWRU”
– 복호문 : “BE CARFULE FOR ASSASSINATOR”
알고리즘
– A D
– B E
– …
– Z C
치환 암호화 (1)
평문의 글자를 다른 체계를 갖는 글자로 변환
– 알파벳을 지정된 수(offset)만큼 이동/치환
예) offset=3
– 암호문 : “EH FDUHXOH IRU DVVDVVLQDWRU”
– 복호문 : “BE CARFULE FOR ASSASSINATOR”
치환 암호화 (2)
치환암호화: 해독 용이
방지책
– 불규칙한 알파벳 체계의 사용
– 특수문자도 암호화
– 예)
• 평문의 알파벳: abcdefghijklmnopqrstuvwxyz[]
• 암호문 알파벳: qazwsxedcrfvtgbyhnujm ikolp
• 평문: meet me at sunset
• 암호문: tssjptspqjpumgusj
치환 암호화 (3)
다중치환 암호화(Multiple substitution cipher)
– 두 개 이상의 알파벳 체계의 사용
– 예) 공백문자를 만날 때마다 알파벳 체계의 전환
– 예)
• 평문의 알파벳 : abcdefghijklmnopqrstuvwxyz[]
• 암호문알파벳1: qazwsxedcrfvtgbyhnujm ikolp
• 암호문알파벳2: poi uytrewqasdfghjklmnbvcxz
• 평문: meet me at sunset
• 암호문: tssj fu gj kmdkul
위치교환 (순열) 암호화 (1)
평문의 각 글자들의 위치를 바꾸어 놓음
방법1: 평문을 적정한 길이의 배열에 저장한 후, 지정한 offset만큼의 글자를 서로 교환
– 예) offset = 10인 경우,
• 홀수번째 글자는 배열 시작점 기준으로 offset 계산
• 짝수번째 글자는 배열 끝점 기준으로 offset 계산
위치교환 (순열) 암호화 (2)
평문의 각 글자들의 위치를 바꾸어 놓음
방법2: 배열을 이용하여 위치 치환
union message{
char s[100];
char s2[20][5];
}skytale;
strcpy(skytale.s, “meet me at sunset”);
위치교환 (순열) 암호화
비트조작 암호화
산술연산 또는 비트수준에서의 비트연산을 시행하여 암호화
– C언어의 비트연산자
• OR |
• AND &
• XOR ^
• 1의 보수 ~
비트조작 암호화
방법1: 1의 보수값 이용
– 예) 10101010 의 1의 보수값
• 01010101
비트조작 암호화
방법2: XOR연산 이용
– XOR 연산 성질
– 원래 바이트와 key값과 XOR연산
• 1 1 0 1 1 0 0 1
• 0 1 0 1 0 0 1 1 (key)
• 1 0 0 0 1 0 1 0 (xor연산결과)
• 0 1 0 1 0 0 1 1 (key)
• 1 1 0 1 1 0 0 1 (원래값 복원)