web-dev-qa-db-ja.com

`md5sum`はどの程度正確ですか?

md5sumを使用してファイルの整合性を検証する場合、プロセスはどの程度正確ですか?

検証済みのMD5は、EVERYビットがまったく同じであることを意味しますか、それとも、バイナリ変更がMD5に反映される前にブレークする必要があるしきい値がありますか?

どのようにmd5が生成されるかに関するドキュメントもいただければ幸いです。

27

MD5は、この目的のためにインテリジェントな敵に対して破られます。同じMD5ハッシュを生成する2つの異なるデータブロックを悪意を持って作成することが可能です。

ただし、MD5を使用して、転送中またはストレージ内の不注意によるデータの破損を防ぐことは、完全に適切です(ほぼ確実により良い方法があります)。このようなイベントによってMD5ハッシュが同じになる可能性は考えられますが、確率が非常に低いため、心配する価値がある確率はほとんど想像もできません。バックグラウンドの放射、トンネリング、静的、その他の数十のソースによって引き起こされる障害は、桁違いに多くなる可能性があります。

1兆単位のデータがあったとしても、不一致のMD5がそれらの1兆単位に属するMD5ハッシュを生成する可能性は、1兆単位の1よりはるかに小さくなります。

65
David Schwartz

MD5はハッシュです。基本的に、ファイルのコンテンツ全体を、長さが16バイトのIIRCである小さな文字列にマップします。

同じMD5サムにハッシュする複数のファイルがあることは明らかです。したがって、一致するMD5サムは、ファイル間の正確な一致を保証するものではありません。

ハッシュが機能するため、しきい値はありません。そのため、MD5サムは、1ビットの変更でも検出できます。ただし、単一ビットの変更が多数あると、MD5ハッシュが同じになる可能性があります。したがって、ランダムな破損に対してファイルの整合性を検証するためにMD5を使用することは非常に合理的ですが、MD5ハッシュが同じであることを確認しながら誰かがファイルを変更する可能性があるため、悪意がある可能性はありません。

26
Itai

MD5-ハッシュは128ビットで構成されています。ソースの単一のフリップされたビットは、ハッシュの(平均して)64ビットをフリップします。

2つのハッシュが偶然に衝突する確率は1/2 ^ 128です。これは、340十億分の1、282デシロン、366ノリオン、920 octillion、938 septillion、463 sextillion 463 quintillion 374 quadrillion 607兆431 billion 768 million 211,000 456の1です。

ただし、すべてのハッシュを保持する場合、 誕生日パラドックス のおかげで、確率は少し高くなります。ハッシュが衝突する確率が50%になるには、2 ^ 64ハッシュが必要です。つまり、衝突が発生するためには、平均して100年間、毎秒60億のファイルをハッシュする必要があります。

ソース:porneL、 https://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions

17
Zsolt Szilagy