메아리 저널

MD5 Reverse Lookup

사람들의 호기심이라는 게 때로는 엄청난 결과를 낳기도 하는 법이다. MD5를 수학적으로 깨 버리려는 cryptanalysis와는 별도로 최대한 많은 원문-MD5 쌍을 저장해서 일반적인 목적으로 찾기 쉽게 만드는 작업은 의외로 많이 이루어졌다. (뒤져 보면 많이 나올 것이다.) 다음은 내가 필요해서 찾아 본 이런 데이터베이스들의 목록이다.

  • http://www.md5lookup.com/ (TMTO 데이터베이스) - 내가 본 것 중에 가장 큰 데이터베이스. 사용자의 입력을 기반으로 하는 것이 아니라 미리 어느 정도까지의 데이터베이스를 만들어서 (실용적으로는 상당히 쓸만한) 검색을 해 낸다. 현재 적어도 600억 개 이상의 레코드가 있는 것으로 추정1된다.
  • http://md5.crysm.net/ - 사용자 입력과 일부 데이터를 기반으로 만들어진 데이터베이스 중 가장 큰 것으로 보인다. 현재 43,843,070개의 레코드가 있는데 내가 들어 가 봤을 때는 뭔가 접속이 안 되더라.
  • http://md5.rednoize.com/ - 위키백과에 실려 있는 사이트. 현재 3,969,771개의 레코드가 있다.
  • http://md5.khrone.pl/ - 현재 2,558,114개의 레코드가 있다. (폴란드어 rekordów는 영어로 record를 뜻한다.)
  • http://www.schwett.com/md5/ - 현재 201,339개의 레코드가 있다.

대강 뒤져 본 바로는, 이런 시도가 많기는 한데 100만 레코드 이상을 보유한 데이터베이스는 그렇게 많지 않은 것 같으며 1억 레코드 이상을 보유한 데이터베이스는 맨 위에 있는 TMTO 데이터베이스가 거의 유일한 것 같다. 이럴 수 밖에 없는 가장 큰 이유는 TMTO 데이터베이스는 사용자 입력 없이 미리 계산된 거대한 테이블을 쓰는 덕분에 데이터베이스에 새로운 레코드를 추가한다던지 할 필요가 없는 데 반해, 다른 데이터베이스들은 사용자 입력을 받아 들여야 한다는 데 있다. 실제로 TMTO 데이터베이스는 새로운 레코드를 허용하지 않는 해쉬 테이블을 만들어 쓰는 것으로 알고 있다.

이런 삽질들의 결과물을 사용하면 웬만한 MD5 해쉬는 간단하게 캐 낼 수 있다. (적어도 8글자까지는) 여기서 얻을 수 있는 교훈은, 암호는 최대한 길게 만들어야 한다는 것. 숫자만으로 이루어져 있어도 15자리가 넘으면 풀어 내는 기가 거의 불가능하다 :) (참고로 내가 쓰는 암호는 19자리 숫자이다. 당연히 저런 걸로는 전혀 안 잡힌다.)

엄밀하게 말하면, 암호를 길게 만드는 것 외에도 해시와 함께 적절한 salt를 사용하여 이런 테이블들을 어느 정도 무력화시킬 수 있다. (대표적인 방법으로 HMAC이 있다.) 하지만 salt를 알고 있다면 여전히 짧은 암호는 바로 알아 낼 수 있으므로, 암호가 충분히 길어야 한다는 건 변하지 않는다. (2010-03-25)


  1. 총 레코드 수는 306,777,669,363개이고 이 중 현재 1/5가 만들어진 상태.

이 글은 본래 http://tokigun.net/blog/entry.php?blogid=81에 썼던 것을 옮겨 온 것입니다.


(rev 553c824afb91)