한글 암호 해독 이야기 및 암호 해독자의 글한글 암호 해독 이야기 및 암호 해독자의 글

Posted at 2012. 7. 17. 12:54 | Posted in 한글 잡답

이리 저리 돌아다니다가 한글 암호 관련 글이 있어 옮겨 보았습니다.   2007/01/09 - [한글 소식_정보_관련 글] - 한글 2.X의 암호 크랙 사건에서 한글 2.x대의 문서 암호가 풀렸다는 글을 올렸습니다.  그때 암호를 크랙한 분이 이승욱이라는 분인데 이슈화된 후 하이텔 플라자에 올린 글입니다. 


출처 : http://goo.gl/9QxWp 


이슈화되어 신문 기사로 나간게 1995년 3월 14일입니다. 그리고 글은 3월 15일에 올렸지요.  덕분에 한글의 보안 기능은 더 강력하게 변하게 됩니다.


아래 내용이 암호를 크랙한 이승욱씨의 글입니다.



안녕하십니까? 

code21.exe의 프로그래머 이승욱입니다. 


여러분들의 많은 격려를 받으니 힘이 납니다. 며칠간 매우 바빠서, 하이텔에 접속하지 못했습니다. 드디어, 오늘 들어와보니, 많은 메일이 도착하여 있었습니다. 


대부분, 파일을 보내달라는 공통된 내용이었기에, 이분들께는 일일히 메일을 못보내드리겠습니다. 아래의 제 입장을 보시면 이해가 되리라 생각합니다. 많은 양해 바랍니다. 


1. 재공개 여부 


리버스 엔지니어링이 불법이 아니라는 여러분들의 응답 대단히 감사합니다. 많은 도움이 되었습니다. 하지만, 정품 구입시 따라오는 계약내용에 프로그램 코드 변경을 하지 못한다는 규정이 있어서, 전 이 내용에 걸려, 민사상의 책임을 져야 합니다. 


즉, code21은 hwps.exe를 patch하므로, 불법적으로 코드를 변경한 것입니다. 


다행히, 한컴측에서는 민사상의 책임을 묻지 않겠다고 하였습니다. 대신, 면책 조건으로, 아래아 한글의 자료 구조를 공개하지 않겠으며, code21.exe와 소스도 공개 하지 않겠다는 약속을 하였습니다. 


따라서, 여러분들이 원하시는 재공개는 불가합니다. 



2. 한컴과의 관계 


제가 code21.exe를 공개한 시점이 아래아 한글 3.0의 출시를 눈앞에 둔 시점이므로, 한글 3.0의 판매 촉진에 큰 도움이 될 거라는 분석이 있었습니다. 


예, 맞는 소리입니다. 관공서나 기업체 등에서는 즉시 버젼업을 해야만 합니다. 


이는 제가 다행히 3.0 출시 전에 프로그램을 완성했고, 제 원래 의도가 한글의 버젼을 한단계 늦게 따라가면서 code21을 버젼업 하면, 보안 유지를 해야할 파일은 신버젼이므로, 암호를 깰 수가 없고, 구버젼에 남아있는 파일은, 암호를 잊어버린 파일이므로 암호를 깨서, 파일을 사용할 수가 있을 것이라는 것이었기 때문입니다. 


일부 의견으로, 이찬진씨와 제가 같은 서울대학 출신이고, 학번도 별 차이가 없으므로, 어쩌면, 둘이 아는 사이이고, 이번 사태에 뒷배경이 있을지도 모른다는 생각을 하시는 것 같습니다. 


전혀, 이찬진씨와 관계가 없습니다. 전, 대학교때, 고시 공부를 하느라, 컴퓨터는 별로 손대지 않고 살았습니다. 그리고, 과사무실이 동떨어져 있는 관계로, 우연히 마주쳐서 알게된 적도 없습니다. 


또한, 한컴 측에서 영입 의사를 밝힌 것은 사실입니다. 하지만, 전 어렵게 공부해서 시험에 붙어 공무원생활을 이제 1년 했을 뿐입니다. 아직은 공무원 생활에 만족하고 있으며, 어떤 회사이건 좋은 조건을 제시하면, 그때가서 생각해도 되는 일을 벌써부터, 단지 의사를 물은 것에 불과한 때에 고민할 필요는 없습니다. 따라서, 한컴 사람이 다 되었다는 등의 편향적 시각은 교정되어야 합니다. 


이점, 오해 없으시기 바랍니다. 


3. 암호 방식의 수준 


일부 의견으로 아래아 한글의 암호 체계가 선전과 달리 허술하여 풀린 것이고, 한컴의 기술 수준이 형편없는 것이 아니냐는 의견이 있습니다. 


