참고 사이트
다중 단일 문자 치환암호의 한 종류로써 키워드를 이용하며 빈도수 분석법으로 해독이 불가능하다.
또한 사용자의 key 개수가 무궁무진하다.
비즈네르 표 만들기
1부터 26까지의 사이퍼 알파벳을 나열하고, 한 줄씩 내려갈때마다 한 자씩 뒤로 이동된다.
키값 정하기
키값을 정한다. 암호 만드는 사람 마음대로 정하면된다.
위 사진에는 sky가 키값으로 되어있으니, 나도 편의상 sky를 키값으로 정하도록 하겠다.
암호화하기
암호화 할 문장은 얼마전에 개봉한 존윅3의 'johnwick'으로 해보자.
키워드 |
s |
k |
y |
s |
k |
y |
s |
k |
원문 |
j |
o |
h |
n |
w |
i |
c |
k |
암호문 |
b |
y |
f |
f |
g |
g |
u |
u |
원문은 johnwick이지만, 암호문은 byffgguu가 되면서 달랐던 알파벳이 암호화되면서 같은 알파벳이 되었다.
그리고 이걸 키값만 있다면 얼마든지 해독할 수 있다.
키값을 가지고 있지 않은 누군가가 이것을 해독하려면 빈도수 분석법으론 절대 해독할 수 없을 것이다.
복호화하기
복호화는 카지스키 공격방법과 프리드먼 공격방법이다.
이 두 방법을 같이 사용하면 거의 정확히 키의 길이를 알아낼 수 있다.
카지스키 공격방법
1. 문자열에서 반복되는 문자열을 찾는다.
2. 반복되는 문자열간의 길이를 계산한다.
(ex. 반복되는 문자가 asdf라면 기준 asdf의 a부터 다음 asdf의 a까지의 거리를 계산)
3. 구한 길이들의 공약수나 공배수가 키의 길이이다.
(ex. 키의 길이가 9, 15, 21이라면 공약수인 3이나 공배수인 315가 키의 길이이다.)
프리드만 공격방법
프리드만 공격방법에는 공식이 정해져있다.
이 식을 이용해 키의 길이를 유추할 수 있다.
키의 길이인 L을 구하고 카지스키로 유추한 키의 값들 중 가장 가까운 값이 키의 길이이다.
키의 길이를 구했으면 암호문을 키의 길이만큼 나누고 같은 키로 암호화된 부분들을 모아 빈도수 분석법으로 키를 유추해 나가면 된다.
복호화과정이 복잡해 chieze님 블로그의 예시를 들고왔다.
암호문: aryloyxkrukrteravmnoyuerwmylsfsdcspylmyllslsjgfcsmsloasdgzkrwkdsdasdzmdgdytwkamdcukr
1. 반복되는 문자열 찾기
aryloyxkrukrteravmnoyuerwmylsfsdcspylmyllslsjgfcsmsloasdgzkrwkdsdasdzmdgdytwkamdcukr
2. 반복되는 문자열간의 길이 계산
myl의 간격 : 12
ukr의 간격 : 72
3.구한 길이들의 공약수나 공배수 계산
공약수인 3, 4, 12 중에 키의 길이가 있을 것이다.
4.프리드만 방법으로 I값과 L값 계산
I = 0.0559380378657487
L = 1.49618320610687
5. 키의 길이 유추하기
유추할 수 있는 키의 길이는 1.4와 제일 근접한 3이 키의 길이이다.
6. 키 알아내기
ary
loy
xkr
ukr
ter
avm
noy
uer
wmy
lsf
sdc
spy
lmy
lls
lsj
gfc
sms
loa
sdg
zkr
wkd
sda
sdz
mdg
dyt
wka
mdc
ukr
1번째 자리: alxutanuwlsslllgslszwssmdwmu
2번째 자리: rokkevoemsdpmlsfmodkkdddykdk
3번째 자리: yyrrrmyryfcyysjcsagrdazgtacr
1번째 자리에는 l과 s, 2번째 자리에는 d, 3번째 자리에는 r과 y가 가장많다.
위 알파벳 빈도수 순위 표를 참고하여 치환하다보면 키를 알아낼 수 있다.
추가사이트
http://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx
https://www.guballa.de/vigenere-solver
https://f00l.de/hacking/vigenere.php