이 방법은 1925년 미국의 유명한 암호 해독가인 프리드만(Willam Frederick 프리드만)이 고안했다. 이 테스트의 요점은 바로 『암호문에서 임의로 두 문자를 선택했을 때, 두 문자가 서로 같을 확률은 얼마인가?』 이다. 이 값을 일치지수(index of coincidence)라고 한다.
개의 문자들로 이루어진 문자열이 있고,
은 a의 개수, 는 b의 개수, ... , 은 z의 개수라고 하자.
우선 임의로 두 문자를 택하였을 때 두 문자 모두 a일 확률은 얼마일까?
첫번째 문자가 a일 확률은 이고 두 번째 문자도 a일 확률은 이다.
선택하는 순서는 관계없으므로, 두 문자가 모두 a일 확률은 단순히 두 확률 값을 곱하여
이다.
그러므로 임의로 선택한 두 문자가 서로 같을 확률은
이다.
이 값을 일치지수(index of coincidence)라고 하고 로 나타낸다. 프리드만 자신은 κ로 표기했었고, 그런 이유로 Kappa 테스트라고 부르기도 한다.
이제 다른 방법으로 일치지수를 계산해 보자.
자연언어에서 사용하는 문자는 모두 고유의 확률(출현빈도)을 가지고 있다.
a는 확률 을, b는 확률 를, , z는 확률 을 가지고 있다.
영어의 경우 이 확률들은 1장에서 통계적 분석에 의한 암호공격에서 설명했었다.
다루고자 하는 문서에서 임의로 두 문자를 택하였다고 하자.
첫 번째 문자가 a일 확률은 이므로 두 문자 모두 a일 확률은 이다.
(정확히 말하자면 처음의 확률과 두 번째 확률은 아주 미세하게 다르지만 문서가 충분히 길다면 무시해 좋을 정도의 차이이다).
(정확히 말하자면 처음의 확률과 두 번째 확률은 아주 미세하게 다르지만 문서가 충분히 길다면 무시해 좋을 정도의 차이이다).
다른 문자의 경우도 마찬가지이므로, 임의로 선택한 두 문자가 서로 같을 확률은
이다.
당연히 이 값은 국가 혹은 사용언어에 따라 다르다. 예를 들어
● 영어에서는
이다.
즉 영어 문장에서 임의로 선택한 두 문자가 같아지는 경우가 약 6.5% 라는 의미이다.
● 한편 모든 문자의 출현빈도를 같게 조절해 놓은 이상적인 문서가 있다고 하자. 모든 문자의 확률은
과 같으므로
?? 이다.
이처럼 모든 문자들을 잘 섞어 놓은 문서에서 두 문자가 서로 같아질 확률은, 아무런 의도가 없는 평범한 영어문서의 경우와 비교하면 약 절반이 된다.
?비제네르 암호로 작성한 암호문에서 일치지수는 어떻게 되어 있을까?
● 공격하고자 하는 암호문에서 각 문자들의 출현빈도(확률) , , 들은 모두 세어보면
간단하게 알 수 있다.어떤 문자의 출현빈도가 이고 값이 적절히 크다면,
간단하게 알 수 있다.어떤 문자의 출현빈도가 이고 값이 적절히 크다면,
은 과 근사하다고 볼 수 있다.
즉 이 확률들의 제곱의 합은 거의 일치지수와 같아질 것이다: 즉
● 문서를 작성할 때 특정한 문자를 집중적으로 사용하면 값은 커지고, 문자들의 빈도를
의도적으로 균등하게 조절했다면 작아질 것이다. 증명은 하지 않겠지만 일치지수의
최소값은 0.038 이다.
의도적으로 균등하게 조절했다면 작아질 것이다. 증명은 하지 않겠지만 일치지수의
최소값은 0.038 이다.
● 잠시 단일문자 암호로 되돌아가자. 단일문자 암호는 단순히 문자들을 재배열한 것이므로 암호문과 평문의 일치지수는 달라지지 않는다. 예를 들어 평문에서 a의 확률이 0.082 이었다면, 이 값은 a에 대응하는 암호문자 x의 확률이 된다. 즉 각 문자의 확률도 역시 재배열되므로 전체 제곱의 합은 변하지 않는다. 결국 단일문자 암호에서 일치지수는 변화하지 않는다.
● 한편 다중문자 암호에서는 문자의 출현빈도를 균등화하였으므로 일치지수가 감소한다. 그러므로 어떤 암호문의 일치지수를 계산해 보면 단일문자 암호를 사용했는지 아닌지를 판단할 수 있다. 만약 일치지수가 0.065에 가까우면 단일문자 암호를 사용한 것이고, 0.065보다 현저하게 작으면 아마 다중문자 암호를 사용했을 것이라고 추측할 수 있다.
다시 비제네르 암호로 돌아와 키 단어의 길이를 알아내는 데 일치지수를 어떻게 사용하는지 알아보자. 비제네르 암호는 다중문자 암호이므로 당연히 일치지수가 0.065보다 작아진다. 그러나 얼마나 작아지는가? 대답은 『키 단어의 길이 에 따라서 달라진다』이다.
암호문에서의 일치지수를 이용하면 키 단어의 길이를 알 수 있다. 공식을 유도하기 위해 지금부터 약간 수학적인 계산을 하겠다. 어려운 계산은 아니지만 혹시 수식에 지루함을 느낀다면 이 절 끝에 있는 결론으로 건너 뛰어도 괜찮다.
을 키 단어 길이라고 하자. 간단하게 하기 위해 키 단어는 중복되지 않는 문자들로 되어 있다고 한다.
우선 암호문을 개의 열로 배열하여 놓는다. 그러면 1, , , 번째 문자들이 ?첫번째 열에 오게 되고 이 문자들은 모두 같은 키 단어 문자로 암호화된 것이다.
마찬가지로 두번째 열의 문자들은 키 단어의 두번째 문자로 암호화되어 있다(그림 2.4).
키 단어 문자들
| |||||
그림 2.4 비제네르 암호의 일치지수
이제 이 형태를 잘 관찰하면 일치지수를 계산할 수 있다.
첫번째 관찰 : 각각의 열은 단일문자 암호이면서 더하기 암호이다. 그러므로 각 열의 일치지수
는 0.065 이다.
는 0.065 이다.
한편 서로 다른 열에서 두 문자를 선택할 경우에는 서로 다른 더하기 암호를 무작위로 사용한 것이므로, 두 문자가 서로 같아질 확률도 그야말로 우연에 의한다. 일치지수는 당연히 0.065보다 작아질 것이고, 이 절에서는 0.038이라고 가정한다.
만약 키 단어 문자열이 아주 무작위로 선정되어 있다면 정확히 이다. 그러나 키 단어를 아주 긴 문장, 예를 들어 어떤 책에 있는 문장으로 했다면 이 값은 약간 커질 것이다.)
두번째 관찰 : 이제 한 쌍의 동일 문자들을 전체 문장에서 임의로 선택하는 경우의 수를 계산
해 보자. 을 전체 문자의 수라고 하면 각 열에는 개씩의 문자가 있다. 문서가 충
분히 길다고 하면 소수점 이하는 무시해도 된다.
해 보자. 을 전체 문자의 수라고 하면 각 열에는 개씩의 문자가 있다. 문서가 충
분히 길다고 하면 소수점 이하는 무시해도 된다.
우선 선택한 문자들이 같은 열에 있을 경우는 몇가지일까? 첫 번째 문자는 전체 문장의 n개 문자에서 하나를 선택하므로 n가지이고, 두번째 문자는 첫번째 문자가 선택된 열에서 다시 동일한 문자를 선택해야 하므로, 두번째 문자를 선택하는 경우의 수는 이다. 그리고 두 문자를 선택하는 순서는 무시해야 하므로 ?같은 열에서 같은 문자 쌍을 선택하는 경우의 수는
이다.
이제 서로 다른 열에서 같은 문자를 선택하는 경우의 수를 계산해 보자. 앞의 경우와 마찬가지로 우선 첫 번째 문자를 선택하는 경우의 수는 역시 n가지이다. 두 번째 문자는 첫 번째 문자가 속한 열을 제외한 다른 열에서 선택해야 하므로 모두 가지이다. 그러므로 서로 다른 열에서 같은 문자를 선택하는 경우의 수는 모두
이 된다.
위 사실들을 종합해 보면, 임의로 두 문자를 선택했을 때 같은 문자일 경우의 기대값
이다.
임의로 두 문자를 선택했을 때 서로 같을 확률은, 기대값을 전체 문자 선택 경우의 수로 나누어서,
이다. 마지막으로 일치지수는 이 확률값과 거의 근사하므로
이다.
키 단어의 길이를 ? 에 관하여 다시 정리하면
이다.
수식이 다소 복잡하고 이끌어 내는 과정이 길지만 실제 적용할 때는 마지막 수식만 사용하면 되니까 어려울 것은 없다.
전체 문자 수와 각 문자들이 나타나는 횟수를 세고 나면 는 자동으로 계산된다! 그리고 신기한 것은 아주 적은 문자수를 가진 문서에서도 값은 거의 정확하게 알아낼 수 있다는 점이다.
지금까지의 내용을 앞의 예에 적용해 보자. 문자와 빈도수를 계산해 보면
이므로
임을 알 수 있다. 그러므로 이 식에서 키 단어의 길이 은
이고 5, 10, 15, 20 가운데 5가 키 단어의 길이이다.
키 단어 확정
키 단어의 길이를 알았으므로 키 단어가 무엇인지 알아내는 것은 쉽다. Mr. X는 문자들을 키 단어의 길이에 맞추어서 개의 열로 다시 쓴다. 각 열을 기준으로 하면 같은 키 단어 문자로 암호화했으므로 단일문자 더하기 암호이므로 1장의 암호공격법을 번 반복하면 된다. 그림 2.2의 열에서 가장 많이 나타나는 문자는 Z이고, 평문에서 가장 많이 사용하는 문자인 e가 암호화된 것으로 추측할 수 있으므로 키 단어의 첫 문자는 V이다.
댓글 없음:
댓글 쓰기