이는 잘못된 것입니다. 아래아 한글의 암호 체계는 대단히 잘만든 체계입니다. 비록, 풀리기는 했지만, 모든 암호 체계는 언젠가는 풀리고, 풀린 암호 체계는 모두 허술하다는 삼단논법은 맞지 않습니다. 


아래아 한글은 암호 확인용 키와, 암호 해독용 키가 따로 구분되며, 문서 파일에는 암호 확인용 키만 저장됩니다. 


라인 단위로 암호화되므로, 어떤 패턴은 찾을 수가 있지만, 이 패턴은 자료 내용과 관련없는 형식에 대한 패턴이지 암호화된 자료 자체의 패턴은 아닙니다. 


암호에서 암호 확인용 키는 만들 수가 있지만, 암호 확인용 키에서 암호를 역으로 만들 수는 없습니다. 


또한, 암호 확인용 키에서 암호 해독용 키도 만들 수가 없습니다. 


따라서, 문서 파일을 뒤져서는 도저히, 암호를 깰 수가 없도록 만들었으며, 사실, 오랜 시간 동안 깬 사람이 없었습니다. 


또한, 문서 파일의 데이타 구조가 복잡하여, 이를 역으로 추적, 문서 파일을 재구성할 수도 없습니다. 


이렇게 보안을 철저히 만든 한글과 컴퓨터사에 대단한 찬사를 보냅니다. 


4. 프로그램 사용시 오류 


제 프로그램을 받아가신 분들께서도 에러에 대한 문의를 하셨습니다. 제 프로그램은 압축된 파일에서는 동작되지 않습니다. 또한, hwps.exe 파일을 패치하는 관계로 파일 크기가 커지면 읽을 수가 없습니다. 아직 아래아 한글의 자료 구조를 100% 알지 못하는 관계로 읽을 수 있는 파일은 압축되지 않은 파일의 80-90% 수준입니다. 다소 개선된 파일은 95%정도이나, 한컴측이 자료를 공개하기 전에는 100%는 무리인 듯 합니다. 


5. 새로운 프로그램 공개 


여러분들의 대답에 의하면, 리버스 엔지니어링은 위법이 아니며, 다만, 패치한 것이 문제가 되는 듯 합니다. 


제가 개발한 여러개의 프로그램 중에서 리버스 엔지니어링을 사용했으나, 패치를 하지않는 프로그램이 있습니다. 


즉, 가능한 모든 문자를 시도해 보는 프로그램입니다. 한글암호에서는 실용성이 없으나(속도 문제), 숫자로만 된 암호에서는 실용성이 있습니다. 


최대 5개의 자리수로 된 숫자 암호를 10초안에 테스트하여, 이중에 암호가 있다면, 이를 표시하는 것입니다. 물론 6자리이상도 테스트 할 수는 있으나, 1자리가 늘어날 때마다, 10배로 시간이 걸리는 관계로, 5자리수로 제한을 두었습니다. 


숫자 암호에만 효과가 있으며, 영문자나 한글암호용 프로그램은 따로 있습니다. 


사용법은 numeric filename 형태입니다. 파일이 있는 곳으로 numeric.exe를 복사하여 설치하십시오. 


시솝님도, 이 프로그램을 빨리 등록하여 주십시오. 한컴측도 양해를 했고, 어떤 저작권 문제도 걸리지 않습니다. 


5. 개발 과정 


개발 과정을 밝히게 되면, 아래아 한글의 중요 취약점과 자료 구조가 드러나게 됩니다. 물론, 우수한 점도 드러나겠지요. 


하지만, 프로그램 보호법에 의해 이는 공개할 수 가 없으므로, 양해바랍니다. 

//

한글 2.X의 암호 크랙 사건한글 2.X의 암호 크랙 사건

Posted at 2007. 1. 9. 18:38 | Posted in 한글 소식_정보_관련 글

