2011-02-07 11 views
6

大きなバイナリファイルを内部的に配布しているクライアントがあります。彼らはまた、ファイルのmd5チェックサムを渡しており、ワークフローの一部として使用する前にチェックサムに対してファイルを検証しているようです。md5偽陽性チェックサムはどのくらいありそうですか?

しかし、彼らは、「多くの場合、md5がまだファイルが良好であると言っているファイルで破損が発生していることが多い」と主張しています。

私が読んだことは、これが非常に起こりそうもないことを示唆しています。

これはおそらく聞こえますか?別のハッシュアルゴリズムがより良い結果をもたらすでしょうか?私は実際にチェックサムのチェックを主張するようなプロセスの問題を実際に調べるべきですか?

NBでは、この文脈で「しばしば」が何を意味するのかまだ分かりません。彼らは1日に何百ものファイルを処理しています。これが毎日、毎月、または毎年起こっているかどうかはわかりません。

+5

"壊れた"ファイルと "良い"オリジナルの例を挙げてください。 –

+1

md5の合計が破損ファイルで計算されたか、または合計が計算された後に破損が発生している可能性はありますか?確かに知るには、Anonの提案を取り、同じチェックサムを持つ2つのファイルの例を得てください。 – BMitch

+0

それ以来、ビットトレントの同期の考え方を見てきましたか? getsync.com] – dlamblin

答えて

9

MD5は128ビットの暗号化ハッシュ関数なので、異なるメッセージは128ビットのスペース上でかなりうまく分散する必要があります。それは、2つのファイル(MD5を倒すために特別に構築されたファイルを除く)が衝突の確率が1/2^128になることを意味します。言い換えれば、一対のファイルを1ナノ秒ごとに比較すると、まだ起こっていないでしょう。

+1

さて、あなたはそれがすでに起こっていたことを認識していますか?もちろん、これらの衝突が引き起こされました(同じMD5チェックサムを持つ2つの異なるファイルを作成しようとしていました)が、これは人類に知られているファイルがいくつかあることを変更しません完全に異なるデータを含んでいても、まったく同じMD5チェックサムを生成します。 – Mecki

+2

@Mecki:「MD5を敗北させるために特別に作られたファイルを除いて」と言った部分を読んだことがありますか? – recursive

+0

しかし、あなたは2つのファイルしか持っていません。あなたはファイルのセットを持っていて、2つのファイルを同じ値にハッシュしたくはありません。確率は2^64であるsqrt(2^128)と仮定されます。 64ビットのハッシュを使用した場合は約43億個のファイル、MD5のスペースでは280兆個のファイルを保存できます。 2^128ファイルに達すると、そのポイントとの衝突を避けることができたら、次のファイルが衝突することが保証されます。あなたが実際に持っていることはできません。 – dlamblin

5

ファイルが壊れている場合、壊れているファイルが破損していないファイルと同じmd5チェックサムを持つ確率は1:2^128です。言い換えれば、決して決して「しばしば」であることがほとんどありません。

4

MD5の使用上のバグ(恐らく、間違ったファイルをMD5にしているかもしれない)やバグのように聞こえるかもしれませんが、実際に起こったことを誤って報告している可能性があります彼らが使っている図書館にたとえば、以前使用していた古いMD5プログラムでは、2GBを超えるファイルは処理できませんでした。

This questionは、毎秒60億個のファイルを生成している場合、平均して100秒ごとに平均して衝突が発生することを示しているため、ほとんどありません。

3

この可能性はありますか?

いいえ、同じチェックサムを引き起こすランダム破損の可能性は2又は3.40×101です。この数字は、1を10億(1)の確率でとしています。

もう1つのハッシングアルゴリズムを使用すると、より良い結果が得られますか?

おそらくそうではありません。 MD5は攻撃に対する衝突耐性のために壊れていますが、ランダムな破損や一般的な使用基準に対しては問題ありません。

チェックサムのチェックを主張しているようなプロセスの問題を実際に調べる必要がありますか?

おそらく

が、問題のすべての可能な点を考慮してください。MD5検証後に破損MD5生成

  • ファイルの前に壊れ

    1. ファイルを。
    2. MD5プログラムや支援の枠組みもしそうであれば、バグ
    3. 演算子の誤用
    4. (例えば、間違ったファイルに対してMD5プログラムを実行し、意図しない)オペレータ乱用(意図的な、例えば検証ステップをスキップ)

    を持っています最後に、ファイルをラッパー形式で配布して、オペレータがファイルを展開するように強制することを考えていますが、展開中にアンラッピングは検証を行いません。私は、大きなファイルをサポートし、圧縮をオフにするGzipや7-Zipのようなものを考えています(私はそれらのことを知らない)。

  • 0

    バイナリが配布されないか、破損した場合(ファイアウォール、サイズ制限、ウイルスの挿入など)、さまざまな理由があります。バイナリファイルを送信するときは、データの整合性を保護するために、常にファイルを暗号化する必要があります(低レベルの暗号化でも暗号化されていない場合よりも優れています)。

    関連する問題