Wireless・のおと

WPA3のはなし

ブログ
技術解説 セキュリティ

しばらくWi-Fi以外の無線の話が続いていたので、久しぶりにWi-Fiに話を戻してみます。今回のお題は2018年に制定された比較的新しいセキュリティ仕様、WPA3です。いきなりWPA3に入る前に、WEPからWPA2に至るまでのおさらいからはじめてみます。

はじめに

無印のIEEE802.11無線LAN規格が制定されたのは1997年のことで、セキュリティ仕様は皆無でした。当時は無線LANじたいが目新しく、また通信方式も2.4GHz帯での周波数拡散方式(DSSSとFHの2通りがありました)を行うため盗聴には(当時としては)特殊な装置が必要で、通信方式じたいが一定のセキュリティを実現すると考えられていたようです。

1999年に11Mbpsに高速化したIEEE802.11b規格が作られたとき、WEPセキュリティ機能が追加されました。WEPは「有線同等の安全性(Wired Equivalent Privacy)」の意味でしたが、その設計にはセキュリティの専門家が関わっていなかったらしく色々と穴があり、仕様発表直後から安全性についての疑問が投げかけられることになりました。

 

2001年には次期セキュリティ規格IEEE802.11iの制定が始まりますが、最終仕様確定まで時間がかかることを憂慮したWi-Fi Allianceは、ドラフト仕様をベースにした暫定標準WPAを2003年に制定しました。WPAとはWi-Fi Protected Accessの略です。
しかしIEEE802.11iの作業は意外にスムーズに進み、翌年にはIEEE802.11i-2004として制定されます。Wi-Fi Allianceはこれを「WPA2」の名で採用し(※註1)、しばらくWPA/WPA2併存の時代が続きました。

(※註1) 「WPA(WPA2, WPA3)」はあくまでWi-Fi Allianceでの呼称です。IEEE802.11仕様書中ではRSN(Robust Security Network)と呼ばれており、「WPA」という用語は一箇所も使われていません。

 

WPA/WPA2の混在時代はかなり長く続き、WPA3仕様が正式に公開されたのはIEEE802.11iから14年後の2018年のことになります。WPA3はWi-Fi AllianceとIEEE802.11の共通仕様ですが、IEEE802.11iのアップデートではなくIEEE802.11-2020仕様の中に取り込まれています。

通信セキュリティは概ね「認証」「鍵交換」「暗号化」の3段階に分けることができます。この視点からWEP/WPA/WPA2のセキュリティ機構を復習したうえで、WPA3-SAEについて解説してゆきます。

Wi-Fi接続手順の基本

まず、Wi-Fi接続手順の基本(セキュリティ無しのオープンネットワーク)を示します。子機(ステーション、STA)はProbe Requestを発信してアクセスポイント(AP)を検索し、APはSSIDとセキュリティ情報などの一覧をProbe Responseで返します。STAはその中から条件に合ったAPを選択しAuthentication Requestを送信、APはAuthentication Responseを返します。STAはAssociation Requestを送信して接続を要求、APがAssociation Responseを返すと接続が完了します。

(図) Open認証の接続手順

(図) WEP Shared Key認証の接続手順

このChallenge-Response認証は中間介在攻撃に対して無力であり、また認証鍵=暗号鍵でもあったので盗聴者に対して鍵解読のてがかりを与えることになるため(※註2)、使用制定直後から「無いよりマシどころか、無いほうがマシ」と批判されました。なのでWEP時代すでに「Shared Key認証は使わない、使ってはいけない機能」とされ、Authentication手順は有名無実なものになりました。

(※註2) 攻撃者が偽のAPを立ててSTAを接続させることに成功すれば、攻撃者は任意のChallengeに呼応して秘密鍵で暗号化したResponseを得ることができ、いわゆる選択平文攻撃が可能になってしまいます。

WPA/WPA2の概略

