【実務・中級編】 Wi-FiにおけるWPA3-PersonalのSAE(Simultaneous Authentication of Equals)ハンドシェイクの仕組み – 家庭用ネットワーク・IoT・モバイル通信実践ガイド

Wi-Fiの要塞を解き明かす:WPA3の「SAEハンドシェイク」がオフライン辞書攻撃を完全無効化する理由

こんにちは。現場で数々の無線パケットや不可解なローミング不良と格闘してきたシニアネットワークエンジニアです。

昨今のスマートホームやオフィス環境において、Wi-Fiはもはや「繋がれば何でもいいインフラ」ではありません。高速化するWi-Fi 7の波が押し寄せる一方で、私たちが毎日何気なく接続している無線空間は、常に空気を伝う電波を通じた盗聴の脅威に晒されています。

特に、Web API設計やインフラ運用に携わるエンジニアの皆さんなら、「暗号化されているから安心」という言葉の裏にある脆弱性を痛感しているはずです。かつてのWPA2-Personal(PSK)が抱えていた、あの致命的な弱点——「空中に飛び交う4ウェイハンドシェイクのパケットを盗み聞きされれば、手元のGPUクラスターでオフライン辞書攻撃を仕掛けられてパスワードを丸裸にされる」という悪夢を覚えているでしょうか。

その悪夢に終止符を打ったのが、WPA3で導入されたSAE(Simultaneous Authentication of Equals)ハンドシェイクと、その根幹を支えるドラゴンフライ(Dragonfly)プロトコルです。

今回は、教科書の仕様書を斜め読みしただけでは見えてこない、SAEハンドシェイクの暗号学的処理の裏側と、実際のネットワーク設計やパケット解析の現場で役立つ実践的な知見を、徹底的に紐解いていきましょう。

—

1. なぜWPA2のPSKは破られたのか?(背景にある脅威)

WPA3の凄さを語るには、まず先代であるWPA2の「原罪」を知る必要があります。

WPA2-Personalでは、ルーター(AP)とクライアント(STA)が接続する際にお馴染みの4ウェイハンドシェイク(4-Way Handshake)が行われます。この仕組みの最大の弱点は、認証のベースとなるマスターキー(PMK)が、人間が覚えられる程度の短い「事前共有鍵(パスワード)」から直接(あるいは単純なPBKDF2で)生成されていた点にありました。

攻撃者は、正当なユーザーがAPに接続する瞬間、あるいは自分が一度切断させられて再接続する瞬間の4ウェイハンドシェイクのパケットを、エアモニタ(モニターモード)で受動的にキャプチャ(盗聴)します。
一度パケットさえ手に入れてしまえば、あとはオフラインの安全な環境で、世の中に存在するありとあらゆるパスワードの候補(辞書)をハッシュ関数に突っ込み、キャプチャしたハンドシェイクのデータと一致するまで総当たり(辞書攻撃)を仕掛けることができました。APと通信する必要すらないため、何度トライしても検知されることはありません。これが、従来のWi-Fiにおける最大のセキュリティホールでした。

—

2. SAEハンドシェイクの基本思想とドラゴンフライプロトコル

このオフライン辞書攻撃の牙城を完全に崩したのが、WPA3-PersonalのSAEです。

SAEの最大の特徴は、「どれだけ総当たりを試みても、1回の推測につき1回、必ずAPとのリアルタイムな通信(対話)を強制される仕組み」にあります。これを暗号学的には「パスワードベースの認証キー交換(PAKE: Password-Authenticated Key Exchange)」と呼び、その中核アルゴリズムとしてIEEE 802.11ではドラゴンフライ(Dragonfly)プロトコルが採用されました。

SAEの3大メリット

1. フォワードセーシー(前方秘匿性)の確保: 万が一、長年使ったWi-Fiパスワードが破られたとしても、過去にキャプチャされた通信ログを後から復号することはできません。
2. オフライン辞書攻撃の無効化: パスワードの推測にはAPとのインタラクティブな通信が必要であり、総当たりには膨大な時間とリアルタイムの電波リソースが消費されるため、事実上攻撃が成立しません。
3. 脆弱なパスワードへの耐性: ユーザーが少し短いパスワードを設定していたとしても、WPA2に比べて圧倒的に高い耐性を発揮します。

—

3. SAEハンドシェイクの暗号学的処理と通信フロー

では、パケットの世界で実際に何が起きているのか、その通信フローと内部の数学的処理を追ってみましょう。

SAEハンドシェイクは、シンプルに言うと「お互いに秘密の数値を持ち寄り、共通の楕円曲線(または有限体)上でパズルを解き合うことで、共通のセッションキーを安全に共有するプロセス」です。

全体シーケンス

[クライアント (STA)]                           [アクセスポイント (AP)]
        |                                                 |
        |--- 1. SAE Commit (私の候補値はこれです) ------->|
        |<-- 2. SAE Confirm (お互いの鍵を確認します) -----|
        |<-- 3. SAE Commit (私の候補値はこれです) -------|
        |--- 4. SAE Confirm (お互いの鍵を確認します) ------>|
        |                                                 |
        v                                                 v
  (鍵の導出・暗号化通信の確立)

