2つの異なるバイナリファイルで同じmd5合計を使用できますか? 1つのバイナリファームウェアファイルは異なるバージョン番号を持ち、修正済みとしてマークされ、小さなバグが修正されました。しかし、両方のファイルのmd5合計は同じです。改訂されたファイルは同じmd5合計を持つことはできません-これは間違いですか?
既存の答えが指摘できないのは、why衝突がこの場合、ほとんどありそうにないとみなされることです。
MD5は、他のハッシュアルゴリズムと同様に、少数の文字を変更しただけで衝突が発生しないように、意図的に設計されています。同じハッシュに戻るには、すべてではないにしてもほとんどを変更する必要があります。ハッシュの重要なポイントはシングルビット(または数ビット)エラーを検出することだからです。この問題領域では、小さな変更が確実にハッシュ変更をトリガーするようにします。今ではMD5であることがわかっていますが、このプロパティは現在も保持されています。
したがって、ファームウェアの新しいバージョンが完全に異なるでない限り、and 100万回目を目撃した場合を除きます現象、あなたが単に古いバージョンを再び受け取ったという確率は巨大です。おめでとう、これは意図したとおりに正確に機能するハッシュチェックプロセスだからです。 :)
一般に、2つのファイルは、内容がまったく同じ場合にのみ、同じmd5
ハッシュを持つことができます。わずかな変化でも、まったく異なるハッシュ値が生成されます。
ただし、注意点が1つあります:md5
合計は128ビット(16バイト)です。異なるファイルの内容の数は無限であり、異なるmd5の合計の数は有限であるため、ハッシュの衝突の可能性があります(ほとんどの場合、確率は小さいですが)。つまり、2つの異なるファイルcanは、md5でハッシュされた場合に同じ合計を生成します。
このため、場合によっては、より高いビットハッシュ(より多くの異なる出力)を使用して、偶発的なハッシュコリジョンの(すでに低い)確率を減らし、ブルートフォースによる意図的なハッシュコリジョンを作成する難易度を高める方が良い場合があります。
上位ビットハッシュの例には、SHA-2ファミリのハッシュ、特にsha256
、sha384
、またはsha512
(これが最適です)が含まれます。sha
の後の数字は、対応するハッシュアルゴリズムが生成するビット数。
他の人が言ったように、MD5衝突は仮説的には可能ですが、非常に信じがたいです(2 ^ 128に1つは340,282,366,920,938,463,463,374,607,431,768,211,456に1つだけのチャンスです)。
ここで説明されている多くの方法のいずれかを使用して、2つのファイルをバイト単位で比較することをお勧めします。 https://superuser.com/questions/125376/how-do-i-compare- binary-files-in-linux 。
または単にdiff file1 file2
-「バイナリファイルfile1とfile2が異なります」というメッセージが表示されない限り、ファイルは同じです。
上記の答えはすべて、最も重要な詳細を無視しています。
MD5チェックサムは、128ビットを持つように定義されています。つまり、2 ^ 128個の異なるMD5値しかありません。いくつの異なるファームウェアイメージが可能ですか?まあ、それはそれらがどれだけ大きいかに依存し、ランダムなバイトシーケンスの何パーセントが有効なファームウェアと見なされるかによって異なります。ただし、2 ^ 128を超えるファームウェアイメージが存在する可能性があります。
lot more、つまりmustが重複していることを意味します。
しかし、givenファームウェアイメージがgiven MD5チェックサムと一致する可能性は、2 ^ 128に1だけであり、非常に小さな数です。
VERY small。
同様に、2人の開発者が偶然人文明の存在中にいつでも同じMD5チェックサムを持つ異なるイメージを作成する可能性は、あなたが心配するには小さすぎます。
偶然です。 意図的には別の質問です。 NSAで作業している場合、128ビットでは上司を満足させるのに十分なセキュリティのビットにはなりません。MD5には、128ビットよりも弱い脆弱性が知られています。
しかし、もしあなたがNSAで働いていたなら、おそらくすでにそれを知っていたでしょう。
可能性は非常に低いですが可能です。詳細については、ファイルサイズと日付を確認してください。ファイルが異なる場合、同じサイズとハッシュを持つ可能性はさらに低くなります。