WPAはIEEE802.11iドラフト仕様をベースにしたWi-Fi Allianceによる暫定標準、WPA2はIEEE802.11i正式標準仕様に与えられた名称で、WPAとWPA2の機能はほとんど同じです。ただし仕様上、WPAでは暗号アルゴリズムとしてTKIPがデフォルト・CCMPがオプションなのに対し、WPA2ではCCMPがデフォルトでTKIPがオプションになっている扱いの違いなどがあります。

WPAとWPA2の機能はほとんど同じですが、プロトコルは別枠なので直接互換性はありません。そのかわりAP,STAともWPA/WPA2の共存ネットワークに対応することができます。セキュリティ情報はビーコン中の拡張エレメント(IE)に実装されますが、WPAはベンダ拡張IE(Tag=221)のOUI=00:50:f2(マイクロソフト) Type=1に実装され、WPA2はRSN IE(Tag=48)に実装されます。IEのヘッダ形式は違いますが、格納される情報は殆ど同じです。(※註3) 

(※註3) 暗号アルゴリズムや鍵交換アルゴリズムの識別子はWPA IEが00:50:f2:XXを使うのに対し、RSN IEは00:0f:ac:XXを使います。この上位三桁はMACアドレスのベンダコードと同じです。

(図) WPA-PSK:TKIPを設定したAPのビーコン

(図) WPA-PSK:TKIPを設定したAPのビーコン(拡大表示)

(図) WPA2-PSK:CCMPを設定したAPのビーコン

(図) WPA2-PSK:CCMPを設定したAPのビーコン(拡大表示)

暗号アルゴリズムは、AP-特定STA間の「ペアワイズ」と、AP-全STA間の「グループ」が別に指定できます。AP側はペアワイズにTKIPとCCMPを併記することができ、STA側もまた「TKIPまたはCCMP、どちらかAPがサポートしている方を使う」と設定することができます。あるいはAP, STAとも「TKIPのみ」「CCMPのみ」の設定もできます(※註4)。

一方、グループ暗号は1対多通信という性質上1種類のみに限られ、通常は「ペアワイズ暗号がCCMPのみであればCCMP、TKIPを使う可能性がある場合はTKIP」を使います。hostapdの場合はgroup_cipher=を明示することにより、強制的に不自然な設定(pairwise=ccmp, group_cipher=tkip)を指定することも可能ではあります。

(※註4) この組み合わせはWPAとWPA2で別々に設定できるので、WPA/WPA2の混在設定と合わせた有意組合わせは全15通り(グループ鍵=TKIPも含めれば18通り)にもなり、無線設定が無駄に複雑化する一因になりました。

(図) WPA-PSK:TKIP+CCMP, WPA2-PSK:TKIP+CCMPを設定したAPのビーコン

(図) WPA-PSK:TKIP+CCMP, WPA2-PSK:TKIP+CCMPを設定したAPのビーコン(拡大表示)

PSKモード

WEPに代わるコンシューマ用セキュリティ仕様として制定されたのがPSK(Pre Shared Key)モードでした。WEPが設定された鍵をそのまま暗号鍵に使っていたのに対し、PSK(WPA/WPA2とも共通)では設定された共有鍵に疑似乱数情報2つ(APで生成したANonceとSTAで生成したSNonce)を合わせてハッシュにかけ、全てのAP-STA間で異なるペアワイズ一時鍵(PTK:Pairwise Transient Keys)を使います。PTKは384bit幅で、そこから128bitごとに鍵検証鍵(Key Confirmation Key:KCK)、鍵暗号鍵(Key Encryption Key:KEK)、通信暗号鍵(Temporal Key:TK)が切り出されます。ANonce, SNonceの交換はAssociation手続き後の「4-Way Key Handshake」手順で交換され、接続ごとに毎回異なる疑似乱数が交換されるので、同じSTA-AP間でも切断・再接続ごとにPTK暗号鍵は違うものが使われます。

