#author("2024-07-13T19:35:47+09:00","default:k1rou","k1rou") #author("2024-07-18T09:50:34+09:00","default:k1rou","k1rou") *ハッシュ とは [#h15b0be1] -データに特定の演算処理を行って特徴値を抽出すること。 -特定の演算処理を、「ハッシュ関数(一方向ハッシュ関数)」と呼ぶ。 -ハッシュ関数を使って抽出した特徴値を、「ハッシュ値」と呼ぶ。 *ハッシュ値 [#ocb11e09] -ダイジェスト値、メッセージダイジェスト -暗号化チェックサム -指紋(フィンガープリント) ※公開鍵のハッシュ値 *ハッシュの特徴・性質 [#be49eee9] -元データが同じであれば、同じハッシュ値になる。 -元データが少しでも変わると、ハッシュ値が変わる。 -元データの文字種が多いほど解読を困難にすることができる。 -ハッシュ値の長さは、元データの長さに関係なく同じ長さになる。 **原像計算困難性 [#k29a6bad] -一方向性・不可逆性 -ハッシュ値から元データを特定することが困難であること。 -[[デジタル署名]]では、署名から元データが漏洩しないことを保証する。 **第2原像計算困難性 [#ffadce47] -元データとハッシュ値から同じハッシュ値を求めることができる他の値(元データ)を特定することが困難であること。 **衝突困難性 [#k77efa6e] -異なる値から同じハッシュ値になりにくい性質のこと -理論的には同一のハッシュ値を持つ、異なる元データが存在するが、それを推定するのがとても困難であること。 -ハッシュ値が一致する場合は、元データも同じ([[改ざん]]されていない)ことを保証する。([[改ざん]]検知) -H(x) = H(x') *ハッシュの用途 [#ga08c57a] -[[デジタル署名]] --ハッシュ値を暗号化(署名)して添付することで、データが正しいことを保証する。 -[[ワンタイムパスワード]]の生成 --[[チャレンジ・レスポンス認証]] -[[メッセージ認証コード]] --[[CMAC]] --[[HMAC]](鍵付きハッシュ関数) -[[パスワード]]の保存 --復号できる[[暗号化]]ではなく、復号が困難なハッシュで保存する。 --[[PBKDF]] -[[チェックサム]] --情報の[[改ざん]]検知。情報の保全性を検証するために使う。 *解読の難解化 [#g2f5d240] **ソルト [#f0bd7e31] -パスワードからハッシュ値を求める際に、パスワードに付加する文字列のこと。 -パスワードにソルトを付加した上で算出したハッシュ値は、同じパスワードでも異なるハッシュ値になり、ハッシュ値からパスワードを特定することが困難になる。 -ソルトはある程度の長さ(最低20文字)がある方が有効 -ソルトはパスワードごとに異なる文字列を使う -元データにランダムな文字列(salt)を使って特定の変換(付加するなど)してからハッシュし、ハッシュ値とsaltの両方を保存する。 **ペッパー [#nd5fb82e] -シークレットソルト -パスワードからハッシュ値を求める際に、ソルトに加え付加する文字列のこと -ハッシュ値、ソルトとは別の場所に保存する([[HSM]]など) -ペッパーはパスワードごとに異なる文字列にする必要がない(ソルトと併用するのであれば共通の文字列でも耐性は弱くならない) -ハッシュ値、ソルトと一緒に漏洩しないための対策として使われる **ストレッチング [#we8c9779] -複数回ハッシュを重ねる。 **将来の難読化手法の変更に対する考慮 [#j79d0cf7] -現在の難読化手法が分かる情報を保存する。(ハッシュ値の先頭に付加するなど) *攻撃の手法 [#h4ab3fba] -[[レインボーテーブル]] --ハッシュ値から元データを特定する方法として、大量のハッシュしたハッシュ値のデータベースから同一のハッシュ値を探して、元データを特定する。 -[[誕生日攻撃]] *ハッシュのアルゴリズム [#b90fe9b7] -MD4 -[[MD5]] -[[MD6]] -[[SHA]] --SHA-1 --SHA-2 --SHA-3 -[[RIPEMD-160]] -[[HAVAL]] **低速のハッシュ関数 [#ucac0d95] -[[BCrypt]] -[[SCrypt]] *ハッシュが使用されるケース [#ob7ed9a8] -[[SSL]] -[[パスワード]]の保存 -[[チェックサム]] *関連サイト [#zdda5111] -当wikiのハッシュ機能~ https://memo.mellowlife.org/?cmd=md5 -hashcat~ https://hashcat.net/hashcat/ *関連サイト [#m6923074] -何故パスワードをハッシュ化して保存するだけでは駄目なのか?(2023.8.18) - NRI Netcom https://tech.nri-net.com/entry/hashing_password -Modular Crypt Format - Passlib~ https://passlib.readthedocs.io/en/stable/modular_crypt_format.html -MD5Hashing.net~ https://md5hashing.net/ *関連用語 [#je1e868c] -[[暗号化]] -[[暗号学的ハッシュ関数]] -[[鍵保管方式]] -[[コンシステント・ハッシュ法]] -[[シャーディング]] -[[電子署名]] -デジタル署名 -[[認証]] -[[認証トークン]] -[[負荷分散]] -[[Argon2]] -[[FIPS]] 180 -[[Pass the Hash攻撃]] -[[PGP]] -Pretty Good Privacy -[[PBKDF]]