1. 개요
2009년 3월, 코드소프트라는 기업에서 2008년 12월 4일에 특허를 받은 새로운 암호 알고리즘을 개발했다고 발표하고, 현상금 1000만 원을 내걸고 깨보라고 선언했는데 고작 2시간만에 깨진 사건.#코드소프트에서는 3월 16일부터 6월 30일까지 진행한다고 했으나, 문제를 낸 당일 겨우 2시간만에 풀려서 망신을 당하고 말았다.#(…)
암호를 해체한 것은 Play XP의 운영진이었던 Kesarr였다고 한다.#
상금 1000만 원 중 100만 원은 선지급되었고 나머지는 추후에 지급하기로 했다는데 추후에 지급되었는지의 여부는 확인이 불가능하다.#
2. 암호화 알고리즘 MaskCrypt의 문제점
MaskCrypt는 ‘다국어 텍스트 문자열 암호화를 위한 대칭키 암호 알고리즘 보완 방법’으로 2008년 특허를 받았고 제작자의 발표에 따르면 암호화된 한글이 깨지지 않고 길이가 그대로 유지되기 때문에 DB에 자유롭게 저장할 수 있는 것이 장점이며, C, Java, JavaScript를 사용했다고 한다.Kesarr는 JavaScript 소스를 기반으로 암호화를 해석했다. 그가 분석한 이 암호화 알고리즘의 약점은 다음과 같다.
- 평문과 암호문의 각 문자가 1:1로 대응하여 확산 성질(Diffusion)이 없다.
- 공백문자, 구두점 등 특수문자가 그대로 남아 있기 때문에 문장 구조를 파악하기 쉬워 빈도 분석이 매우 간단하다.
- 비밀키의 각 문자가 아스키 코드의 일반 문자로 한정되어 있어서 경우의 수가 많지 않다.
- 비밀키의 각 문자가 암호문의 한 문자를 만들어내기 때문에 혼돈 성질(Confusion)이 없어 글자별로 테스트하기 쉽다.
- 비밀키의 길이를 파악하기도 쉽다.
사실, 이 해설대로라면 MaskCrypt는 기껏해야 고전 암호 수준으로, 암호학과 해독 기법이 발전한 현대에는 절대 효과적인 암호 알고리즘이라고 볼 수 없다.
이것은 원리적으로 16세기에 만들어진(…) 비지넬 암호(Vigenere cipher)와 비슷한 것으로 보인다. 비지넬 암호는 단순 치환식 암호보다 한 단계 더 나아간 것으로, 모든 암호를 같은 키로 변환하는 단순 치환식 암호와는 달리 다소 긴 키를 사용하여 키의 길이만큼 반복해가며 암호를 만든다.
비지넬 암호는 1863년에 비교적 효율적인 카시스키 테스트라는 해독법이 나왔으며, 현대라면 PC를 사용해서 10초 이내에 깰 수 있다.
혼돈(confusion)과 확산(diffusion) 효과의 개념은 클로드 섀넌이 1949년에 제시한 이후 현대 암호 알고리즘의 기본 원리가 된 것으로, 이것이 없다는 것은 말하자면 4~500년 전 수준의 암호 알고리즘인 것이다.
게다가 공백과 구두점, 특수문자를 변환하지 않는다는 치명적인 문제점이 있기 때문에 빈도 분석이 쉬워서 더욱 간단히 깰 수 있다. 알고리즘을 직접 알아내야 하는 상황이니까 2시간이나 걸렸지, 알고리즘이 알려져 있는 것을 전제로 하는 실전 상황이라면 이 암호가 돌파당하는 데 걸리는 시간은 수 초 이내일 것이다. 암호화로서의 의미가 없는 수준이다.
현대에 쓰이는 암호 방식에서 일반적으로 소스 코드와 알고리즘이 공개되는 것은 흔히 있는 일[1]이므로, 알고리즘이 알려졌다는 것은 현대 암호에서는 해독당한 것의 변명이 되지 못한다.
3. 현재
홈페이지에 접속하면 굉장히 오래 전부터 서비스 준비 중이라는 문구만 있고 아무것도 없다. 그 외에 다른 정보는 전혀 없는 상황이다. 언젠가는 판매용 도메인이 돼서 다른 사람이 사서 다른 홈페이지가 될지도 모를 일이다. KISREPORT에 코드소프트웨어라는 폐업한 곳이 있는데 그게 저 코드소프트인지는 알 수 없다.2013년 6월 확인 결과, 이미 판매용 도메인이 되었다. 도메인인 codesoft.co.kr을 WHOIS 서비스에서 검색해 보면 2010년에 재등록되어 개인 소유 도메인이 되어 있고, 해당 서비스 준비 중 문구는 도메인 등록업체에서 기본 제공하는 공사 중 페이지이다.
[1] 현대에 유명한 암호 알고리즘은 거의 대부분 알고리즘과 소스 코드가 공개되어 있다. 현대 암호학에서는 기본적으로 내부 구현의 공개를 전제조건으로 한다. 암호 알고리즘이 어떻게 구현되었고 어떤 구조로 동작하는지 공격자가 알고 있더라도 해독할 수 없어야 한다는 것이다.