問題は、共有鍵をどうやって設定するかでした。PSKでは256bit幅のPMK(Pairwise Master Key)がAP-STA間で共有されていることを前提としており、これをバイナリ値で設定すると16進32桁になります。PSK="1f8c243cd987225efe79cd4738fa6f0c"のようなもので、これを正確に覚えて打ち込むのは面倒だし間違う可能性も多くて使い勝手は良くありません。

そこで、もっと扱いやすい文字列の「パスフレーズ」からハッシュ関数でPMKを生成する手順が定められました。APのSSIDをパスフレーズと合わせて、PBKDF2と呼ばれるハッシュ関数(※註5)を4096回ループしてPSKを生成します。Linux上ではwpa_passphraseというプログラムとして実装されています(※註6)。
​​​​​​​
(※註5) 詳しくはIEEE802.11-202 Appendix J4およびRFC2898 5.2を参照してください。

(※註6) PSK/パスフレーズのどちらが・あるいはどちらも設定できるのか、その切り換えはどうやって設定するのか製品によってまちまちで、これもまたWPA/WPA2時代の設定が複雑化する一因になりました。例えばwpa_supplicant.confではpsk=を""で囲えばパスフレーズ・囲わずに16進を並べればPSKになりますが、hostapd.confではwpa_pskとwpa_passphraseが別項目になっていて""は使いません。

(図) PSKとパスフレーズ、そしてPTK/KCK/KEK/TKの関係

(図) PSKとパスフレーズ、そしてPTK/KCK/KEK/TKの関係

4-Way Key Handshake

4-Way Key Handshakeは厳密には「鍵交換手順」ではなく「鍵の初期化手順」と呼ぶべきものです。秘密鍵(PMK)じたいは何らかの方法(※註7)で先に交換されていることが前提で、互いに共有している秘密鍵の一致検証と、そこから派生させる暗号鍵の共有が目的です。

(※註7) WPA-PSKの場合、何らかの方法=事前設定になります。Enterpriseモードでは4-Way Handshakeより先に行われるEAPoL手順で、後述するWPA3-SAEではAuthentication手順で認証と鍵交換が終わっているはずです。

(図) PSKの4-Way Key Handshake手順

(図) PSKの4-Way Key Handshake手順

Association Request / Association Responseの交換後、APは256bitの擬似乱数ANonceを作成し、これをMessage 1としてSTAに送ります。


Message 1を受信したSTAは256bitの擬似乱数SNonceを作成してAPに返し、PMK(=PSK)・APのMACアドレス・STAのMACアドレス・ANonce・SNonceをハッシュ関数に入れてPTKを算出します。PTKのサイズは384bitで、ここから128bitの鍵認証鍵(KCK), 鍵暗号鍵(KEK), 通信暗号鍵(TK)が切り出されます。STAはKCKを使って検証子(MIC)を付与したMessage 2をAPに送ります。


Message 2を受信したAPは同じ手順でPMKを算出し、KCK・KEK・TKを切り出し、MICを検証します。MICが一致しなければ不正なメッセージとして廃棄しますが、STAに対するエラー通知は行わない("silently discards")と明記されています。Message 2が受理された場合、APは現時点でのグループ鍵(GTK)を含めたMessage 3を作成し、KCKを使ってMICを付与し、KEKを使って暗号化してSTAに返送します。


Message 3を受信したSTAはKEKを使って復号し、KCKを使ってMICを検証します。MIC不一致の場合はやはりメッセージを破棄します。Message 3が受理された場合、STAはMessage 4を作成してAPに返送し、次からのパケット送受信をTKで暗号化すべく初期化処理を行います。
 

Message 4を受信したAPはKCKを使ってMICを検証し、MIC不一致の場合はメッセージを破棄します。Message 4が受理された場合、APは次からのパケット送受信をTKで暗号化すべく初期化処理を行います。

wifi-4way-handshake.jpg

(図) 4-Way Key Handshakeによる鍵初期化と認証手順

