「md5sum」はどれくらい正確ですか?


27

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

検証済みのMD5は、すべてのビットがまったく同じであることを意味しますか、それともバイナリ変更がMD5に反映される前に破らなければならないしきい値がありますか?

md5の生成方法に関するドキュメントも歓迎します。



@chorobaこのすべてを正しく読んでいる場合、検証されているファイルのサイズに応じて、検出されない変更の確率が高くなります。ただし、それはまだ確率であり、100%の確実性は16バイトのファイルでのみ得られます。私は正しいですか?
コナーラスムッセン

@Konnerファイル転送に関するあなたの質問を読みました。そのためには、安全です。転送でビットが破損する可能性は小さく、転送でコピーしたファイルの一部が失われる可能性が高くなります以前の状況を理解したと仮定します。MD5は両方のファイルを比較するのと同等の努力を払っていますが、両方のファイルに同時にアクセスする必要がないという点でいくつかの利点があります。
ドクトロライチャード

15
「検証されたMD5は、すべてのビットがまったく同じであることを意味します。」ピジョンホールの原理のおかげで、これは不可能であることに注意してください。en.wikipedia.org/wiki/Pigeonhole_principle
Plutor 14

3
16バイトのファイルに対しても保証は得られないと思います。
Mooingダック14

回答:


65

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

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

1兆個のデータがある場合でも、一致しないMD5がそれらの1兆個に属するMD5ハッシュを生成する確率は、1兆個に1個よりはるかに少ないです。


理論的には同じハッシュを持つ2つのファイルを生成することは可能ですが、実際には実行不可能な場合があります。特に、置換ファイルも意味がある場合。たとえば、元のファイルが英語のテキストである場合、英語でもある他の一致がない可能性があります。または、Excelスプレッドシートの場合、同じハッシュを持つ他のファイルはどれも有効なスプレッドシートではありません。
バーマー14

1
@Barmar:win.tue.nl/hashclash/Nostradamusこれらの人は、同じMD5ハッシュを使用して、実際に実行可能であることを証明する多くのpdfファイルを作成しました。
philfr 14

26

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

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

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


1
要するに、md5はファイルの整合性を検証するための迅速で汚い方法にすぎず、検出されないエラーが大惨事の影響を引き起こさない場合にのみ使用する必要があるということです。
コナーラスムッセン

3
転送またはコピー中の破損を検出するのが最善の方法です。セキュリティ上の問題としてではありません。
マイケルマルティネス

12
@KonnerRasmussen-それは影響の程度の問題ではなく、脅威の性質です。2つのドキュメントが誤って同じMD5を持っているのではないかと心配している場合は、心配しないでください。コンピューターが自発的に炎上する確率はかなり高くなります。知的な攻撃者が既に持っている文書と一致する文書を作成するかもしれないと心配している場合、それは深刻な懸念であり、より良いハッシュを取得する必要があります。あなたが心配している場合は、インテリジェントな、攻撃者が互いに一致する2つの文書を作成可能性がある、ない「心配」を実行します。それはなります確かに起こります。
マルヴォリオ14

5
もちろん、MD5ハッシュコリジョンを生成することは理論的には可能ですが有用なコリジョン(コリジョンファイルは同じタイプのファイルで、その内容は少なくとももっともらしい本物であるなど)を生成するのははるかに困難です...
Shadur

6
@Shadur:以前はそうでしたが、現在進行中のセキュリティ研究により、MD5コリジョンを生成してそれを簡単にする新しい方法が発見されました。特に、ファイル形式で自由形式の「コメント」データのチャンクが許可されている場合、適切なコメントを挿入することで、MD5ハッシュと一致させることができます。
MSalters

17

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

2つのハッシュが偶然に衝突する確率は1/2 ^ 128であり、これは340分の1に相当します。

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

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


8
まだチャンスがあると言っているのですか?:p
ホロウェイ14

1
問題は、衝突を検出するために100年間、毎秒60億ファイルをハッシュする必要があるが、最初の1秒以内に起こる可能性があります。
デロビー14

確かに、それは最初の1秒間に起こる可能性があります。しかし、いつものように、それはバランスの理由についてです。そのリスクは許容できない軍事用途かもしれませんが、エアバッグセンサーがmd5を使用している場合、私は考え抜かずに車を借ります。可能性として、md5の衝突を待っている間に複数回雷に見舞われる可能性があります。
ゾルトSzilagy

すみませんが、2 ^ 128の半分は2 ^ 64ではなく2 ^ 127です。
フィスキ14

2
@fischi、誕生日のパラドックスのリンク、およびen.wikipedia.org/wiki/Birthday_attackを読んでください-ハッシュの総数を単純に半分にするだけの問題ではありません。探索空間Hが与えられた場合、衝突の可能性が50%になる前に生成する必要があるハッシュの数は、およそsqrt((pi / 2)* H)です。あなたは2 ^ 128でその計算を行う場合は、約2 ^ 64の数を取得します
ポール・ディクソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.