ステップごとの詳細な処理

① パスワードから楕円曲線上の点へのマッピング(ハッシュ・オア・トランス(Hash-to-Curve))

ユーザーが入力したプレーンテキストのパスワードと、APおよびクライアントのMACアドレスを組み合わせ、楕円曲線(通常はsecp256r1などの安全な曲線)上の有効な「点(Point)」に変換します。これがドラゴンフライの最もユニークな部分であり、辞書攻撃を防ぐ防壁となります。

② SAE Commit メッセージの交換

クライアントとAPは、それぞれランダムな値(マスク値)を生成し、①で得られた点と組み合わせてSAE Commitメッセージを相手に送信します。
このメッセージには、自分がパスワードを知っていることの証明(ゼロ知識証明の変種)が含まれていますが、パスワードそのものは一切露出しません。

③ 秘密値(Shared Secret)の導出

双方がCommitメッセージを受信すると、お互いの送信値と自分のランダム値を掛け合わせることで、共通のSecret(秘密値)を算出します。この時点で、双方が「正しいパスワードを知っている」ことが数学的に証明されます。

④ SAE Confirm メッセージによる検証

導出した鍵が両者間で完全に一致していることを確認するため、SAE Confirmメッセージを交換します。これが無事に検証されると、4ウェイハンドシェイクへと移行し、実際の暗号化通信キーが確立されます。

—

4. 現場のインフラエンジニア向け:設定とデバッグの勘所

実際のネットワーク構築や、ホテル・カフェ・オフィスなどのエンタープライズライクな家庭用ルーター設定において、WPA3-Personalを導入する際の注意点を実務目線で整理します。

無線親機(AP)側の設定例(hostapd.confのイメージ)

もしLinuxベースの自作APやオープンソースの無線ルーターファームウェア(OpenWrt等)でWPA3を構成する場合、設定ファイルは以下のようになります。

# /etc/hostapd/hostapd.conf
interface=wlan0
ssid=MySecureHome_Wi-Fi7
hw_mode=g
channel=6

# 認証モードの指定:WPA2とWPA3の混在(トランジションモード)
# 既存の古いIoTデバイス(WPA3非対応)を救うため、最初は移行期間として混在モードを推奨します
ieee80211w=2          # 管理フレームの保護(MFP)を必須(Required)または有効に設定
wpa=2
wpa_key_mgmt=WPA-PSK SAE
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_passphrase=Supercalifragilisticexpialidocious_2024

> 実務Tips:
> 現場で最も多いトラブルが、「古いスマート家電や見守りカメラがWi-Fiに繋がらなくなった」というクレームです。これらは大抵WPA3のSAEハンドシェイクに対応していません。そのため、初期導入時は必ずwpa_key_mgmt=WPA-PSK SAEのようにWPA2(PSK)とWPA3(SAE)を併用するトランジションモード(Transition Mode)で稼働させ、対応デバイスが揃った段階でWPA3オンリーに切り替えるのが定石です。

—

5. パケット解析でSAEの挙動を覗き見する(Wireshark活用術)

ネットワークエンジニアの醍醐味といえば、空中に飛び交うパケットのキャプチャです。Wi-Fiのモニターモードを有効にし、WiresharkでSAEハンドシェイクの瞬間を捉えると、WPA2時代とは全く異なるパケット構造を確認できます。

Wiresharkでのフィルタリング式

無線インターフェース(例:wlan0mon)でキャプチャを行っている際、特定のクライアントとAP間のSAEパケットだけを抽出するには、以下のフィルタリング構文が便利です。

# 802.11の認証フレーム(Management Frame -> Authentication)かつSAE関連のパケットを抽出
wlan.fc.type_subtype == 0x000b

Wiresharkのパケット詳細ペインを開くと、従来の単純なShared Key Authenticationではなく、Authentication Algorithm: SAE (3) と表示され、その中に Scalar や Element と呼ばれるドラゴンフライプロトコル特有のパラメータが格納されているのが確認できます。もしデバッグ中に Authentication Transaction Seq が正しくインクリメントされていなければ、パスワードの不一致や、AP側がSAEをサポートしていない(または設定ミスマッチ)ことが一目で分かります。

—

まとめ:セキュアな無線空間の構築に向けて

今回は、WPA3-Personalの核心であるSAEハンドシェイクの仕組みと、ドラゴンフライプロトコルがもたらす強固なセキュリティの裏側を解説しました。

日々のインフラ運用において、新しい規格の名前や「セキュリティが強くなった」という宣伝文句を鵜呑みにするのではなく、「パケットレベルでどのような数学的・論理的やり取りが行われているか」を把握しておくことこそが、トラブルシューティングの引き出しを増やし、真に堅牢なネットワーク設計を行うための最大の武器になります。

皆さんもぜひ、手元の環境でパケットをキャプチャし、現代の暗号技術が織りなす美しいハンドシェイクの挙動をご自身の目で確かめてみてください。次回の無線ネットワーク解説もお楽しみに!

コメント

タイトルとURLをコピーしました