4-Way Key Handshakeはシンプルですが強力な方法で、盗聴だけで暗号鍵PTKや共有鍵PMKを算出することは難しく、通信を中継して任意の変形を施す中間介在攻撃でもPTK/PMKを解読する有効な方法は見つかっていません。2017年に騒がれたKRACK攻撃は中間介在攻撃の一種で、Message 3の伝達を意図的に遅らせてリトライをかけさせることでSTAの暗号初期化処理を2回実行させ、その差分情報をもって暗号鍵解読の手がかりとするものでしたが、WEPのようにマスター鍵まで遡って解読できるわけではありませんでした。

 

PSKには「認証」という明確な手続きが無く、Authentication手順は常に「Open」で使われます。AP・STA間でPSKが異なるとMICが不一致となり、4-Way Key HandshakeがMessage 2で止まることをもって「認証の代わり」としています。

PSK方式の問題

しかしコンピュータの処理能力が高くなるにつれ、PSKパスフレーズ方式の安全性が危ぶまれるようになりました。PSKじたいには256bitのエントロピー(約10^77通りの組み合わせ)があるとしても、それを生成する元ネタのパスフレーズの組み合わせはもっと少ないです。例えば8文字の文字列であれば、a-z, A-Z, 0-9の全組み合わせは(26+26+10)^8=10^14.3程度しかありません。これは現在のコンピュータで、インターネットクラウドなどを活用した並列処理を行えば総当り攻撃で解読できる範囲です。しかもパスワードが既知文字列の場合、候補を絞り込むことで更に解読時間が短くなる可能性があります(俗に言う「辞書攻撃(Dictionary Attack)」)
256bitバイナリのPSKならば辞書攻撃への耐性もありますが、パスフレーズはPSKの設定方式として既に広く普及しており、いまさら「パスフレーズは使わず16進32桁のPSKを設定して使いましょう」を推奨しても実行は困難です。スマートフォンやIOT機器にはバイナリPSK設定に対応していない実装も多いでしょう。

現実にはまだWEPのように崩壊したわけではありませんが、それでも次期無線セキュリティ標準にはPSK方式≒パスフレーズの持つ潜在的な問題に対処することが求められ、それはWPA3-SAEとして2018年に制定されました。SAEとはSimultaneous Authentication of Equalsの略で、「マスター/スレーブ」あるいは「イニシエーター/レスポンダー」のような関係がなく、AP・STAが対等・対称の立場で鍵交換・認証を行うことを意味します。そのベースは楕円曲線Diffie-Hellman鍵交換(ECDH)アルゴリズムによっています(※註8)。

(※註8) 厳密に言えばSAE仕様にはModPグループのDH鍵交換(FFC)も含まれていますが、IEEE802.11-2020仕様ではSTA, APともECC-P256(ID=19)の実装が必須とされている(12.4.4.1 / 12.10.2)ので、「SAEでは(原則として)ECDH鍵交換を使う」と言ってしまっても構わないと思います。

Diffie-Hellman鍵交換

楕円曲線に入る前に、Diffie-Hellman(DH)鍵交換について復習しておきましょう。DH法では通信ノード間(Alice=A,Bob=Bとします)間で素数P原始元Gを共有し、互いに秘密情報(Xa, Xbとします)を乱数生成し、これを

A: Ya = (G^Xa) mod P
B: Yb = (G^Xb) mod P

として算出したYa, Ybを交換します。互いに受信した情報を使って

A: Ka = (Yb^Xa) mod P
B: Kb = (Ya^Xb) mod P

を算出すると、Xa/Xbの値を知らなくても共有鍵Kの値は同じになります。何故なら

K = G^(XaXb) mod P = (Ya^Xb) mod P = (Yb^Xa) mod P

が成立するからです。
 

仮にP=11, G=2, Xa=3, Xb=6として検算してみましょう。

