パスワード1 で登録し、パスワード2 でサインインしてください。ログインできた場合、そのストレージは指定されたアルゴリズムでパスワードをハッシュ化しており、PHPは == を使用してそれらを比較しています(MD5、SHA-1、平文の場合)。
MD5、SHA-1、SHA-2ファミリー の場合、古くから知られたトリック(実際には文書化された機能です。PHP型比較表 と を参照)を使用します。PHPでは となることを、 な目的で利用しているだけです。リスト内のどのパスワードも、他のどのパスワードとも します。これは トリックとは異なります。 の違いに注目してください。
'0e1' == '00e2' == '0'マジックハッシュを持つすべてのアルゴリズムは次のとおりです:
md5(md5(password))@0xb0bb の言葉を引用すると、「マジックハッシュには、パスワード比較以外の用途(キャッシュ層やハッシュ関数の出力から導出されるデータなど)もあり、これらの既知の安全でないアルゴリズムや、あまり知られていないアルゴリズム、擬似ハッシュアルゴリズムは、そのような場面でより簡単に見つけることができます。」
平文 の場合、さまざまな変換トリックを使用します。最初のパスワードは2番目のパスワードとのみ 一致 します。トリックは、それらを可能にするPHPバージョンごとにグループ化されています。
bcrypt はパスワードを最大72文字に切り詰めます。両方のパスワードの最初の72文字が一致する場合、パスワードは 一致 します。
descrypt(従来のUNIX DES crypt)はパスワードを最大8文字に切り詰めます。両方のパスワードの最初の8文字が一致する場合も、パスワードは 一致 します。「General cross-check」セクションを参照してください。
64バイトを超えるパスワードを PBKDF2-HMAC-SHA1 でハッシュ化する場合、最初にSHA1で プリハッシュ されます。そのため、sha1(password1) === bin2hex(password2) であれば PBKDF2-HMAC-SHA1(password1) === PBKDF2-HMAC-SHA1(password2) が成り立ちます。同様の プリハッシュ は PBKDF2-HMAC-SHA224 と PBKDF2-HMAC-SHA256 の場合にも適用されます。
現時点では、Norbert Tihanyi のおかげで、それぞれにマジックハッシュが1つだけあります。将来的にはさらに追加されることを願っています。
PHPで何か*を比較するときは、== ではなく === を使用してください。また、PHPでのパスワードハッシュ化には password_hash() と password_verify() を使用し、MD5やSHA-1は使用しないでください。*ハッシュを比較するときは hash_equals() を使用してください。
すべてはこのツイートから始まりました。2014年2月に QNKCDZO と 240610708 を生成し、その後、インターネット中に広まりました。ググってみてください。
2014年当時はノートパソコン、いくつかの for(または foreach?)ループ、多くのCPUサイクル、そして外部ファンを使用していました。しかし現在では、そのためにGPUと改造版hashcatを使用できます(使用すべきです)。Carl Löndahl と 0xb0bb によるこの記事を参照してください。
Chick3nman とその仲間たちも、独自バージョンのhashcatに取り組んでいます。お楽しみに。
実際の 英数字の衝突が必要な場合、Marc Stevens による 72バイトの英数字MD5衝突(1バイト差、しかも1ビット差)があります:
md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")
=
md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")
最初のパスワードで登録し、2番目のパスワードでログインできたとしても、そのサイトが単なる md5($password) ではなく bcrypt(md5($password)) を使用している可能性があることに注意してください。このようなハッシュのラッピングは、パスワードハッシュのアップグレードの際に使用されることがありますが、一時的にのみ使用すべきです。
これらの 実際の 衝突に興味がある場合、または独自のものを作成したい場合は、Marc のProject HashClashを参照してください。
@solardiz による実際のLMハッシュ衝突(#35、ありがとうございます!):
db82323cb0693862:2275490 または 0/*LUZ@44b3b60db75c15c1:2716388 または 1}DC<XT585e239d32df1998:8351762 または $;)5D|Xさらに生成する方法はこのツイートを参照してください。