ハッシュ

2023-11-25 (土) 18:05:09

ハッシュ とは

  • データに特定の演算処理を行って特徴値を抽出すること。
  • 特定の演算処理を、「ハッシュ関数(一方向ハッシュ関数)」と呼ぶ。
  • ハッシュ関数を使って抽出した特徴値を、「ハッシュ値」と呼ぶ。

ハッシュ値

  • ダイジェスト値、メッセージダイジェスト
  • 暗号化チェックサム
  • 指紋(フィンガープリント) ※公開鍵のハッシュ値

ハッシュの特徴・性質

  • 元データが同じであれば、同じハッシュ値になる。
  • 元データが少しでも変わると、ハッシュ値が変わる。
  • 元データの文字種が多いほど解読を困難にすることができる。
  • ハッシュ値の長さは、元データの長さに関係なく同じ長さになる。

原像計算困難性

  • 一方向性・不可逆性
  • ハッシュ値から元データを特定することが困難であること。
  • デジタル署名では、署名から元データが漏洩しないことを保証する。

第2原像計算困難性

  • 元データとハッシュ値から同じハッシュ値を求めることができる他の値(元データ)を特定することが困難であること。

衝突困難性

  • 異なる値から同じハッシュ値になりにくい性質のこと
  • 理論的には同一のハッシュ値を持つ、異なる元データが存在するが、それを推定するのがとても困難であること。
  • ハッシュ値が一致する場合は、元データも同じ(改ざんされていない)ことを保証する。(改ざん検知)
  • H(x) = H(x')

ハッシュの用途

  • デジタル署名
    • ハッシュ値を暗号化(署名)して添付することで、データが正しいことを保証する。

解読の難解化

ソルト

  • パスワードからハッシュ値を求める際に、パスワードに付加する文字列のこと。
  • パスワードにソフトを付加した上で算出したハッシュ値は、同じパスワードでも異なるハッシュ値になり、ハッシュ値からパスワードを特定することが困難になる。
  • ソルトはある程度の長さ(最低20文字)がある方が有効
  • 元データにランダムな文字列(salt)を使って特定の変換(付加するなど)してからハッシュし、ハッシュ値とsaltの両方を保存する。

ストレッチング

  • 複数回ハッシュを重ねる。

将来の難読化手法の変更に対する考慮

  • 現在の難読化手法が分かる情報を保存する。(ハッシュ値の先頭に付加するなど)

攻撃の手法

  • レインボーテーブル
    • ハッシュ値から元データを特定する方法として、大量のハッシュしたハッシュ値のデータベースから同一のハッシュ値を探して、元データを特定する。

ハッシュのアルゴリズム

低速のハッシュ関数

ハッシュが使用されるケース

関連サイト

関連用語