Ya=(2^3) mod 11 = 8
Yb=(2^6) mod 11 = 9
Ka=(9^3) mod 11 = 3
Kb=(8^6) mod 11 = 3
K=2^(3*6) mod 11 = 3

で、確かに同じ値になりました。

(図) Diffie-Hellman鍵交換

(図) Diffie-Hellman鍵交換

盗聴者は通信回線から得られたG=2,P=11,Ya=8,Yb=9を用いて

2^Xa mod 11 = 8
2^Xb mod 11 = 9

となるXa, Xbを逆算すれば

K=2^(XaXb) mod 11

からKが求められる理屈になりますが、剰余(mod)の入った計算の逆算は容易ではありません(離散対数問題)。この例では小さな値を使っていますが、実際のDH鍵交換のP, Xa, Xbには1024bit以上の整数が使われるので、逆算には膨大な計算量が必要になります。これが離散対数問題の非対称性を用いたDiffie-Hellman公開鍵交換方式の原理です。
 

しかし「素の」DH法は盗聴に対する耐性があるだけで、中間介在攻撃への耐性はありません。仮に通信中継者Charlie=Cが通信内容を任意に書き換えることができるとしましょう。Cは偽の秘密情報Xa', Xb'を作り、そこから算出したYa', Yb'で通信内容を置き換えます。例えば

C: Xa'=7, Ya'=(2^7) mod 11 = 7
C: Xb'=4  Yb'=(2^4) mod 11 = 5

として、A->BのYaをYa'に、B->AのYbをYb'に置き換えます。すると

A: K'a = (Yb'^Xa) mod P = (5^3) mod 11 = 4
B: K'b = (Ya'^Xb) mod P = (7^6) mod 11 = 4

C: K'c = (Ya^Xb') mod P = (8^4) mod 11 = 4
または
C: K'c = (Yb^Xa') mod P = (9^7) mod 11 = 4

となり、本来K=3になるはずの共有鍵が偽情報によってK'=4になってしまい、これは中継者Cにも共有されるので筒抜けになります。

(図) Diffie-Hellman鍵交換への中間介在攻撃

(図) Diffie-Hellman鍵交換への中間介在攻撃

なのでDHだけによる鍵交換は一般的には不完全で、結局何らかの秘密情報を共有しておき、交換されたYa, Ybの正当性を秘密情報に基づいて検証することが行われます。この「何らかの」に幾つかの方法があってDHのバリエーションになっていますが、詳細は割愛します。一方、認証を伴わない「素の」DH交換は匿名DH(Anonymous DH)と呼ばれます。

楕円曲線暗号

楕円曲線暗号(Elliptic Curve Cryptography:ECC)とは紛らわしい用語です。この文脈における「楕円曲線」はr=ax^2+by^2で表現される普通の楕円ではなく、y^2=x^3+ax+bという方程式(ヴァイエルシュトラス方程式)を指します。そしてこの方程式じたいが暗号性を提供するものではなく、キモとなるのはこの方程式で定義される数空間(体, Field)上における群演算の非可逆性であり、その演算とはDiffie-Hellman法と同じ離散対数です。なので「楕円曲線暗号」というより「楕円曲線Diffie-Hellman (Elliptic Curve Diffie-Hellman, ECDH)」と呼ぶほうがより正確です。

(図) 楕円曲線の例

(図) 楕円曲線の例

「有限体上での群演算」という概念は私もたぶん正しく理解していないし、見様見真似で解説するだけでもかなりの量になるので割愛します。重要なことは次の2点です。


・楕円曲線暗号=ECCそれ自身は暗号ではなく、鍵共有方式であること(※註9)
・DHよりも更に逆算が困難なので、より短いビット数で同等のセキュリティを実現できること(※註10)
 

(※註9) Diffie-Hellmanは「盗聴者に推定困難な秘密情報を共有することができるプロトコル」であって、任意の情報を秘文化して伝えるわけではない、ということです。実際には共有した秘密情報をAESなどの対称暗号の鍵に使うことで、結果的に任意情報の秘文化通信を行う用途に用いられます。

