ハッシュ
2023-11-25 (土) 18:05:09
ハッシュ とは †
- データに特定の演算処理を行って特徴値を抽出すること。
- 特定の演算処理を、「ハッシュ関数(一方向ハッシュ関数)」と呼ぶ。
- ハッシュ関数を使って抽出した特徴値を、「ハッシュ値」と呼ぶ。
ハッシュ値 †
- ダイジェスト値、メッセージダイジェスト
- 暗号化チェックサム
- 指紋(フィンガープリント) ※公開鍵のハッシュ値
ハッシュの特徴・性質 †
- 元データが同じであれば、同じハッシュ値になる。
- 元データが少しでも変わると、ハッシュ値が変わる。
- 元データの文字種が多いほど解読を困難にすることができる。
- ハッシュ値の長さは、元データの長さに関係なく同じ長さになる。
原像計算困難性 †
- 一方向性・不可逆性
- ハッシュ値から元データを特定することが困難であること。
- デジタル署名では、署名から元データが漏洩しないことを保証する。
第2原像計算困難性 †
- 元データとハッシュ値から同じハッシュ値を求めることができる他の値(元データ)を特定することが困難であること。
衝突困難性 †
- 異なる値から同じハッシュ値になりにくい性質のこと
- 理論的には同一のハッシュ値を持つ、異なる元データが存在するが、それを推定するのがとても困難であること。
- ハッシュ値が一致する場合は、元データも同じ(改ざんされていない)ことを保証する。(改ざん検知)
- H(x) = H(x')
ハッシュの用途 †
- デジタル署名
- ハッシュ値を暗号化(署名)して添付することで、データが正しいことを保証する。
解読の難解化 †
ソルト †
- パスワードからハッシュ値を求める際に、パスワードに付加する文字列のこと。
- パスワードにソフトを付加した上で算出したハッシュ値は、同じパスワードでも異なるハッシュ値になり、ハッシュ値からパスワードを特定することが困難になる。
- ソルトはある程度の長さ(最低20文字)がある方が有効
- 元データにランダムな文字列(salt)を使って特定の変換(付加するなど)してからハッシュし、ハッシュ値とsaltの両方を保存する。
ストレッチング †
- 複数回ハッシュを重ねる。
将来の難読化手法の変更に対する考慮 †
- 現在の難読化手法が分かる情報を保存する。(ハッシュ値の先頭に付加するなど)
攻撃の手法 †
- レインボーテーブル
- ハッシュ値から元データを特定する方法として、大量のハッシュしたハッシュ値のデータベースから同一のハッシュ値を探して、元データを特定する。
ハッシュのアルゴリズム †
低速のハッシュ関数 †
ハッシュが使用されるケース †
関連サイト †
- 当wikiのハッシュ機能
https://memo.mellowlife.org/?cmd=md5
- hashcat
https://hashcat.net/hashcat/
関連用語 †
- 暗号化
- 暗号学的ハッシュ関数
- 鍵保管方式
- コンシステント・ハッシュ法
- シャーディング
- 電子署名 -デジタル署名
- 認証
- 認証トークン
- 負荷分散
- Argon2
- FIPS 180
- Pass the Hash攻撃
- PGP -Pretty Good Privacy
- PBKDF