暗号技術・PKI・認証基盤 重要度:★★★出題: AM2・PM1
HMAC と パスワードハッシュ (ソルト・ストレッチング)
えいちまっく / そると・すとれっちんぐ / Hash-based Message Authentication Code / Salted Password Hashing
ハッシュ関数と共通秘密鍵を組み合わせた改ざん検知符号(HMAC)と、DB漏洩時のレインボーテーブル解読を防ぐパスワード保護技法。
3行速習ポイント
- HMAC:単なるハッシュ値と異なり、送受信者間で共有した秘密鍵を混ぜてSHA-256等を計算するため、通信途中のハッシュ値差し替えを防止
- ソルト(Salt):利用者ごとに異なるランダム文字列を付与してハッシュ化し、同一パスワードの一括解読やレインボーテーブル攻撃を無効化
- ストレッチング(PBKDF2 / bcrypt / Argon2):ハッシュ計算を数千〜数万回反復し、GPU等による総当たり(ブルートフォース)速度を大幅に遅延させる
図解
図HMACメッセージ認証 と パスワードハッシュ保護(ソルト+ストレッチング)
通信・API保護
HMAC(鍵付きハッシュ認証符号)
共有秘密鍵+SHA-256による通信改ざん・なりすまし検知
単なるハッシュ値と異なり送受信者間で共有した秘密鍵を混入して演算するため、攻撃者によるメッセージとハッシュ値の同時差し替えや伸長攻撃を防止
事前計算対策
ソルト (Salt:利用者別ランダム値)
レインボーテーブル(事前計算表)攻撃の完全無効化
利用者ごとに異なるランダム文字列をパスワードに結合してハッシュ化し、同じパスワードを設定した複数ユーザの一括解読を阻止
総当たり遅延
ストレッチング (PBKDF2 / bcrypt / Argon2)
ハッシュ演算の数万回反復による総当たり攻撃の遅延化
あえて計算コスト(CPU時間・メモリ)を高くすることで、DB漏洩時にGPUクラスタ等を用いた高速ブルートフォース解読を困難化
💡 HMACは共通鍵を共有するため第三者への「否認防止」はできない。パスワード保存では「利用者別ランダムソルト+ストレッチング」が鉄則
概要と本質
ハッシュ関数(SHA-256等)は一方向性を持つものの、入力が同じなら常に出力も同じになり、かつ高速に計算できるよう設計されています。そのためパスワード保管に単なるSHA-256を使うと事前計算テーブル(レインボーテーブル)や高速総当たりで即座に平文が割られます。ソルト+ストレッチング(またはArgon2/bcrypt)の適用が必須です。
重要ポイント・コア概念
- HMACの安全性:Length Extension Attack(伸長攻撃)への耐性を持ち、API署名やJWT(HS256)、TLSレコード認証で広く利用
- ペッパー(Pepper):DBに保存するソルトとは別に、APサーバ内のHSMや環境変数に秘匿した秘密鍵を混ぜる手法(HMAC方式)
- ディジタル署名との違い:HMACは送受信者が同じ秘密鍵を共有するため、第三者に対する「否認防止」は実現できない
午後記述・情報セキュリティ対策での攻略ポイント
午後問題では「DBからパスワードハッシュ一覧が漏洩した際の解読防止策(利用者ごとに異なるソルトを付与しストレッチングを行う)」や「APIリクエストの改ざん検知としてのHMAC署名」が定番の記述問題です。
午後記述で使える加点キーワード(クリックでコピー)
関連する重要用語
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着情報処理安全確保支援士 過去問演習で実践力を鍛える