[PHP-users 28626] Re: MD5の仕組みについて
canada-php@kaede.to
canada-php @ kaede.to
2006年 3月 6日 (月) 10:39:58 JST
金田です。
SATOH Fumiyasuさんの<871wxh7z4v.wl%fumiya @ samba.gr.jp>から
> > 確立的にはユニークであるという前提で普通は問題ないです。
> 個人的には、競合する可能性があるのにそれを放置するのは、
> 問題 (バグ)だと思う。
一般的に、可能性が充分低ければバグとはしません。MD5
が完全なメッセージダイジェストを吐くという前提であれ
ば、無視して良い可能性だと思います。RFC 1321によれば、
> the difficulty of coming up with any message
> having a given message digest is on the order of
> 2^128 operations.
だそうですので、
2 ^ 128 ≒ 3.4 * 10 ^ 38 (10進数39桁の数)
これは地球上の全人類の体に含まれる分子の総数に近く、
1秒間に100億回計算するとして、偶然コリジョンするまで
に100億年の100億倍くらい掛かる計算になると思います。
この程度の小さい可能性を考慮するなら、CPUの演算エラー
を考慮して全ての演算に検算を導入しないとバグ、という
ことになってしまいます(検算も間違える可能性も考えな
いといけません)。
似たような例で、RSA暗号の鍵に使う巨大な素数の生成に
は素数判定のアルゴリズムが使われますが、これには判定
失敗の可能性があったりします。しかし可能性が極端に低
いため、失敗する可能性は「ない」ものとしてそのまま使
われています。
> echo md5('メールアドレス'+'何か');
このような手法は、ハッシュが漏洩した場合の危険性の方
がずっと高いです。'何か'を変えない限りずっと同じ文字
列がキーとなりますので。
また'何か'が充分に長くない場合、ハッシュから'何か'を
推測される危険性があります。
意図的なコリジョンについては、
http://slashdot.jp/security/04/08/18/0257220.shtml
のようなニュースがありましたが、これは同じハッシュを
吐く文書の対を生成できた、というもので、(元文書の分
からない)任意のハッシュと同じハッシュを吐く方法が見
つかった訳ではないようです(コメントが詳しいです)。
> バグだと思うんだけどなぁ。マニュアルなどに重複する可能性が
> 記載されているなら、仕様 (制限事項) かな。
重複する可能性については記載がないようです。
--
かなだまさかつ
http://kaede.to/~canada/doc/
PHP-users メーリングリストの案内