-
Ciphers프로그래밍/정보보호 2021. 3. 18. 01:13
Ciphers Ciphers
Additive Cipher
One-Time Pad
Additive Cipher의 고정된 키를 가변 키로 바꾸는 것
K의 시퀀스를 미리 서로 정해둬야 한다.
Multiplicative Cipher
C = 암호화된 문장 (Cipher)
P = 평문 (Plain Text)
k = 키 값 (곱셈역이 존재해야 함)
Affine Cipher
C = 암호화된 문장 (Cipher)
P = 평문 (Plain Text)
k1 = 곱셈 사이퍼의 키 값
k2 = 덧셈 사이퍼의 키 값
Monoalphabetic Cipher
단일 알파벳 문자를 단일 알파벳 문자로 치환한 표를 갖고 있음
a b c d e f g h i j k l m n … N O A T R B E C F U X D Q G … Statistical attack에 약함
Statistical Attack
평문에서의 알파벳의 등장 빈도를 계산해 두고, 암호문에서의 알파벳 등장 빈도와 비교하여 치환해 보며 해독하는 기법
Autokey Cipher
Index 0 1 2 3 4 5 6 7 8 9 10 11 12 Plain text a t t a c k i s t o d a y P 00 19 19 00 02 10 08 18 19 14 03 00 24 Key 12 00 19 19 00 02 10 08 18 19 14 03 00 C 12 19 12 19 02 12 18 00 11 07 17 03 24 Cipher text M T M T C M S A L H R D Y P’s values: 알파벳을 1~26의 숫자로 치환한 것
Key stream: 이전 P’s value
C’s values: P’s value와 Key를 더한 것Playfair Cipher
L G D B A Q M H E C U R N I/J F X V S O K Z Y W T P 평문을 encrypt하려면 두 글자씩 나눠서 encrypt
hello의 경우 같은 두 글자 ll이 있으므로 해당 ll 사이에 미리 설정한 글자 (ex: x)를 넣어 helxlo로 만들어 둠he -> EC
두 글자가 같은 가로줄에 있으면 각 글자를 오른쪽으로 한 칸씩 이동한다.
lx -> QZ
두 글자가 같은 세로줄에 있으면 각 글자를 아래쪽으로 한 칸씩 이동한다.
lo -> BX
그 외에는 두 글자가 이루는 직사각형에서의 반대편 row의 글자로 바꾼다.
decryption은 열심히 역연산해보자
Vigenere Cipher
autokey cipher에서 key 값만 미리 설정한 문장으로 바꾸면 됨
key가 "PASCAL"일 때 15 00 18 02 00 11 의 키 값을 반복해서 넣어줌
Index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Plain text s h e i s l i s t e n i n g P 18 07 04 08 18 11 08 18 19 04 13 08 13 06 Key 15 00 18 02 00 11 15 00 18 02 00 11 15 00 C 07 07 22 10 18 22 23 18 11 06 13 19 02 06 Cipher text H H W K S W X S L G N T C G Hill Cipher
행렬곱을 이용
plain text: “code is ready”
m = 4 일 때
마지막 z는 칸을 맞추기 위한 쓰레기 값
decryption
따라서 K는 역행렬이 존재해야 한다.Transposition Cipher
글자들의 순서를 바꾸는 암호 방식
Keyless Transposition Cipher
“Meet me at the park”
에서 세로로 읽기Keyed Transposition Cipher
key가 순열로 주어짐
key = (3 1 4 5 2)
해당 위치의 글자로 바꾸면 C가 됨
enemy -> eemynDouble Transposition Cipher
여러 Transposition Ciphers들을 결합하여 더 강력한 암호문을 만들 수 있음
현대 암호문들은 대부분 Substitution + Transposition Cipher 형태임
Stream Cipher
입력이 스트림으로 들어오기 때문에 키도 스트림, 출력도 스트림이어야 함
Vigenere Cipher, Autokey Cipher 등이 Stream Cipher임Block Cipher
여러 글자를 (블록 단위를) 동시에 암호화하는것
Hill Cipher 등…