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 -> eemyn
Double Transposition Cipher
여러 Transposition Ciphers들을 결합하여 더 강력한 암호문을 만들 수 있음
현대 암호문들은 대부분 Substitution + Transposition Cipher 형태임
Stream Cipher
입력이 스트림으로 들어오기 때문에 키도 스트림, 출력도 스트림이어야 함
Vigenere Cipher, Autokey Cipher 등이 Stream Cipher임
Block Cipher
여러 글자를 (블록 단위를) 동시에 암호화하는것
Hill Cipher 등…