ブログが続かないわけ

この日記のはてなブックマーク数
Webエンジニアが思うこと by junichiro on Facebook

MD5は復号できる!?

このエントリーを含むはてなブックマーク hateb
前回のエントリ(パスワードを平文で管理するのはダメだ)のブクマコメントでYappoさんから貴重な情報を頂いた。
MD5が復号できるというのだ。
しかも、それができるDigest::MD5::ReverseというCPANモジュールがあるという。

これには驚いた。いろいろな情報を当たったところ、やはりMD5などのハッシュは復号できないと書いてあるからだ。
http://www5f.biglobe.ne.jp/~h-it/mlcont/mc0200.htm
http://gimite.net/bcbqtree/qtreemain.cgi?mode=thread&thread=376
http://www.postgresql.jp/document/pg803doc/html/encryption-options.html

しかし、こういうところでいう「復号できない」というのは「復号するアルゴリズムがない」というだけの話で、視点を変えれば復号できないことはないのだ。

頭の固い僕も、アルゴリズムがない=復号不可と考えていたために納得できなかった。
そこで、紹介して頂いたDigest::MD5::Reverseを見てみた。

MD5 sums (see RFC 1321 - The MD5 Message-Digest Algorithm) are used as a one-way hash of data. Due to the nature of the formula used, it is impossible to reverse it.

This module provides functions to search several online MD5 hashes database and return the results (or return undefined if no match found).


1行目。
うん。やっぱり復号は不可と書いてあるじゃないか。とりあえず自分の知識(記憶)が間違っていないことに一安心。

ところが2行目。
あっちゃー。こんな方法があったのか。MD5でハッシュ化されたデータを持っているオンラインデータベースがあって、そこに問い合わせると。。。

うーん、すごい。
目から鱗だわ。

Yappoさん、貴重な情報をありがとうございました。

[復号のオレオレ定義について追記2007/10/23]
復号という言葉の正しい定義はわからないんだけど、僕の「復号」のイメージはこんな感じだ。で、このエントリで断りなく使っている「復号」というのは「広義の復号」のこと。どんな手段であれ、元の文が復元できれば、それは復号と呼んでもいいのではないかと思ったから。


まあ、タイトルが釣りっぽくなってしまったの、ちょっと反省してる。
そもそも、ハッシュ化に関しては「暗号化/復号」という言葉自体がそぐわないというようなブクマコメントを頂いたのだが、それがいちばん正しいような気がする。
この記事のトラックバックURL
http://en.yummy.stripper.jp/trackback/719489
トラックバック
パスワードを平文で管理するのはダメだ
最近の入門書はとにかくセキュリティ面がおろそか 今日の話は既知の人に取っては当たり前のことばかりなんだけど、こういうことって最近の入門書には書かれていないし、受託案件でクライアントから出てくる要件に含まれていることがほとんどないから、もしかしたら普
| ブログが続かないわけ | 2007/10/23 12:41 PM |
いや、復号はできないでしょう
たぶんわかって書いてるんだと思うけど、自分のために思考整理。 ブログが続かないわけ | MD5は復号できる!? http://en.yummy.stripper.jp/?eid=719489 Digest::MD5::Reverseは、あくまで 「おなじハッシュ値をもつデータを引っ張ってくる」 だけで別に復号できるわけ
| ひろ式めもちょう | 2007/10/23 2:39 PM |
Digest::MD5::Reverse
MD5は復号できる!?の記事を見て、MD5を複合化するモジュールがあるのか、なるほどというわけでDigest::MD5::Reverseのソースを実際にみてみた。 7242d6c91121f8e2e87803855c028e55(MD5ハッシュ値)を検索する場合 http://milw0rm.com/cracker/search.php(POSTで
| hollyなblog | 2007/10/25 11:22 PM |
[PHP]オープンソースのパスワードハッシュ化状況調査
こないだ書いた下記のエントリでいろいろなコメントを頂いた。 ■パスワードを平文で管理するのはダメだ ■MD5は復号できる!? で、結局どんな風にハッシュ化すれば安全なのか僕なりに理解した。 まず、平文は問題外。 次にハッシュ化の方法だけどMD5やSHA1の場合
| ブログが続かないわけ | 2007/11/06 12:40 PM |
[IT]MD5を解読する方法
MD5で暗号化された文字列を解読して元に戻します。あくまで「復号化」ではなく「解読」です。復号化するアルゴリズムは存在しないらしいので。 面白いのがこちらのやり方。 Rauru Blog » Blog Archive » MD5破りにGoogleを活用 あまり感心しない用途だとは思
| 医者を志す妻を応援する夫の日記 | 2007/11/22 1:10 PM |
[PHP]パスワードのハッシュ化にはcrypt が便利
パスワードをDBに保管するとき、プレーンテキストのままじゃダメってのはもういいよね。 (参考)ブログが続かないわけ | パスワードを平文で管理するのはダメだ で、そのときどうやってハッシュ化するかというお話。 まず、大前提として復号可能な暗号は避けた方
| ブログが続かないわけ | 2009/01/22 8:12 PM |
コメント
MD5が辞書攻撃に弱いのは普通の知識ですよ
| | 2007/10/23 7:50 PM |
普通の知識か...
ホントに知らなかったやー。

もっと勉強しなくちゃ。
| junichiro | 2007/10/23 8:14 PM |
それでも、複合はできないと思います。
| SQ | 2007/10/24 12:36 AM |
普通はsaltつけると思いますが、それでも復号できるのかな?
| toy | 2007/10/24 3:51 AM |
> toyさん
参考:http://www.infoq.com/jp/news/2007/09/rainbowtables
文字列とハッシュの相対表が存在しない範囲になると無理です。
ですから、saltを付けることは有効ですね。
| モニョミル | 2007/10/24 9:07 AM |
意味があるのか?と疑問に思いながらも
saltをつけていたけど、そういうことか。

よかった。
| junichiro | 2007/10/24 11:59 AM |









関連情報