암호해독이 끝났음은 어떻게 알 수 있을까

Tags:

http://en.wikipedia.org/wiki/Unicity_distance
http://www.schneier.com/crypto-gram-9812.html#plaintext

Brute Foce로 가능한 모든 키를 입력해가면서 암호를 푼다고 가정하자. 각 키를 넣었을때 암호가 풀려 결과값이 나온다. 그런데 이렇게 나온 결과값이 여럿이고, 만약 각각이 다 readable text라면 어떻게 어느 키가 올바른 키이고 어떤 해독된 문장이 정답인지 알 수 있을까?

암호를 입력할 때 나타날 수 있는 메시지의 종류가 N이고, 그 중 readable text의 개수가 M이라하자. 이 때, readable text의 개수인 M은 그 text를 만드는 brute force로 입력한 키와 일대일 대응이된다. 따라서 모든 가능한 종류의 키가 K라할 때 readable text를 만드는 키의 개수는 K * (M/N)이다.

이 때 M은 키의 개수에 대한 함수이며, N은 암호화된 문장의 길이에 대한 함수이다. 암호화된 문장의 길이가 L이라 하자. 정리하면,

K = 가능한 모든 키의 갯수
M = 키를 넣었을 때 나타날 수 있는 readable text의 개수
N = 키를 넣었을 때 나타날 수 있는 모든 text의 개수
L = 암호화된 문장의 길이.
readable한 text를 만드는 키의 개수 = K * (M/N)

따라서 L이 충분히 커지면 N이 커져 readable 한 text를 만드는 키의 개수가 1이 될 수 있다. 이 시점에서 # of possible spurious key (readable text를 만들기는 하지만 정답은 아닌 키)의 개수가 0에 도달한다. 이러한 L을 주어진 암호화 알고리즘에 대한 Unicity Distance라한다. DES 128bit로 암호화 한 경우 Unicity Distance는 19bytes이다. 다시말해 19bytes의 암호화된 문자열이 있으면 이 암호를 풀었을때, 암호를 풀었단 사실을 알 수 있다. (즉, readable한 text를 만드는 키의 개수가 1개뿐이다.)

Claude Shannon이 제안한 아이디어인데, 그가 엔트로피란 말을 도입해 모든 사람을 헷갈리게 하는 악행을 저지른 뒤, 이번에는 단일 암호화 알고리즘에 대해 *distance*라는 문장을 사용하는 만행을 저지른게 아닌가 생각이 든다. 어떻게 비교 대상이 둘이 아닌데도, “이 알고리즘의 xxxx distance는 yyy입니다.” 라고 할 수 있단말인가;;; 그러나 섀넌 정도의 대가 앞에선 닥치고 버로우;; 고개를 숙일뿐.