(※註10) 例えばRFC9142によれば、256bitのECDHは3072bitのDHと同等のセキュリティ強度を持つとされています。

WPA3-SAE

SAE方式では、WEP時代に一度は捨てたAuthentication手順が再利用されることになりました。従来Open=0, Shared Key=1の2タイプだったAuthentication algorithmフィールドにSAE=3が追加されています。Simultaneousという名前が示すようにRequest-Responseの関係はなく、AP, STAのCommit送信順序は規定されません(※註11) 。

(※註11) しかしAPは複数のセキュリティモードをサポートすることができ、STAがどのモードで接続してくるかわからないので、現実的には先にSTAからCommitを送ることになります。

(図) WPA3-SAEを設定したAPのビーコン(拡大表示)

(図) WPA3-SAEを設定したAPのビーコン(拡大表示)

SAEにおける認証は、事前共有されたパスワードを用いて楕円曲線上のエレメント(Pass Word Element:PWE)を算出することによって行われます。PWEを説明することも難しいのですが、既知のa, bにおけるy^2=x^3+ax+bを満たすx, yのペアつまり座標点だと考えてください(※註12) 。

(※註12) NIST ECC-P256の場合a=3, b=41058363725152142129326129780047268409114441015993725554835256314039467401291で、これを p=2^256 - 2^224 + 2^192 + 2^96 - 1で剰余した整数空間が有限体になります。

パスワードからPWEの算出方法には「Hunting and Pecking」と「Hash-to-Element」の2方式が定義されていますが、詳細は割愛します。いずれの方法にせよ、AP-STA間では与えられたパスワードと楕円暗号関数から算出されたPWEを共有しているはずであり、Commitメッセージには疑似乱数(Commit-Scalar)とPWEから算出したハッシュ値(Commit-Element)が格納されて送信されます。

(図) WPA3-SAE接続手順

(図) WPA3-SAE接続手順

Commitメッセージを受け取った側ではPWEを用いてハッシュ値を検証し、もし不一致であれば認証を拒否("shall reject the peer's authentication")します(※註13)。

ハッシュ値が確認できた場合は共有鍵Kを算出し、Kから派生した鍵検証KCKを用いて認証ハッシュ値(verifier)を作りConfirmとして返送します。

Confirmを受信した側は、自分も作成したKCKでverifier値を確認します。一致すれば認証成功、しなければ認証失敗となります。
Authentication Commit-Confirmの交換が終われば認証と鍵交換が出来たことになり、鍵の初期化のため4-Way Key Handshakeが実行されます。

(※註13) PSKでは"silently discards"と指定されていたのとはちょっと違って、明確に認証失敗を通知するわけです。総当たり攻撃に対する自信の現れなのかも知れません。

 

ここまでのまとめ

  • WEPでは設定した鍵がそのまま暗号鍵に使われていたので、受動的な盗聴だけで統計的に解読できてしまった。
  • WPA/WPA2-PSKでは256bitバイナリの共有秘密鍵=PSK=PMKであり、PMKとSNonce/ANonceを混ぜてハッシュにかけ暗号鍵PTKを生成していた。PTKからPMKの逆算推定は困難で、WEPのように盗聴しているだけで統計的に解読することは容易ではない。
  • しかし256bitバイナリ鍵の設定や管理が煩雑であったことから、文字列のパスフレーズからPSKを生成するアルゴリズムが規定され、これが辞書攻撃に対する潜在的な脆弱性となった。
  • WPA3-SAEのパスワードはAuthentication手順における認証に用いられる。PMKは楕円曲線DH法を用いて生成される共有秘密情報から生成され、PMKとパスワードの間には何の関係もないので辞書攻撃ではSAEのPMKを推定できない。

WPA3-OWE

