6

ファイルのストレージがあり、ストレージはcrc32に追加されたサイズに基づいてファイルを一意に識別します。

このチェックサム(crc32 + size)がファイルを識別するのに十分であるかどうか、またはMD5 / SHA1のような他のハッシュ手法を検討する必要があるかどうかを知りたいですか?

4

4 に答える 4

3

CRCは、深刻なハッシュ関数というよりも、ほとんどのエラー検出方法です。破損したファイルを一意に識別するのではなく、識別するのに役立ちます。したがって、MD5とSHA1のどちらかを選択する必要があります。

強力なセキュリティの必要性がない場合は、より高速なMD5を選択できます。(MD5は衝突攻撃に対して脆弱であることを忘れないでください)。より多くのセキュリティが必要な場合は、SHA1またはSHA2を使用することをお勧めします。

于 2011-04-06T18:26:25.057 に答える
3

CRC-32は十分ではありません。衝突、つまり同じCRC-32を持つ2つのファイル(必要に応じて同じ長さ)を作成するのは簡単です。悪意のある攻撃者がいない場合でも、同じ長さの約65000の異なるファイルがあると、衝突がランダムに発生します。

ハッシュ関数は、衝突を回避するように設計されています。MD5またはSHA-1を使用すると、ランダムな衝突は発生しません。セットアップがセキュリティ関連の場合(つまり、どこかに、積極的に衝突を作成しようとする人がいる場合)、安全なハッシュ関数が必要です。MD5はもはや安全ではなく(MD5との衝突の作成は簡単です)、SHA-1はその点でやや弱いです(実際の衝突は計算されていませんが、作成方法は既知であり、高価ですが、何よりもはるかに安価ですあるべきです)。通常の推奨事項は、SHA-256またはSHA-512を使用することです(セキュリティにはSHA-256で十分です。大きな、64ビットシステムではSHA-512の方が少し速いかもしれませんが、ファイル読み取り帯域幅はハッシュ速度よりも制限されます) 。

注:暗号化ハッシュ関数を使用する場合、ファイルの長さを保存して比較する必要はありません。ハッシュはファイルの曖昧さを解消するのに十分です。

セキュリティ以外の設定(つまり、ランダムな衝突のみを恐れる)では、MD4を使用できます。暗号化ハッシュ関数として完全に「壊れています」が、それでも非常に優れたチェックサムであり、非常に高速です(一部のARMベースのプラットフォームでは、CRC-32よりもさらに高速で、ランダムに対する耐性が大幅に向上しています。衝突)。基本的に、MD5は使用しないでください。セキュリティ上の問題がある場合は、MD5を使用しないでください(壊れています。SHA-256を使用してください)。また、セキュリティの問題がない場合は、MD4の方がMD5よりも高速です。

于 2011-04-07T13:24:50.937 に答える
1

CRC32 +サイズで使用されるスペースは、CRCを大きくするための十分なスペースを提供します。これは、はるかに優れた選択肢です。悪意のある衝突について心配していない場合は、それだけです。その場合、トーマスの答えが当てはまります。

言語を指定しませんでしたが、たとえばC ++では、必要なサイズのCRCを提供するBoost CRCを取得しました(または保存する余裕があります)。

于 2011-04-13T18:21:43.380 に答える
1

他の人が言っているように、CRCは衝突がないことを保証するものではありません。ただし、ファイルに64ビットの数値をインクリメントするだけで問題は解決します。これは決して衝突しないことが保証されています(とにかく良い考えではない1つのディレクトリに膨大な数のファイルを保持したい場合を除きます)。

于 2011-04-06T19:13:25.377 に答える