パスワード管理・ハッシュ化と多要素認証(MFA/FIDO2)完全攻略|ソルト・ストレッチング徹底解説
ユーザー認証はすべての情報システムの入り口であり、IPA試験では「パスワードの安全な保存(ソルト・ストレッチング)」「認証の3要素と多要素認証(MFA)」「FIDO2 / パスワードレス認証」が極めて高い頻度で出題されます。
データベース流出時のパスワードクラック手口から、最新のFIDO2/WebAuthn規格までを徹底解説します。
1. パスワードの安全な保存:ソルトとストレッチング
パスワードを平文(プレーンテキスト)で保存することは厳禁であり、単純な一方向ハッシュ化(SHA-256等)だけでも「レインボーテーブル攻撃(事前計算されたハッシュ対照表)」や「総当たり攻撃」により短時間で元のパスワードが特定されてしまいます。
技術要素 | 仕組みと動作 | 防御効果・出題ポイント |
|---|---|---|
ソルト (Salt) | ユーザー毎にランダムな文字列(32バイト等)を生成し、パスワードと連結してからハッシュ化する。 | 【レインボーテーブルの無力化】 同じパスワードであってもハッシュ値が全く異なる値になり、一括逆引き攻撃を防ぐ。 |
ストレッチング (Stretching) | ハッシュ化処理を数千回〜数十万回(またはメモリ高負荷関数)連続して繰り返す。 | 【総当たり攻撃の計算コスト増大】 GPU等による高速な総当たり試行を大幅に遅延させ、解読にかかる現実的時間・費用を引き上げる。 |
推奨アルゴリズム | Argon2(現在最強)、PBKDF2、bcrypt、scrypt などの専用パスワードハッシュ関数を使用する。 | 単なる高速ハッシュ関数(SHA-256など)はGPUで1秒間に何億回も計算できるため不適。 |
2. 認証の3要素と多要素認証(MFA)
認証の3要素のうち、異なる2つ以上の要素を組み合わせる認証方式を「多要素認証(MFA:Multi-Factor Authentication)」と呼びます(※同一要素の2段階認証はMFAではない点に注意)。
- ① 知識要素(Something you know): パスワード、PINコード、秘密の質問など。本人だけが知っている情報。
- ② 所持要素(Something you have): スマートフォンのワンタイムパスワード(TOTP)、ハードウェアトークン、SMS、ICカードなど。本人だけが持っているもの。
- ③ 生体要素(Something you are / inherit): 指紋、顔、虹彩、静脈パターンなど。本人の身体的・行動的特徴。
3. FIDO2 / WebAuthn とパスワードレス認証
FIDO2(WebAuthn + CTAP2)は、「パスワードをサーバに一切送信・保持しない」公開鍵暗号ベースの認証標準です。
- 端末側での本人確認: 利用者はPCやスマホの生体認証(Touch ID/Face ID)やセキュリティキーでローカル認証を解除。
- 秘密鍵による署名: 端末内の安全な領域(TPM/Secure Enclave)に保管された秘密鍵で、サーバから送られたチャレンジに署名。
- サーバ側での検証: サーバは事前に登録された公開鍵で署名を検証してログインを許可。サーバ側にパスワードが存在しないため、漏洩リスクがゼロになる。
4. 午後記述式試験(SC・AP)で使える得点キーワード・記述テンプレート
【定番記述フレーズ①(ソルトの目的)】 「同一パスワードでも異なるハッシュ値にし、レインボーテーブルによる解読を防ぐ。」(39字)
【定番記述フレーズ②(ストレッチングの目的)】 「ハッシュ計算の回数を増やし、総当たり攻撃にかかる試行時間を大幅に遅延させる。」(39字)
【定番記述フレーズ③(多要素認証の定義)】 「知識、所持、生体の3要素のうち、異なる2つ以上の要素を組み合わせて認証する。」(39字)
【定番記述フレーズ④(FIDO認証の安全性)】 「認証情報をサーバへ送信せず端末内で署名するため、フィッシングや通信傍受に耐性がある。」(43字)