13

破損を検出するファイルの整合性チェック (チェックサム) に最適なハッシュ関数は何ですか?

次のことを考慮する必要があります。

幅広いファイル サイズ (1 kb から 10 GB 以上)
多数の異なるファイル タイプ
大量のファイル コレクション (+/-100 TB および増加中)

ファイルが大きいほど、より大きなダイジェスト サイズが必要ですか (SHA-1 と SHA 512 のどちらですか)?

SHA ファミリーは暗号化ハッシュ関数と呼ばれているようです。ファイルの破損を検出するなどの「汎用」用途には適していませんか? MD5 や Tiger などのほうがよいでしょうか?

悪意のある改ざんも懸念される場合、最も適切なハッシュ関数に関してあなたの答えは変わりますか?

外部ライブラリはオプションではなく、Win XP SP3+ で利用できるものだけです。

当然性能も気になります。

(私の専門用語が間違っている場合はご容赦ください。この件に関する私の知識は非常に限られています)。

4

1 に答える 1

18

偶発的な破損を検出するには、壊れたものであっても、任意の暗号化ハッシュ関数で問題ありません。特定のハッシュ関数は、ある制限までの入力に対してのみ定義できますが、すべての標準ハッシュ関数では、その制限は少なくとも 2 64ビット、つまり約 200 万テラバイトです。それはかなり大きいです。

ファイルの種類には何の影響もありません。ハッシュ関数は、それらのビットが何を表しているかに関係なく、一連のビット (またはバイト) に対して動作します。

ハッシュ関数のパフォーマンスが問題になる可能性はほとんどありません。「遅い」ハッシュ関数 (例: SHA-256) でさえ、一般的な PC ではハードディスクよりも高速に実行されます: ファイルの読み取りがボトルネックになり、ハッシュ化されません (2.4 GHz PC は SHA-512 を使用して高速でデータをハッシュできます)。 1 つのコアを使用して 200 MB/秒近く)。ハッシュ関数のパフォーマンスが問題になる場合は、CPU が非常に弱いか、ディスクが高速 SSD である (100 TB の高速 SSD を使用している場合、私はちょっとうらやましい) かのいずれかです。その場合、一部のハッシュ関数は他のハッシュ関数より多少高速であり、MD5 は「高速」関数の 1 つです (ただし、MD4はより高速であり、そのコードを任意のアプリケーションに簡単に含めることができるほど単純です)。

悪意のある改ざんが懸念される場合、これはセキュリティの問題になり、さらに複雑になります。まず、暗号的に壊れていないハッシュ関数の 1 つを使用したいと思うでしょう。そのため、MD4、MD5、または SHA-1 ではなく、SHA-256 または SHA-512 を使用します (MD4、MD5、および SHA-1 に見られる弱点は、特定のハッシュ関数には当てはまらない場合があります)。状況ですが、これは微妙な問題であり、安全にプレイすることをお勧めします)。次に、攻撃者がハッシュ結果にアクセスできるかどうかに応じて、ハッシュが十分である場合とそうでない場合があります。おそらく、一種のキー付きハッシュと見なすことができるMACを使用する必要があるかもしれません。HMACハッシュ関数から MAC を構築する標準的な方法です。他の非ハッシュベースの MAC があります。さらに、MAC は秘密の「対称」キーを使用します。これは、何人かの人々がサイレント変更を実行できずにファイルの整合性を検証できるようにしたい場合には適切ではありません。その場合、デジタル署名に頼る必要があります。簡単に言うと、セキュリティのコンテキストでは、明確に定義された攻撃モデルによる徹底的なセキュリティ分析が必要です。

于 2010-10-26T16:01:29.003 に答える