현대 암호학

[현대 암호학] 03-2. 단일 치환 암호

Uggjjini 2021. 6. 18. 18:27

2. 단일 치환 암호 

단일 치환 암호(Simple Substitution Cipher)

평문을 구성하는 알파벳을 다른 알파벳으로 변환하는 암호

 

 

단일 치환 암호의 암호화

 

단일 치환 표(암호화 테이블)

 

단일 치환 암호의 암호화 예

평문 : kabsoonyee

암호문: SWYLBBNKXX

 

단일 치환 암호의 단점

평문에 등장하는 문자의 빈도가 암호문으로 바뀐 뒤에도 암호문 내에서 동일한 빈도로 나타난다.

 

 

 

단일 치환 암호의 복호화

 

단일 치환 표(복호화 테이블)

 

  • 치환표가 단일 치환 암호의 "키"
  • 암호화 때에 사용한 치환표가 필요
  • 송신자와 수신자는 치환표를 공유

 

 

단일 치환 암호의 키 공간

 

  • 시저 암호는 전사 공격(Brute Force Attack)으로 해독 가능
  • 단일 치환 암호는 전사 공격으로 해독이 어렵다. (단일 치환 암호가 시저 암호에 비해 휠씬 많은 키 후보를 가질 수가 있기 때문)

 

키 공간(Key Space)

  • 해당 암호에서 사용할 수 있는 "모든 키의 집합"
  • 이 키 공간에 속하는 가능한 키의 총수를 키 공간의 크기
  • 키 공간이 크면 클수록 전사공격은 어렵다.

 

 

전사공격(Brute-Force Attack) 시간

 

치환 암호 => 전사 공격이 어려움

 

단일 치환 암호의 키의 총수

26 25 24 23 ... 4 3 2 1

=> 26 x 25 x 24 x 23 ... x 4 x 3 x 2 x 1

=> 403291461126605635584000000

 

키 수가 이렇게 많다면 1초에 10억 개의 키를 적용하는 속도로 조사한다고 해도, 모든 키를 조사하는 데 120억년 이상의 시간이 필요

 

 

 

빈도 분석(Frequency Analysis)에 의한 해독

 

치환 암호 => 빈도 분석을 이용한 공격

 

  • 전사 공격에서 단일 치환 암호를 해독하는 것은 어렵다.
  • 빈도 분석 암호 해석법을 사용하면 단일 치환 암호도 해독 할 수 있다.
  • 빈도 분석에서도 평문에 등장하는 문자의 빈도와 암호문에 나오는 문자의 빈도가 일치하는 것을 이용하는 것이다.

 

해독 작업

  • 빈도가 높은 문자뿐만 아니라, 빈도가 낮은 문자도 단서가 된다.
  • 처음과 끝을 아는 것은 단서가 된다. 단어의 단락을 알면 그서도 단서가 될수 있다.
  • 암호문이 길면 해독이 쉬워진다.
  • 같은 문자가 연속해서 나타나면 그것은 단서가 된다.(단일 치환 암호에서는 어떤 문자 어느 문자로 암호화 되는지는 정해져 있기 때문에)
  • 해독의 속도가 점점 빨라진다.

 


[실습] 단일 치환 암호(암호화/복호화)

단일 치환 암호

= 단일 문자 치환 암호

= 단순 치환 암호

 

다음 치환표를 참고하여 단일 치환 암호를 풀어 보자.

 

(조건) 다음과 같은 조건이 있다.

  • 문자열 키 테이블에 없는 문자는 그대로 출력한다.
  • 암호문은 반드시 대문자이다.

 

키 테이블 = {'h': 'A', 'e': 'K', 'l': 'O', 'o': 'B', 'w': 'L', 'r': 'Z', 'd': 'Y'}

 

암호화
암호 시스템 : 단일 치환 암호
키 테이블 = {'h': 'A', 'e': 'K', 'l': 'O', 'o': 'B', 'w': 'L', 'r': 'Z', 'd': 'Y'}
 
입력 평문 : hello world
출력 암호문 : ?
복호화
암호시스템 : 단일 치환 암호
키 테이블 = {'h': 'A', 'e': 'K', 'l': 'O', 'o': 'B', 'w': 'L', 'r': 'Z', 'd': 'Y'}
{'A': 'h', 'K': 'e', 'O': 'l', 'B': 'o', ....}
 
입력 암호문 : AKOOB LBZOY
출력 평문 : ?

 

substitutionExample.py

미완성