OWE(Opportunistic Wireless Encryption)はパスワード無しの暗号化を実現するWPA3のオプション機能で、Wi-Fiの用語では「Enhanced Open」とも呼ばれます。その名が示唆するように、空港やレストランなど公共Wi-Fiサービスの暗号化(盗聴解読防止)を目的としています。交換のアルゴリズムじたいはWPA3-SAEと同じECDHですが、認証を伴わないAnonymous ECDHです。なので中間介在者攻撃は防げません。つまりOWEは受動的な盗聴解読を防ぐことはできても、偽APを立てて接続誘導する積極介入攻撃まで防ぐことはできません。
OWEの鍵交換はAuthenticationではなくAssociation手順で行われ、Association Request / Association ResponseにそれぞれOWE Diffie-Hellman Parameter拡張エレメント(Tag=255, Ext Tag Number=34)を含めることによって行われます。
Association Request/Responseの交換をもって共有鍵が生成できているはずなので、そこから先はPSKやSAE同様に4-Way Key Handshakeで鍵の初期化が行われます。

(図) WPA3-OWEを設定したAPのビーコン

(図) WPA3-OWEを設定したAPのビーコン(拡大表示)

WPA3 SAE-PK

SAE-PK(Public Key)はこれまた新しいWPA3 3.0での拡張です。WPA3-SAEではOWEと違って認証ができますが、その認証はあくまで「秘密のパスワードを共有していること」という前提に基づいていました。ホテルやレストランの公衆Wi-Fiで来客にパスワードを配るような場合「第三者はパスワードを知らないはずである」という前提は崩れ、同じSSID・同じパスワードで動く偽APを立てて接続誘導する攻撃が成立してしまいます。

SAE-PKはパスワードを「人間が適当に」決めるのではなく、APが使用する秘密鍵から演算によって求める方式です。SAE-PKを使用する場合、APから送信するConfirmメッセージには秘密鍵とパスワードから生成したSAE-PK signatureが付加され、STA側は公開鍵を使ってsignatureの正当性を検証できます。秘密鍵を知らない攻撃者の偽APは検証可能なsignatureを生成できないので、Authentication手順で偽物を見抜けるという仕組みです。

なるほど...というか、そこまでやる意味はあるかねぇという気にもなりますし、AP側から認証子を送るならもはや「Authentication of Equals」じゃないじゃん、という皮肉な気にもなります。

WPA3-Enterprise

PSKとは動作原理そのものが異なるSAEやOWEと異なり、WPA3-Enterpriseの動作原理はWPA/WPA2-Enterpriseと同じです。ただしセキュリティ要件としてIEEE 802.1X+SHA-256(AKM Suite ID=00:0F:AC:05)が必須とされ、従来の「802.1Xモード」だったIEEE 802.1X+SHA-1(00:0F:AC:01)が"shall not enable / STA shall not allow"とされていること、IEEE802.11w Management Frame Protection(MFP, PMF:Protected Management Frameとも呼ばれる)を必須にすべし(shall set MFPC to 1, MFPR to 1)とされている点が異なります。
WPA3-Enterpriseでは長らく使われてきたAES-CCMP 128bit暗号に加えてより強力なAES-GCMP 256bit暗号がオプションとして使用可能になっており、これを「WPA3-Enterprise 192-bit mode」と呼びます。AES-GCMP 256bitを使うのに「192bit」と呼ぶのが紛らわしいのですが、256bit鍵まで扱える暗号アルゴリズムを192bit鍵で使うということです。
192bit暗号モードのことを慣例的に「192bit CNSA」とか「NSA Suite-B」と呼ぶこともありますが、仕様上の厳密な定義では「Suite B」=「CNSA」=「192bit暗号」ではなく、ちょっとややこしい話になります。詳しくは長くなるので註14を読んでください。
 

