[컴퓨터보안] Substitution Technique(치환 기술)
1. Caesar Cipher - 카이사르 암호
Plain Text의 각 알파벳을 알파벳 상 3개 뒤의 알파벳으로 치환하는 방식
Plain Text가 meet 일 때, 아래의 과정을 거치게 됩니다.
1. m(12) -> p(12 + 3)
2. e(4) -> h(4 + 3)
3. t(19) -> w(19 + 3)
meet을 Caesar Cipher 로 암호화 한 결과, phhw 라는 Cipher Text가 완성됩니다.
이를 식으로 나타내면 아래와 같습니다(k=3)
C = E(k, p) = (p + k) mod 26
p = D(k, c) = (c - k) mod 26
k에 대해서 25개의 가능성 밖에 없기에 위 사진과 같이 Brute-Force Attack을 진행할 때, 뚫리기 너무 쉬운 암호화 방식입니다.
2. Permutation Cipher
위 Caesar Cipher 와 같이 문자가 다른 문자로 치환되는 방식입니다. 다만 3개 뒤의 알파벳으로 치환했던 Caesar Cipher 와 다르게, 치환되는 A~Z를 무작위로 섞는 방식입니다. 대신 섞인 Key를 따로 보관해야 한다는 단점이 있습니다.
3. Playfair Cipher - 두 글자 규칙
5 x 5 크기의 문자 배열에 기반하여 암호화를 진행하는 방식입니다. 키워드를 정하여 아래의 표처럼 구성합니다. 여기서 사용된 키워드는 MONARCHY 입니다.
Left to Right && Top to Bottom 방향으로 키워드를 먼저 작성하고, 나머지 칸을 키워드에서 사용되지 않은 알파벳으로 채워넣습니다. 키워드에 만약 중복되는 알파벳이 있다면, 이를 무시하고 작성합니다.(AABB -> AB)
알파벳은 총 26개이지만 칸은 25개이므로, I/J 와 같이 한 칸에 2개의 알파벳을 적습니다. 이 조합은 바뀔 수 있습니다.
5 x 5 크기의 배열을 완성하였다면, 4가지 규칙을 따라 치환을 합니다. 그 규칙은 다음과 같습니다.
1. 직사각형 규칙 : 암호화 하려는 글자 p1, p2를 대각선 양 꼭짓점으로 하는 직사각형을 만들고, 각각 같은 행 맞은편에 있는 글자와 치환한다. (ex. hs -> BP, ea -> IM or JM)
2. 같은 글자가 반복되는 경우에 대한 규칙 : 같은 글자가 반복되는 경우 그 사이를 특정 문자(x)로 채운다. (ex. balloon -> ba lx lo on)
3. 같은 행에 있는 경우에 대한 규칙 : 자기 다음(오른쪽)에 있는 글자로 치환한다. (ex. HY -> YB)
4. 같은 열에 있는 경우에 대한 규칙 : 자기 다음(밑)에 있는 글자로 변경(ex. B→ I/J, A→B)
이러한 규칙에 맞게 balloon 이라는 Plain Text를 Cipher Text로 암호화 해보겠습니다.
1. 두 글자 규칙이라는 이름에 맞게 Plain Text를 두 글자씩 끊어서 암호화를 진행합니다 -> ba ll oo n
2. ll 에서 2번 규칙 발생 -> ba lx lo on
3. ba 에 대해서 4번 규칙 발생 -> IB or JB
4. lx 에 대해서 1번 규칙 발생 -> SU
5. lo 에 대해서 1번 규칙 발생 -> PM
6. on 에 대해서 3번 규칙 발생 -> NA
=> Cipher Text : IBSUPMNA
4. Vigenere Cipher
key를 정하고, 이를 plain text 에 더하여 치환하는 방식입니다. plain text의 길이가 key 보다 길 때, key를 여러번 반복하여 plain text와 같은 길이의 key를 만듭니다.
key가 반복되므로, 취약하다는 단점이 있습니다.
5. Vigenere Autokey System
Vigenere Cipher의 key 반복으로 인한 취약 문제를 해결한, 업그레이드 된 방식입니다. 처음에 정한 key는 한 번만 쓰고, 그 후의 키는 앞의 plain text를 가져와서 쓰는 방식입니다. 아래의 표를 통해서 확인하실 수 있습니다.
6. Vernam Cipher
알파벳을 사용하지 않고 비트를 사용하는 암호화 방식입니다. c(cipher bit), p(plain text bit), k(key bit) 모두 0 또는 1을 나타내는 비트입니다. 아래의 식을 통해 작동 방식을 이해할 수 있습니다.
c = (p + k) mod 2
p = (c - k) mod 2 = (c + k) mod 2
이는 XOR 연산과 같은 결과를 가져옵니다.
7. One-Time Pad
암호화하려는 Plain Text의 길이와 같은 랜덤 키와 Plain Text를 XOR 하여 암호화하는 방식입니다. 랜덤 키는 암호화/복호화에 사용되며, 한 번 사용하면 버립니다. 즉, 메시지마다 새로운 키가 필요합니다. 이는 완전히 안전한 방식이지만, 다음 과 같은 이유로 실용적으로는 거의 불가능한 방식입니다.
1. 길고(Plain Text 길이만큼) 많은(메시지마다 새로운 랜덤 키) 키를 만들어내는게 아주 힘든 작업입니다.
2. 만들어낸 랜덤 키를 해당 Cipher Text를 복호화 할 사용자에게 전달하는 것도 힘든 작업입니다.
이러한 현실적인 어려움 때문에, 아주 제한적인 환경(매우 높은 보안 수준을 필요로 하는 전송량이 적은 채널)에서만 사용 가능합니다.
댓글
이 글 공유하기
다른 글
-
[컴퓨터보안] Web Security
[컴퓨터보안] Web Security
2023.04.26 -
[컴퓨터보안] Feistel Cipher(파이스텔 암호) 동작 방식
[컴퓨터보안] Feistel Cipher(파이스텔 암호) 동작 방식
2023.04.25 -
[컴퓨터보안] Stream Ciphers | Block Ciphers
[컴퓨터보안] Stream Ciphers | Block Ciphers
2023.04.24 -
[컴퓨터보안] Transposition Techniques(전치 기술)
[컴퓨터보안] Transposition Techniques(전치 기술)
2023.04.24