메아리 저널

MD5의 종말

새해 보람 없이 시작하려는 찰나에 /.에 올라 온 링크를 보고(원래는 그제 올라온 건데...) 뿜는 바람에 다 보고 자느라 새해 첫 날부터 늦잠을 잤네요.

http://www.win.tue.nl/hashclash/rogue-ca/

...그야말로 대박입니다. MD5 해시 충돌이 발견된지 4년만에 이걸 가지고 진짜로 인증서를 조작하는 것이 가능해졌네요. 물론 가장 큰 탓은 MD5를 아직도 쓰고 있는 일부 인증서 파는 업자들(...) 탓이긴 하지만.

대략적인 요약은 이렇습니다. 일반적으로 PKCS#7 인증서에는 인증서의 시리얼 넘버, 유효 기간, 발급자, 피발급자, 공개키 같은 것들이 들어 있고 이들을 상위 인증서의 비밀키를 사용해서 이게 진짜로 상위 인증서가 인증한 것인지를 알려 주는 해시가 들어 있습니다. 그런데 이 해시가 MD5를 사용할 경우, 이미 잘 알려진 이런 저런 방법들을 사용하여 MD5 해시가 동일한 인증서를 만드는 것이 가능한 겁니다. 물론 이 과정은 아무리 많이 효율적이 되었더라도 상당한 시간이 걸리는데다가 그렇게 해서 나오는 결과가 "서로 같은 해시를 가지는 두 인증서"이지 한 인증서를 줬다고 똑같은 해시를 갖는 걸 막바로 만들어 주는 게 아니기 때문에 좀 삽질이 필요한데, 연구진은 PS3 백여대로 이루어진 클러스터로 이 두 인증서를 3일 정도의 시간 안에 생성하는 데 성공하고, 이 인증서 중 원래 업체(certificate authority)가 생성할 법한 쪽의 인증서를 가져다가 진짜로 그런 인증서가 나오도록 타이밍 어택을 좀 했다고 합니다.

원래 글이 참 잘 쓰여져 있기 때문에 (영어만 된다면...) MD5 해시가 어떻게 깨졌고 그걸 사용해서 어떻게 이런 결과를 얻어 낼 수 있는지 궁금하신 분께서는 읽어 보는 걸 추천합니다. 기존의 공개키 infrastructure가 어떻게 구축되어 있는지에 대한 지식이 조금 있으면 읽기 훨씬 수월해 질 거에요.

이 글은 본래 http://arachneng.egloos.com/1283011에 썼던 것을 옮겨 온 것입니다.


(rev 71b35f804c1e)