パスワード認証鍵交換(PAKE)
推測されやすいパスワードだけで、盗聴も改ざんもある回線に安全な共有鍵を張り、辞書攻撃は1接続1推測に封じ込める。SPAKE2 と OPAQUE の内部構造から、サーバー漏洩に耐える設計まで押さえられます。
- 1.PAKE はエフェメラルな DH 公開値をパスワード由来の値でマスクし、正しいパスワードを知る相手とだけ最終鍵が一致する。回線には検証可能な情報が漏れず、攻撃者は1接続あたり1候補しか試せない(オンライン推測に退化)。
- 2.SPAKE2 は公開点 M,N でマスクした2メッセージ対称 PAKE、OPAQUE は OPRF でパスワードをサーバー鍵込みの疑似ランダム値に変換する非対称(augmented)PAKE。前者は共有秘密、後者はサーバー漏洩耐性が主眼。
- 3.拡張 PAKE の目標はサーバー侵害後も事前計算辞書を無効化すること。OPRF 鍵がなければ検証値を1件も先に計算できず、SRP の「検証子流出=即オフライン辞書攻撃」の弱点を構造的に解消する。
なぜパスワードで鍵を張るのは難しいのか
TLS のように証明書や長期公開鍵があれば認証付き鍵交換は素直に組めます。難しいのは、両者が共有する秘密が人間のパスワードだけというケースです。パスワードはエントロピーが低く、候補の総数が現実的に総当たり可能な範囲(数十億〜数兆)に収まります。この性質が、素朴な設計をことごとく壊します。
決定的な脅威がオフライン辞書攻撃です。攻撃者が回線やサーバーから「パスワードを検証できる値」を一度でも入手すると、以後はネットワークに触れず手元で全候補を試せます。「パスワードのハッシュを送って照合する」式なら、流れたハッシュ1個で辞書全体を割れてしまう。PAKE(Password-Authenticated Key Exchange)の目的は、この検証可能な値を誰にも渡さないまま、相互認証つきの共有鍵を確立することです。
オンライン推測は「1接続で1候補を試し、当たり外れはサーバーに問い合わせないと分からない」攻撃で、レート制限やアカウントロックで実害を抑えられます。オフライン辞書攻撃は「検証材料を1つ入手すれば、以後は手元のGPUで毎秒数十億回試せる」攻撃で、低エントロピーのパスワードなら時間の問題で割れます。PAKE の設計目標は、攻撃者を前者にだけ押し込め、後者を成立させないことに尽きます。
PAKE の核心:DH 公開値をパスワードでマスクする
PAKE の共通原理は、Diffie-Hellman のエフェメラルな公開値を、パスワード由来の値でねじって(マスクして)交換することです。正しいパスワードを知る二者だけがマスクを正しく外せて同じ共有鍵に到達し、パスワードを知らない攻撃者はどの候補が正しいかを回線からは判定できません。
満たすべき性質は次の2点に集約されます。
- パスワードそのものも、その検証に使える値も回線に一切流さない。
- 攻撃者が観測・改ざん・注入しても、1回のプロトコル実行につき検証できるのは1候補だけ。
2点目が肝です。仮に攻撃者が偽の公開値を注入して中間者を試みても、パスワードを知らなければ相手と同じ鍵には到達できず、最後の鍵確認(key confirmation)タグの照合で必ず弾かれます。そして失敗から漏れる情報は「その1候補が違った」ことだけで、辞書全体を試す足がかりにはなりません。これが生の DH に欠けていた、鍵共有と相手認証の一体化です。
PAKE 共通の骨格:
1. 双方がエフェメラル DH 公開値を生成する(鍵共有の素材)
2. パスワード由来の値で公開値または導出鍵をマスク/束縛する
3. 共有鍵から鍵確認タグを計算して送り合う
4. タグ一致 ⇒ 相手も同じパスワードを知っていたと確定
タグ不一致 ⇒ 接続破棄。攻撃者が得る情報は「1推測ぶん」だけ
対称 PAKE と非対称 PAKE:何を守るかが違う
PAKE は「サーバーが何を保管するか」で2系統に分かれ、守れる脅威が異なります。
| 観点 | 対称 PAKE(balanced) | 非対称 PAKE(augmented / aPAKE) |
|---|---|---|
| 前提 | 双方が同じパスワードを保持 | クライアントはパスワード、サーバーは検証材料 |
| サーバー保管物 | パスワードそのもの(または等価物) | パスワード由来の検証材料(漏れても即転用不可を狙う) |
| 主眼 | 低エントロピー秘密からの安全な鍵共有 | サーバー侵害後の辞書攻撃耐性 |
| 代表例 | SPAKE2, CPace | OPAQUE(旧世代は SRP) |
| 用途 | IoTペアリング、対称な相互認証 | Webのログイン、クラウドの資格情報保管 |
対称 PAKE は両者が対等に同じパスワードを持つ状況(機器のペアリング、ピア間認証)に向きます。サーバーがパスワード等価物を持つため、サーバー侵害はパスワード漏洩に直結しますが、そもそも「サーバー」という非対称な信頼点を置かない用途では問題になりません。一方、Web ログインのようにサーバーへ資格情報を預けざるを得ない場合、サーバーが侵害されてもパスワードを奪われないことが要求され、これが非対称(augmented)PAKE の存在理由です。
SPAKE2:公開点でマスクする対称 PAKE
SPAKE2 は2メッセージで完結する代表的な対称 PAKE で、RFC 9382 として仕様化され、Kerberos のパスワード事前認証を強化する RFC 9588(SPAKE 事前認証)など各種プロトコルに採用されています。仕組みは「DH 公開値を、パスワードでスカラー倍した固定公開点でずらす」だけの簡潔さが特徴です。
前提として、群 G(楕円曲線群でよい)と、乱数的に選ばれ誰も離散対数を知らない2つの固定公開点 M, N を共有します。パスワード pw は整数 w = H(pw) に写します。
共有パラメータ: 群 G, 生成元 g, 公開点 M, N(離散対数不明)
パスワード: w = H(pw) (両者が同一 pw から同じ w を得る)
Alice: 乱数 x を選び X = g^x, T = X · M^w を送る
Bob: 乱数 y を選び Y = g^y, S = Y · N^w を送る
Alice が受信 S から復元: K = (S · N^(-w))^x = g^(xy)
Bob が受信 T から復元: K = (T · M^(-w))^y = g^(xy)
両者: 会話全体と K から鍵確認タグを導出し照合
送られる T, S は、生の DH 公開値 X, Y を M^w, N^w でマスクした値です。正しい w を知る相手だけが対応するマスク(N^(-w), M^(-w))を外して同じ g^(xy) に到達できます。攻撃者が候補 w' で復元を試みても、w' ≠ w なら得られる点は本来の共有鍵とは無関係にずれ、鍵確認タグが一致しません。しかも回線を見ただけでは w' が当たったか判定できない(T, S は一様分布に見える)ため、オフラインでの絞り込みができないのです。
SPAKE2 の安全性は、M,N の離散対数(M = g^m の m 等)を誰も知らないことに依存します。もし攻撃者が m を知っていれば、送信値からパスワード情報を代数的に剥がしてオフライン辞書攻撃に持ち込めます。そのため M,N はハッシュ・トゥ・カーブなど「作り方が公開され、逆算が困難」な nothing-up-my-sleeve な手続きで生成する必要があります。単なる乱数点を1者が生成して配るのは危険です。
非対称 PAKE の壁:SRP は何が足りなかったか
初期に広く実装された非対称 PAKE が SRP(Secure Remote Password) です。サーバーはパスワード平文の代わりに、パスワードから一方向に導いた検証子(verifier) を保管し、クライアントだけがパスワードを知ります。狙いは「サーバー侵害でもパスワードを直接奪われない」ことでした。
しかし SRP には本質的な弱点が2つありました。第一に、検証子は漏れるとオフライン辞書攻撃の入力にそのまま使えること。サーバーが侵害されると、攻撃者は候補パスワードから検証子を手元で再計算し、流出値との一致を探せます。第二に、独自の代数構造ゆえ厳密な安全性証明が難しく、標準的な楕円曲線への移行も素直ではありませんでした。求められるのは、より強い事前計算耐性――「侵害後でも、辞書攻撃を始めるには各ユーザーごとに高コストな計算をやり直すしかない」という性質です。
OPAQUE:OPRF でサーバー鍵に依存させる拡張 PAKE
OPAQUE は SRP の弱点を解消するために設計された現代的な augmented PAKE で、IRTF/CFRG により RFC 9807 として仕様化されています。中核は OPRF(Oblivious Pseudo-Random Function、忘却擬似ランダム関数) という部品です。OPRF は二者が協力して PRF(key, input) を計算しますが、サーバーはクライアントの入力 input を知れず、クライアントはサーバーの鍵 key を知れないという性質を持ちます。
登録時:
クライアント: パスワード pw を盲検化して送る(blind(pw))
サーバー : 自分の OPRF 鍵 k で評価して返す(クライアントの pw は見えない)
クライアント: 盲検を外し rwd = OPRF(k, pw) を得る
→ rwd で長期秘密鍵を含む封筒(envelope)を暗号化しサーバーへ保存
サーバー : envelope と OPRF 鍵 k だけ保管(pw も rwd も平文で持たない)
認証時:
同じ OPRF 交換で rwd を再導出 → 封筒を復号して長期鍵を取り出し
取り出した鍵で標準的な AKE(RFC 9807 は 3DH を主採用、HMQV は代替)を走らせて相互認証つき鍵を得る
決定的なのは、検証に使う rwd がパスワードとサーバーの OPRF 鍵の両方に依存する点です。ここから攻撃者は二重の壁に阻まれます。
- サーバーが侵害され封筒と OPRF 鍵が漏れても、
rwdを計算するには各パスワード候補ごとに OPRF 評価をやり直すしかなく、全ユーザー横断の事前計算辞書を作れない。 - OPRF 鍵を持たない外部の盗聴者は、封筒を見ても辞書攻撃の足がかりすら得られない。
SRP の検証子は「パスワードから作った公開可能な値」で、漏れれば即オフライン辞書攻撃の入力でした。OPAQUE の rwd はサーバー鍵に束縛されるため、侵害後でも攻撃者はサーバー鍵込みで候補を1件ずつ計算し直すしかなく、事前計算(プリコンピュテーション)攻撃が原理的に成立しません。加えて封筒の暗号化には rwd を直接鍵にせず Argon2 などのパスワードハッシュを併用し、辞書攻撃に持ち込まれても1候補あたりのコストを意図的に重くします。
安全性はどう定式化されるか
PAKE の「安全」は直感ではなく形式モデルで定義されます。古典的には BPR モデル(Bellare-Pointcheval-Rogaway)が基準で、攻撃者が全通信を支配する状況で、攻撃者の優位が q / |D| を無視できる量しか超えないことを要求します。ここで q はオンライン試行回数、|D| は辞書サイズです。つまり「試した回数ぶんしか成功確率が上がらない」――オフラインで辞書全体を試すショートカットが存在しないことを、証明として保証します。
より強いのが UC 安全性(Universal Composability)で、他プロトコルと合成しても安全性が崩れないことまで保証します。OPAQUE や CPace はこの UC 枠組みで安全性が論じられており、現実の TLS などに組み込んでも性質が保たれる根拠になっています。ここで確立した鍵はそのまま使わず、HKDF などの KDF で用途別に展開するのが通常の鍵共有と同じ作法です。
「PAKE は何を防ぐか」への模範解答は「パスワードも検証子も回線に流さず、オフライン辞書攻撃を成立させない(攻撃者を1接続1推測のオンライン攻撃に限定する)」。対称 PAKE(SPAKE2/CPace)と非対称 PAKE(OPAQUE)の違いは「サーバー侵害耐性の有無」。OPAQUE が SRP を超える点は「検証値がサーバー OPRF 鍵に依存し、事前計算辞書攻撃を防ぐ」。この3点セットを言えれば十分です。
まとめ
PAKE は、低エントロピーのパスワードだけで、盗聴も中間者もいる回線に相互認証つきの共有鍵を張る技術です。共通原理は「エフェメラル DH 公開値をパスワードでマスクし、正しいパスワードを知る者だけが同じ鍵に到達する」こと。回線には検証可能な情報が漏れないため、攻撃者は1接続1推測のオンライン攻撃に押し込められ、オフライン辞書攻撃が封じられます。
SPAKE2 は固定公開点 M,N でマスクする簡潔な対称 PAKE で、機器ペアリングなど対等な相互認証に向きます。OPAQUE は OPRF によってパスワードをサーバー鍵込みの疑似ランダム値に変換する非対称 PAKE で、SRP の「検証子流出=即オフライン辞書攻撃」という弱点を解消し、サーバー侵害後の事前計算辞書攻撃まで防ぎます。安全性は BPR や UC のモデルで q/|D| 以上の優位を攻撃者に与えないこととして証明されます。背景の鍵共有は Diffie-Hellman、辞書攻撃の実際はオフライン攻撃、認証全体の位置づけは認証と認可 と併せて押さえると、なぜパスワードから証明書並みの鍵が作れるのかが原理から腑に落ちます。
セキュリティ Article
パスワード認証鍵交換(PAKE)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
PAKE
比較で見る軸
難易度: advanced / カテゴリ: セキュリティ / タグ数: 6
導入後に効く点
SPAKE2 は公開点 M,N でマスクした2メッセージ対称 PAKE、OPAQUE は OPRF でパスワードをサーバー鍵込みの疑似ランダム値に変換する非対称(augmented)PAKE。前者は共有秘密、後者はサーバー漏洩耐性が主眼。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- セキュリティ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「PAKE / OPAQUE」に近いか確認する。
- 強みである「PAKE はエフェメラルな DH 公開値をパスワード由来の値でマスクし、正しいパスワードを知る相手とだけ最終鍵が一致する。回線には検証可能な情報が漏れず、攻撃者は1接続あたり1候補しか試せない(オンライン推測に退化)。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。