web-dev-qa-db-ja.com

MD5の合計をチェックするサニティ

MD5チェックサムにはチェックビットが含まれていますか?

MD5チェックサムを手作業でコピーする必要があり(他に方法はありません)、クレジットカード番号を検証するのと同じ方法でチェックサムが有効であると検証できるコードがあるかどうか疑問に思いました。

明確にするために、私はファイルからMD5合計を生成して、与えられた合計と比較できるようにする方法を尋ねているのではなく、検証することが可能かどうか(そしてそれが可能かどうかは疑わしい)を尋ねています。 MD5合計は、合計を生成するために使用されたバイトを実際に参照することなく、本物のMD5合計であるということです。

考えられるタイプミスを特定したいと思います。

2
Rich

基本的に、チェックサムビットはありません。タイプミスを特定するには、MD5合計のチェックサム(MD5など)を同じチャネルで共有して確認してみてください。

3
Leonid

実際には、暗号化ハッシュ(MD5が目指していた)の設計基準の結果として、存在しないということがあります。

ファイルを理想的な128ビット暗号化ハッシュにフィードする場合、not予測anyハッシュを実行する以外の128ビットの出力(またはそれらの相互関係)。可能であれば、実際には128ビットのハッシュを取得していません。たとえば、ハッシュにパリティビット(1の総数が常に奇数[奇数パリティ]または常に偶数[偶数パリティ]になるようなビット)がある場合、実際には127ビットのハッシュがあります。

また、タイプミスによって誤って有効なハッシュを生成しないようにするために、50/50を超える確率でハッシュを検出する必要があります。したがって、より多くのビットを失うことになります。

問題は、次の理由で128ビットのハッシュが必要だったことです。通常、余分なビットは、ハッシュを攻撃するために必要な作業を2倍にします

冗長性がハッシュの意図された設計の一部である場合、それは4ビットのCRC(など)を備えた124ビットハッシュと呼ばれます。が意図されていなかった場合、実際にはハッシュの部分的な暗号解読(解読)です。

実用的な解決策

タイプミスを見つけたいので、チェックサムまたはチェックディジットを追加して、横に書き留めます。 Perlの Algorithm :: Verhoeff のようなものを使用して、チェックディジットを追加できます。

4
derobert

MD5チェックサム自体はチェックサムです。チェックサムに独自のチェックサム/チェックビットがあるのは奇妙なことです。

16バイトの唯一の基準に一致するランダムな合計は、MD5チェックサムにすることができます。これらの16バイトは、32桁の16進数、128ビット、または任意の形式で表すことができます。

1
gertvdijk