아래 3년간의 암호 풀이(http://hangul.tistory.com/115) 글을 올리고나니 옛날 암호 관련된 내용이 생각나 자료를 찾아 보있습니다.

 아마 기억하시는 분들도 있겠지만 많은 분들은 이런 일이 있었는지 기억하지 못하실 겁니다. 한글 관련 블로그를 개설하여 한글 관련 글을 쓰다보니 옛날 암호 관련된 내용이 생각나 자료를 찾아 보있습니다.

지금은 어느 회사에서도 보안이 아주 중요시 되지만 한글 2.1이나 2.5 시절엔 보안에 크게 신경을 쓰지 않았습니다. 암호라는 기능이 들어간 프로그램도 몇되지 않았지요.  한글에서 암호를 지원하였고 강력하다고 소문이 났기 때문에 문서 보안 목적으로도 한글을 많이 사용했습니다. 이때 한글의 암호 문제가 붉어집니다.   한글로 문서를 작성한 곳이 많은데 암호가 크랙되었다니 문서 보안을 위해 한글의 암호를 사용한 곳에서는 문제를 심각해진 것이지요. (크랙에 관한 자세한 내용은 아래 내용이 있으니 아래 내용을 참고합니다.)

이 문제가 전화위복이 되었을까요?  이런 문제가 있다는 걸 모르고 그냥 넘어갔으면 더 많은 문서들이 만들어지고,  그렇다면 더 문제가 심각해졌을 것인데 이 문제로 인하여 보안 구멍을 알게되고 수정을 하게됩니다.

한글 3.0에서 문서의 암호 체계를 늘리고,  중간에 건너 띄는 문서를 읽어 버리는 방법을 쓰지 못하게 수정합니다.  아래 내용에 있듯이 문서 암호가 문서의 헤더 부분에만 있기 때문에 문서 헤더만 건너 띄면 되었는데 암호를 문서 헤더뿐만 아니라 문서 전체에 골고루 퍼지게 만들어 버립니다.  이로인하여 보안문제로부터 안심하고 문서를 작성할 수 있게 됩니다.  믿거나 말거나 통신으로 2.x 대 암호가 발생하여 보안을 중시하는 곳에서는 한글을 3.0으로 업그레이드해 오히려 물건이 더 많이 팔렸다는 말도 있습니다. 진짜로 믿거나 말거나죠.


이번에 한글 2007이 나왔는데 이번에는 조금 더 강력한 암호 기법이 들어가 있군요.  문제가 발생해서가 아니라 더 높은 보안을 요구하는 곳도 있나 보네요.  요새 인터넷 암호를 보면 128비트를 넘어 256비트 암호화까지 하는 걸보면 한글과 같은 응용 프로그램에 이러한 요구를 하는 것도 당연하다고 생각되어집니다. 새로운 암호는 몇 비트 체계인지 모르겠군요. 한단계 더 올라간 128비트일까요? 

그러나 새로운 암호 수준으로 만든 문서는 이전판에서는 읽지 못한다는거...


사용자 삽입 이미지

아래 내용은 "파워해킹테크닉" 이란 책의 417~418페이지 중간 ,422~423페이 까지 내용입니다.

한글 2.x의 암호 크랙 사건 개요

한글의 암호체계의 대해서 한글과 컴퓨터사는 다음과 같이 말한 적이 있다. " 문서잠금 안호기능이 42억 9천 4백 96만 7천 2백 95개의 숫자를 조합해 만든 것이깅 어떤 전문가도 감히 풀수 없다. 이를 푸어 내려면 슈퍼컴퓨터로도 130 년이 걸린다."

이러한 말 때문에 암호 해독의 주인공인 이승욱씨는 언론의 초점이 되고 세인의 관심이 집중했다. 이승욱씨는 전통적인 암호 해독법, 즉 컴퓨터를 이용한 코드 자동입력 소프트웨어를 쓴다는 것은 불가능하다는 것을 잘 알고 있었다. 이 방법은 42억9천4백96만7천2백95개의 숫자를 조합해 만든 한글의 암호체계에는 그다지 큰 의미가 없었기 때문이다.

그래서 이승욱씨는 다른 방법을 생각한 결고, 한글 문서파일의 'hwp2.1..xxxxxx.로 시작되는 머리 부분(헤더)에 암호가 들어 가며 이어 <ENTER>키 코드가 들어가고 본문 내용은 그 뒤에 따라온다는 사실을 알았다. 그는 문서 파일의 이 같은 규칙성에 주목했다. '만일 프로그램이 문서 파일에 처음 나오는 <ENTER> 키 코드 값(16진법으로 0D)을 찾아내 이것 이전 부분에 있는 숫자나 문자(즉 암호)는 무시하고 그 뒷부분만 읽어들이면 원래의 암호는 해독할 필요조차 없어질 것이다'라고 생각했던 것이다.

즉 암호 자체를 해독하는 것이 아니라 암호를 체크하지 못하도록 하는 것이다. 이러한 것은 진정한 의미에서의 암호 해독이라고는 할 수 없지만 대부분의 암호화 방법이 역으로 추적하는 수법들이 통하지 않도록 만들어져 있기 때무에 사용할 수 있는 마지막 무기 라고 할수 있다.


한글 2.5의 암호체게
실제는 이미 오래전에 크랙되었다고 알려졌다. 단지 이승욱씨에 대한 관심은 언론의 스타 만들기였다라는 생각이 짙다.

한글 암호체계의 구멍
한글과 컴퓨터사에서는 한글 2.1의 암호체계는 32BIT 암호체계이며, 그에 따라 키를 무작위로 만들어 풀어 보는 방식으로는 2^32인 약 4억 2천 번의 계산 을 거쳐야 한다고 주장했다. 그러나 비교 코드 16BIT에 해독 코드 16BIT가 있다고 암호가 32BIT 라는 계산한 것은 잘못이다. 실제로 암호를 푸는 데 있어서는 해독 코드만 필요한 것이다.
그러면 무작위로 대조해서 푸는 최악의 방법으로푼다 하더라도 2^16인 약 6만 5천 번의 계산이면 되는 것이다. 6만 5천 번이면 엄청나게 많은 횟수라 생각될 수 있으나 그렇지 않다. 컴퓨터란 말 그대로 계산기이며 엄청나게 빠른 계산을 할 수 있다. 그리고 위에서 알아보았듯이 한글의 암호를 해독하는 데 사용되는 연산은 비트회전 이나 AND 등 덧셈 계산보다 기계가 빨리 할 수 있는 연산에 +.*,/가 약간 섞인 정도 이다. 게다가 계산되는 수 역시 2바이트 정수형 이어서 하드웨어적으로 16BIT XT 이상이면 몽땅 연산이 가능한 수이다. 이렇게 되었을 때 어셈블리어로 일일이 대입해 보는 프로그램을 짠다고 하면 짧게는 몇십 초 길어도 몇 분이면 암호가 풀리게 될 것이다.

어떻게 한글 암호를 풀 수 있는가?
위에서 말했던 결점을 이용하면 암호체계를 풀릴 수 있을 것이다. 그러나 또 하나의 관문이 있다. 한글에서는 해독
코드를 입력 받아서 암호를 푸는 것이 아니다. 암호 문자열을 받아 연산을 거쳐 비교 코드를 만든 후에 비교 코드와 비교하고 그 후에 해독 코드로 문서를 풀게 되어 있어서 해독 코드만 알게 되면 비교 코드를 모르게 되어 암호가 틀렸다는 메시지를 받을 것이고 비교 코드만 알게 된다면 해독 코드로 풀 때 문서가 잘못 풀어져 '문서가 손상 되었습니다.'라는 에러가 나오게 될 것이다. 또한 두 코드를 한번에 모두 구한다고 했을 땐느 4억 2천 번을  모두 돌겨 봐야 구할 수가 있는 것이다. 그러나 이 문제 역시 생각을 어느 정도 해보면 해결이 가능하다.  우선 해독코드를 구하게 되었을때 문자열을 어떻게든 간에 무작위로 만들어서 그 문자열로 해독 코드를 구했을때 맞아 떨어지는 문자열을 기억한 후, 그 문자열을 이용해 비교 코드를 계산으로 구하여 한글 파일의 헤더 부분의 비교 코드가 있는 곳에 써 넣으면 되는 것이다. 그런 후에 한글에서 문서를 읽을 때 앞서 구한 문자열을 입력하면 암호는 풀리게 되는 것이다.
또는 문서 부분을 아예 프로그램상에서 풀어 암호없이 저장하는 방법도 있을 수 있다.

그런데 해독 코드를 구하는 것 역시 문제가 있을 수 있다. 해독 코드를 일일이 만들어 문서 데이터를 풀어나갈 때 풀린 문서의 데이터가 맞는 것인지를 알아낼 방법이 없는 것이다. 이것 또한 생각을 해보면 알 수 있다. 한글의 정상적인 코드는 한글일때 조합형 코드를 뒤바꾼 코드라는 것을 앞에서 언급했다. 문서 파일의 대부분의 첫 부분에는 한글이 있을 것이고 코드를 풀었을 때 조합형 한글 코드가 되는 코드가 몇 퍼센트가 있는지 세어서 어느 기준 이상이면 맞다고 치고 대부분의 문서가 풀리게 된다. 조합형 한글 코드가 되는지 알아보는 방법은 조합형 한글의 원리만 알면 쉽게 알 수 있다. 그러나 문서 중에는 앞부분에 표 또는 그림 외국어 등이 많이 있는 경우가 있다. 이 경우 는 전자의 방법으로 풀 수는 없다. 이경우 한글 문서 파일의 문서 데이터 영역의 구조를 알야 한다. 해독 코드가 틀렸을 경우 전체적으로 틀리게 번역되므로 그 구조 또한 오류가 발생하게 된다. 이것을 알아보는 것이 가장 확실하나 한글 파일의 구조는 공개되어 있지 않으므로 구조를 알아내는 작업을 해야 할 것이다.


 

//