MD5変換に固定点はありますmd5(x) == x
か?つまり、xは存在しますか?
md5(x) == x
であるためmd5(x)
、 128ビット長ではないxは存在しません。したがって、128ビットドメインのmd5に固定小数点がある場合にのみ、任意のサイズの入力に対してmd5に固定小数点があります。
1-(1/e)*(1/e) ≈ 86.47%
MD5変換に固定点はありますmd5(x) == x
か?つまり、xは存在しますか?
md5(x) == x
であるためmd5(x)
、 128ビット長ではないxは存在しません。したがって、128ビットドメインのmd5に固定小数点がある場合にのみ、任意のサイズの入力に対してmd5に固定小数点があります。
1-(1/e)*(1/e) ≈ 86.47%
回答:
MD5合計は128ビット長であるため、固定小数点も必ず128ビット長である必要があります。任意の文字列のMD5サムが均一にすべての可能な和に分配されると仮定すると、次に、任意の128ビットのビット列が固定点である確率は1 / 2 128。
したがって、全く128ビット列が固定小数点ではない確率は(1 -であり、1 / 2 128)2 128、固定点が存在する確率が1になるように- (1 - 1 / 2 128)2 128。
nが無限に行くように制限するので(1 - 1 / N)Nである1 / E、及び2 128 -最も確かに非常に多数であり、この確率は、ほぼ正確に1である1 / E ≈63.21パーセント。
もちろん、実際にランダム性が関与することはありません。固定小数点がある場合とない場合があります。しかし、定点があると63.21%確信できます。(また、この数はキースペースのサイズに依存しないことに注意してください。MD5の合計が32ビットまたは1024ビットの場合、約4または5ビットよりも大きい限り、答えは同じになります)。
私のブルートフォースの試みで、12のプレフィックスと12のサフィックスの一致が見つかりました。
接頭辞12:54db1011d76dc70a0a9df3ff3e0b390f-> 54db1011d76d137956603122ad86d762
サフィックス12:df12c1434cec7850a7900ce027af4b78-> b2f6053087022898fe920ce027af4b78
ブログ投稿:https : //plus.google.com/103541237243849171137/posts/SRxXrTMdrFN
md5sum
linuxコマンドを使用しました。異なる結果が表示されました
ハッシュは元に戻せないため、これを理解するのは非常に困難です。これを解決する唯一の方法は、ハッシュの可能なすべての出力でハッシュを計算し、一致するかどうかを確認することです。
詳しく説明すると、MD5ハッシュには16バイトあります。つまり、2 ^(16 * 8)= 3.4 * 10 ^ 38の組み合わせがあることを意味します。16バイトの値のハッシュを計算するのに1ミリ秒かかった場合、すべてのハッシュを計算するのに10790283070806014188970529154.99年かかります。
はい/いいえの答えはありませんが、私の推測は「はい」であり、さらに(文字列解釈ではなく、ビット文字列解釈のために)2 ^ 32のような固定点がある可能性があります。私はこれに積極的に取り組んでいます。それは、多くの創造性を必要とする素晴らしい簡潔なパズルのように思えるからです(もしあなたがブルートフォースの検索にすぐに満足しない場合)。
私のアプローチは次のとおりです。それを数学の問題として扱います。128個のブール変数と、(一致するはずの)入力に関して出力を表す128個の方程式があります。アルゴリズムのテーブルからすべての定数とパディングビットを挿入することで、方程式を大幅に簡略化して、128ビット入力の場合に最適化されたアルゴリズムを生成できることを願っています。これらの簡略化された方程式は、効率的な検索のためにいくつかの素晴らしい言語でプログラムすることができます。または、抽象的にもう一度処理して、一度に1ビットずつ割り当て、矛盾を監視します。あなたはそれが入力と一致していないことを知るために出力の数ビットを見る必要があるだけです!
おそらく、それを見つけるのに私たちが持っているよりも時間がかかるか、MD5の妥協が必要になるでしょう。
2つの解釈があり、いずれかを選択できる場合、固定小数点を見つける確率は81.5%に増加します。
厳密に言うと、MD5の入力は512ビット長で、出力は128ビットなので、定義上それは不可能だと思います。