ハッシュ関数

ハッシュ関数を使用して、データをエンコードして、入力をハッシュ・コードまたはハッシュ値に変換することができます。 ハッシュ・アルゴリズムは、2 つの入力が同じハッシュ値を持つ (衝突する) 可能性が最小になるように設計されています。

ハッシュ関数は、データ・レコードの検索の高速化 (単純な一方向性ルックアップ)、データの検証 (チェックサム)、および暗号化に使用できます。 ルックアップの場合、ハッシュ・コードは、データ・レコードへのポインターを格納するハッシュ表へのインデックスとして使用されます。 チェックサムの場合、データのハッシュ・コードがストレージまたは転送の前に計算された後、ストレージまたは転送の後にも再度計算され、データの整合性が検証されます。ハッシュ・コードが一致しない場合、データが破損しています。 暗号化ハッシュ関数は、データ・セキュリティーの目的で使用されます。

以下に、ハッシュ関数の一般的なユース・ケースをいくつか示します。
  • 重複したレコードの検出。 重複したレコードのハッシュ・キーは、ハッシュ表内の同じ「バケット」にハッシュされるため、レコード数が 2 個を超えるバケットをスキャンするだけで重複したレコードを検出できます。 この方式は、ファイル内の各レコードをソートおよび比較する方式よりはるかに高速です。 また、このハッシュの手法は類似レコードの検索にも使用できます。類似したキーは隣接したバケットにハッシュされるため、類似レコードの検索はこれらのバケットに限定することができます。
  • 近接した 2 点の特定。 ハッシュ関数を空間データに適用することにより、モデル化された空間が効率的に格子に分割されます。 上記の例と同様に、格子内の隣接したセルを検索するだけで済むため、検索/比較の時間が大幅に短縮されます。 これと同じテクニックは、形状や画像など、別のタイプの空間データにも利用できます。
  • メッセージ整合性の検証。 メッセージ・ダイジェストのハッシュが転送の前と後の両方で行われ、これら 2 つのハッシュ値を比較することによって、メッセージが破損しているかどうかが判別されます。
  • パスワードの検証。 認証時、ユーザーのログイン資格情報がハッシュされ、このハッシュ値が、そのユーザー用に保管されているハッシュ済みパスワードと比較されます。