(※註14) NSAはアメリカの国家安全保障局(National Security Agency)、NSAが2005年に定めた暗号標準仕様に公用のSuite-A(仕様非公開)と商用のSuite-Bがあり、Suite-Bが2018年にCNSA(Commercial National Security Algorithm Suite)と改称された経緯があります。IEEE802.11-2020仕様書では、鍵交換方式(AKM)の識別子00:0f:ac:11(EAP SHA-256)を"Suite B"、00:0f:ac:12(EAP SHA-384)を"CNSA"と表記しており(Table 9-151)、暗号アルゴリズム(Cipher Suite)の方にはNSAへの言及はありません(Table 9-150)。またWPA3の仕様では、WPA3-Enterprise 192-bit modeではEAP SHA-384を使うことが定義されており、EAP SHA-256つまり802.11-2020仕様における"Suite B"では要求を満たさないことになります。


またWPA3バージョン3.0以後では、従来はルート証明書を用いた公開鍵検証だけで良かったサーバ証明書を「少なくともSubject CNの部分一致を検証すること」というセキュリティ要件も追加されています(Server Certificate Verification:SCV)。

 

Transition Mode

WPA2とWPA3は同じAP上で共存させることもでき、これを"Transition Mode"と呼んでいます。WPA/WPA2のときは共存実装について方針が示されずベンダー任せになったので混乱を招いた反省からか、WPA3 Transition Modeはかなり細かく「やるべきこと、やってはいけないこと」が規定されています。

  • WPA3-Personal Transition Mode
  • PSK(AKM ID=00:0F:AC:02)とSAE(00:0F:AC:08)の両方をサポートすること。できればPSK+SHA256(ID=00:0F:AC:06)もサポートすること。
  • MFPはサポート可能=Y, 必須=Nに設定すること(shall set MFPC to 1, MFPR to 0)。
  • PSK接続時はMFPは任意だが、SAE接続時はMFPを必須とすること。
  • WPA version 1はサポートしないこと。
  • WEP, TKIPはサポートしないこと。

 

WPA3-Enterprise Transition Mode

  • 802.1X(00:0F:AC:01)と802.1X+SHA-256(00:0F:AC:05)をサポートすること。
  • MFPはサポート可能=Y, 必須=Nに設定すること(shall set MFPC to 1, MFPR to 0)。
  • WPA version 1はサポートしないこと。
  • WEP, TKIPはサポートしないこと。

後方互換性を残しながらWPA3へ段階的に以降させる狙いと、もはや黒歴史と化しつつあるWEP/WPAに何とか引導を渡そうという意図が感じられます。

(図) WPA3 Transition Modeに設定したAPのビーコン

(図) WPA3 Transition Modeに設定したAPのビーコン(拡大表示)

WPA3 3.0では「Transition Disable」という機能が追加され、またしても偽APによる接続誘導攻撃への対処です。要するに「STA側で接続したAPのセキュリティ設定を覚えておいて、次に接続するとき以前より弱いセキュリティでの接続を拒否する」機能です。

まとめ

WEPからWPA3-SAEまでのWi-Fi / IEEE802.11無線LANのセキュリティの歴史と、簡単な原理についておさらいしてみました。この紆余曲折の歴史が、hostapd.confやwpa_supplicant.confでauth_algs=2とかwpa=2とかの設定構文が非対称になっている理由(wpa_supplicant.confで常にauth_alg=OPENと書く理由)でもあるのですが、そこに踏み込むには長くなり過ぎました。

WPA3はWPA/WPA2混在の混乱の反省に立って作られた仕様ですが、2020年12月にアップデートされたWPA3 3.0仕様では幾つかのセキュリティ要件が追加・拡張されていて、また互換性問題で少々揉めそうな気もしています。それがどういう内容なのかについては、また機会や必要があれば紹介したいと思います。

関連リンク

製品紹介ページ

長距離無線通信 IEEE 802.11ah ご紹介ページ

各種、技術資料・ホワイトペーパーをダウンロード

関連記事

製品のご購入・サービスカスタマイズ・資料請求など
お気軽にお問い合わせください