私の理解では、ハッシュ コードとチェックサムは似たようなものです。つまり、データ ブロックに対して計算された、比較的一意の数値です。
つまり、データの 2 つのブロックが同じ数値のハッシュ/チェックサム値を生成する確率は十分に低いため、アプリケーションの目的では無視できます。
では、同じことを表す 2 つの単語があるのでしょうか、それともハッシュ コードとチェックサムには重要な違いがあるのでしょうか?
私の理解では、ハッシュ コードとチェックサムは似たようなものです。つまり、データ ブロックに対して計算された、比較的一意の数値です。
つまり、データの 2 つのブロックが同じ数値のハッシュ/チェックサム値を生成する確率は十分に低いため、アプリケーションの目的では無視できます。
では、同じことを表す 2 つの単語があるのでしょうか、それともハッシュ コードとチェックサムには重要な違いがあるのでしょうか?
チェックサム は必然的にhashcodeであると言えます。ただし、すべてのハッシュコードが適切なチェックサムになるわけではありません。
チェックサムには特別な目的があります --- データの整合性を検証またはチェックします (エラー修正を可能にすることで、それを超えるものもあります)。「良い」チェックサムは計算が簡単で、さまざまな種類のデータ破損 (1、2、3 ビットのエラーなど) を検出できます。
ハッシュコードは、データを何らかの値にマップする数学関数を単純に記述したものです。データ構造 (ハッシュ テーブルなど) のインデックス付けの手段として使用する場合、衝突確率が低いことが望ましいです。
それぞれの背後には異なる目的があります。
実際には、同じ関数が両方の目的に適していることがよくあります。特に、計算コストに余裕がある場合、暗号的に強力なハッシュ コードは優れたチェックサムです (ランダム エラーによって強力なハッシュ関数が壊れることはほとんどありません)。
実際にはいくつかの違いがあります:
ハッシュコードとチェックサムはどちらも、データ項目から短い数値を作成するために使用されます。違いは、データ項目にわずかな変更が加えられた場合でも、チェックサム値が変更される必要があることです。ハッシュ値の要件は、現実世界のデータ項目が個別のハッシュ値を持つ必要があるということだけです。
わかりやすい例は文字列です。文字列のチェックサムにはすべてのビットを含める必要があり、順序が重要です。一方、ハッシュコードは、多くの場合、長さが制限されたプレフィックスのチェックサムとして実装できます。つまり、「aaaaaaaaaaba」は「aaaaaaaaaaab」と同じようにハッシュされますが、ハッシュアルゴリズムはそのような衝突を処理できます。
ウィキペディアはそれをうまく表現しています:
チェックサム関数は、ハッシュ関数、フィンガープリント、ランダム化関数、および暗号化ハッシュ関数に関連しています。ただし、これらの概念にはそれぞれ異なるアプリケーションがあり、したがって異なる設計目標があります。チェック ディジットとパリティ ビットはチェックサムの特殊なケースであり、データの小さなブロック (社会保障番号、銀行口座番号、コンピューター ワード、シングル バイトなど) に適しています。一部のエラー修正コードは、一般的なエラーを検出するだけでなく、場合によっては元のデータを復元できる特別なチェックサムに基づいています。
ハッシュとチェックサムは、どちらもファイルの内容に基づいて値を作成するという点で似ていますが、ハッシュはチェックサムの作成と同じではありません。チェックサムは、データの整合性を検証 (チェック) し、データ転送エラーを特定することを目的としていますが、ハッシュは、データの一意のデジタル フィンガープリントを作成するように設計されています。
出典: CompTIA ® Security+ Guide to Network Security Fundamentals - 第 5 版 - Mark Ciampa - 191 ページ
最近ではそれらは交換可能ですが、昔のチェックサムは、すべてのデータを (通常はバイト単位で) 加算し、その値を最後に 1 バイト追加するという非常に単純な手法でした。元のデータのいずれかが破損しているかどうかを確認します。チェック ビットに似ていますが、バイトがあります。
ファイルまたはデータが破損していないことを確認するために使用できる、ファイルまたはデータに対して作成されたコード (数値またはその他) を参照するときに、チェックサムという単語を使用する傾向があります。私が遭遇する最も一般的な使用法は、ネットワーク経由で送信されたファイルが (故意またはその他の方法で) 変更されていないことを確認することです。