ハッシュ とは†
- データに特定の演算処理を行って特徴値を抽出すること。
- 特定の演算処理を、「ハッシュ関数(一方向ハッシュ関数)」と呼ぶ。
- ハッシュ関数を使って抽出した特徴値を、「ハッシュ値」と呼ぶ。
ハッシュ値†
- ダイジェスト値、メッセージダイジェスト
- 暗号化チェックサム
- 指紋(フィンガープリント) ※公開鍵のハッシュ値
ハッシュの特徴・性質†
- 元データが同じであれば、同じハッシュ値になる。
- 元データが少しでも変わると、ハッシュ値が変わる。
- 元データの文字種が多いほど解読を困難にすることができる。
- ハッシュ値の長さは、元データの長さに関係なく同じ長さになる。
原像計算困難性†
- 一方向性・不可逆性
- ハッシュ値から元データを特定することが困難であること。
- デジタル署名では、署名から元データが漏洩しないことを保証する。
第2原像計算困難性†
- 元データとハッシュ値から同じハッシュ値を求めることができる他の値(元データ)を特定することが困難であること。
衝突困難性†
- 異なる値から同じハッシュ値になりにくい性質のこと
- 理論的には同一のハッシュ値を持つ、異なる元データが存在するが、それを推定するのがとても困難であること。
- ハッシュ値が一致する場合は、元データも同じ(改ざんされていない)ことを保証する。(改ざん検知)
- H(x) = H(x')
ハッシュの用途†
- デジタル署名
- ハッシュ値を暗号化(署名)して添付することで、データが正しいことを保証する。
解読の難解化†
ソルト†
- パスワードからハッシュ値を求める際に、パスワードに付加する文字列のこと。
- パスワードにソルトを付加した上で算出したハッシュ値は、同じパスワードでも異なるハッシュ値になり、ハッシュ値からパスワードを特定することが困難になる。
- ソルトはある程度の長さ(最低20文字)がある方が有効
- ソルトはパスワードごとに異なる文字列を使う
- 元データにランダムな文字列(salt)を使って特定の変換(付加するなど)してからハッシュし、ハッシュ値とsaltの両方を保存する。
ペッパー†
- シークレットソルト
- パスワードからハッシュ値を求める際に、ソルトに加え付加する文字列のこと
- ハッシュ値、ソルトとは別の場所に保存する(HSMなど)
- ペッパーはパスワードごとに異なる文字列にする必要がない(ソルトと併用するのであれば共通の文字列でも耐性は弱くならない)
- ハッシュ値、ソルトと一緒に漏洩しないための対策として使われる
ストレッチング†
将来の難読化手法の変更に対する考慮†
- 現在の難読化手法が分かる情報を保存する。(ハッシュ値の先頭に付加するなど)
攻撃の手法†
- レインボーテーブル
- ハッシュ値から元データを特定する方法として、大量のハッシュしたハッシュ値のデータベースから同一のハッシュ値を探して、元データを特定する。
ハッシュのアルゴリズム†
低速のハッシュ関数†
ハッシュが使用されるケース†
関連サイト†
関連サイト†
関連用語†