WiFiCx WPA3 SoftAP

WPA3 SoftAP 機能により、デバイスは Wi-Fi Protected Access 3 - Simultaneous Authentication of Equals (WPA3-SAE) セキュリティ プロトコルを使用してソフト アクセス ポイント (SoftAP) を設定できます。 この SoftAP は、2.4 GHz または 5 GHz 帯域のいずれかで動作できます。 WDI バージョン 2.0.11 および WiFiCx バージョン 1.1 以降では、WiFiCx クライアント ドライバーに WPA3 SoftAP 機能を統合できます。

WPA3 SoftAP は、下位互換性のために WPA3-SAE と WPA3-SAE 移行モードをサポートしています。 移行モードは、WPA2-PSK と WPA3-SAE の両方の認証方式に対応し、さまざまなデバイスや環境にわたって安全な Wi-Fi 接続を保証します。

WPA3 SoftAP は、WiFiCx ドライバー モデルでのみ使用できます。 この記事では、WiFiCx ドライバーに WPA3 SoftAP のサポートを追加する方法について説明します。

WPA3 SoftAP 機能検出

クライアント ドライバーは、WifiDeviceSetWiFiDirectCapabilities を呼び出すときに、WPA3 SoftAP をサポートしていることを示します。 この呼び出しは、Wi-Fi Direct 機能を WiFiCx に報告します。 ドライバーは、 WIFI_WIFIDIRECT_CAPABILITIES 構造内の UnicastAlgorithms リストに認証と暗号のペア DOT11_AUTH_ALGO_WPA3_SAE + DOT11_CIPHER_ALGO_CCMP を含める必要があります。

SoftAP で WPA2-PSK と WPA3-SAE の両方をサポートするドライバーは、次のユニキャスト アルゴリズム ペアを報告する必要があります。

  • DOT11_AUTH_ALGO_WPA3_SAE + DOT11_CIPHER_ALGO_CCMP
  • DOT11_AUTH_ALGO_RSNA_PSK + DOT11_CIPHER_ALGO_CCMP

これらのペアをリストすると、ドライバーが WPA3 移行モードで SoftAP 機能をサポートしていることが WiFiCx に通知されます。

AP開始パラメータ

Windows は OID_WDI_TASK_START_AP タスクを次のように変更します。

  • ドライバーが WPA3 SoftAP のサポートを示している場合、WDI_TLV_AUTH_ALGO_LIST TLV には WDI_AUTH_ALGO_WPA3_SAE が含まれることがあります。
  • WDI_TLV_AUTH_ALGO_LIST TLVには、WDI_AUTH_ALGO_WPA3_SAEWDI_AUTH_ALGO_RSNA_PSKの両方が含まれる場合があります。 この場合、ドライバーはビーコンとプローブ応答を通じて両方のセキュリティ プロトコルのサポートをアドバタイズし、WPA2-PSK または WPA3-SAE のいずれかを使用してクライアント認証を許可する必要があります。

AKM サポート

AKM 0xac0f08 (RSNA_AKM_SAE_PMK256) は、WPA3 SoftAP でサポートされている唯一の AKM です。 ドライバーは他の AKM のサポートをアドバタイズしてはなりません。

保護された管理フレーム (PMF) 機能の検出

OS は、AP 開始パラメータで PMF 用の特定のフラグを提供しません。 ドライバーは次のように PMF 機能をアドバタイズする必要があります。

認証アルゴリズムあり PMF が必要 PMF対応
WPA2-PSK いいえ いいえ
WPA3-SAE + WPA2-PSK いいえ はい
WPA3-SAE はい はい

ドライバーが SoftAP 上の WPA3-SAE の機能を報告する場合、OS はドライバーが PMF をサポートすることを期待します。 PMF には追加のドライバー機能はありません。

WPA3 SoftAP の SAE 認証

このセクションでは、WPA3 SoftAP シナリオの SAE 認証の更新について説明します。

ハッシュツーエレメント(H2E)とハントアンドペックのサポート

OS は、AP 開始パラメータでのみ H2E を使用するための特定のフラグを提供しません。 したがって、ドライバーは、SoftAP の H2E 方式と Hunt and Peck 方式の両方をサポートしていることを一貫して示す必要があります。

詰まり防止トークン

OS は、アンチクロッギング トークンを要求することによって、Peer コミット要求に応答する場合があります。 OS は下記により OID_WDI_SET_SAE_AUTH_PARAMS を呼び出します。

  • リクエストタイプ WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS または WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS_H2E (H2E が使用されている場合)。
  • コミットフレームStatusCodeWDI_TLV_SAE_COMMIT_PARAMS>WDI_TLV_SAE_STATUS_CODE)がDOT11_FRAME_STATUS_ANTI_CLOGGING_TOKEN_REQUIREDに設定されています。

Peer は、コミット パラメータの一部としてアンチクロッギング トークンを提供します。

SoftAP シナリオでは、コミット パラメータにアンチクロッギング トークンが含まれている場合、スカラー/要素値は生成されません。 したがって、これらのフィールドは WDI_TLV_SAE_COMMIT_PARAMS TLV ではオプションであり、ドライバーはアクセスする前にそれらの存在を確認する必要があります。 この変更は既存のドライバーとの互換性を維持します。 新しいドライバーは、すべてのパスでこれらのオプション フィールドの存在を検証する必要があります。

拒否されたグループ

OS はグループ 19 のみをサポートします。 OS がサポートしていないグループを示すコミット フレームをPeer から受信した場合、OS は OID_WDI_SET_SAE_AUTH_PARAMS コマンドを送信します。 コマンドでは、OS は以下を設定します。

  • WDI_SAE_REQUEST_TYPE からWDI_SAE_REQUEST_TYPE_COMMIT_PARAMS または WDI_SAE_REQUEST_TYPE_COMMIT_H2E_PARAMS (H2E が使用された場合)。
  • SaeStatusからWDI_SAE_STATUS_COMMIT_MESSAGE_UNSUPPORTED_FINITE_GROUPまで。
  • コミットフレームStatusCodeWDI_TLV_SAE_COMMIT_PARAMS>WDI_TLV_SAE_STATUS_CODE)をDOT11_FRAME_STATUS_UNSUPPORTED_FINITE_CYCLIC_GROUPにします。
  • 拒否されたグループへのコミット フレーム FiniteCyclicGroup (WDI_TLV_SAE_COMMIT_PARAMS>WDI_TLV_SAE_FINITE_CYCLIC_GROUP) (Peer が拒否したグループを含む RejectedGroups フィールドと混同しないでください)。

OS が実際にサポートしている RejectedGroups フィールド内のグループを含むコミット フレームをPeer から受信した場合、OS は SAE 認証に失敗します。 OS は、次の内容を含む OID_WDI_SET_SAE_AUTH_PARAMS コマンドを送信します。

  • WDI_SAE_REQUEST_TYPEWDI_SAE_REQUEST_TYPE_FAILUREに設定されます。
  • SaeStatusWDI_SAE_STATUS_COMMIT_MESSAGE_INVALID_REJECTED_GROUPに設定されました。

SAE認証シーケンス

OID_WDI_TASK_START_AP タスクが呼び出されると、OID_WDI_TASK_START_AP の認証アルゴリズム リストに DOT11_AUTH_ALGO_WPA3_SAE が設定されている場合、ドライバーはデバイスが SAE 認証フレームを送信できるようにします。 ドライバーは、 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED 指示を使用して、SAE 認証パラメータを OS に渡します。

Windows は、SAE 交換を完了するために、OID_WDI_SET_SAE_AUTH_PARAMSWDI_SAE_COMMIT_PARAMS および WDI_SAE_CONFIRM_PARAMS とともに呼び出します。

ドライバーはOSから確認パラメータを受信して​​Peer に送信した後アソシエーション要求を受け入れてOSに通知することができます。

高性能SoftAP

拡張現実 (AR) や仮想現実 (VR) などのシナリオでは、ドライバーは SoftAP のパフォーマンスを可能な限り最適化し、STA 接続よりも優先する必要があります。 このプロセスには、バンド/チャネルの選択や STA 接続との共存など、SoftAP を起動するときの戦略的な決定が含まれます。 また、SoftAP を維持しながら最適化を行うことも含まれます。

OS は、 OID_WDI_TASK_START_AP タスクで新しいフラグ favorOverSta を使用して、高性能 SoftAP を必要とするシナリオを示します。

OS は、ドライバーが SoftAP リンクを最適化する方法を指示せず、主にドライバーの裁量に任せます。 ドライバーは、STA リンクを低下させて SoftAP リンクを向上させることができます。

OS が favorOverSta フラグを設定して SoftAP を開始すると、SoftAP リンクが強化される場合、ドライバーは STA 接続を別のバンド/チャネルにローミングすることを許可され、推奨されます。

OS が要求したバンド/チャネル パラメータが現在の STA 接続と競合する場合、ドライバーは、STA 接続をローミングすることで、要求されたパラメータを使用して SoftAP を起動できるかどうかを検討する必要があります。

favorOverSta フラグで起動された SoftAP が実行されている場合、OS は OID_WDI_SET_CONNECTION_QUALITY タスクを送信して、SoftAP リンクの最適化されたパフォーマンスを要求することがあります。 ドライバーはこのタスクを尊重する必要がありますが、OID_WDI_SET_CONNECTION_QUALITY タスクを通じて特定の要件を受け取らない場合でも、SoftAP リンクを強化するように努める必要があります。

STA ポートをローミングする場合の予想される動作

OS は「任意の」バンド/チャネルを要求します:

  • ドライバーは、現在の構成と STA 接続を考慮して、最適なバンド/チャネルで SoftAP を起動する必要があります。 通常、最適なバンド/チャネルは、STA リンクで使用されるものです。 その後、ドライバーは OID_WDI_TASK_START_AP タスクを正常に完了するはずです。

    STA を移動することで SoftAP リンクが改善される可能性がある場合、ドライバーは NDIS_STATUS_WDI_INDICATION_ROAMING_NEEDED を使用して OS にローミング要求を送信できます。 ローミングが成功すると、ドライバーはパフォーマンスを最適化する新しいバンド/チャネルに SoftAP リンクを移動できます。

OS は特定のバンド/チャネルを要求します。

  • ドライバーが OS が要求したバンド/チャネルで適切なパフォーマンスで SoftAP を維持できる場合、OID_WDI_TASK_START_AP タスクは正常に完了するはずです。

  • ドライバーが要求されたバンド/チャネルで SoftAP を現在維持できない場合は、次の条件が満たされているかどうかを確認する必要があります。

    1. STA がローミングできる代替 BSS が利用可能です。
    2. ドライバーは、STA リンクをローミングした後、OS が要求したバンド/チャネルで SoftAP を維持できます。
    3. ローミングが失敗する可能性は低いです。

    これらの条件が満たされた場合、ドライバーは OID_WDI_TASK_START_AP を正常に完了し、STA 接続を移動するためのローミング要求を送信する必要があります。

    それ以外の場合、ドライバーは関連するエラー コードで OID_WDI_TASK_START_AP タスクを失敗させる必要があります。

ドライバーは OID_WDI_TASK_START_AP タスクを完了すると、STA 接続を移動して SoftAP のパフォーマンスを維持または強化するためのローミング要求を送信できます。

ローミングが失敗し、ドライバーが STA 接続を移動せずに SoftAP を維持できない場合、ドライバーは SoftAP を停止する必要があります。 ドライバーは、関連する理由コード (通常は WDI_STOP_AP_REASON_FREQUENCY_NOT_AVAILABLE) とともに NDIS_STATUS_WDI_INDICATION_STOP_AP を送信して、オペレーティング システムに通知します。

SoftAP が停止すると、ユーザーは SoftAP が起動してほぼ瞬時に停止する「ちらつき」効果に気付く場合があります。 この動作は可能な限り避けるべきです。 ドライバーが SoftAP を維持するためにローミングを必要とする場合、ドライバーは OID_WDI_TASK_START_AP タスクを完了する前にローミングが成功すると確信する必要があります。

SoftAP エラー コード

規制上の理由によりバンド/チャネルが許可されていないために SoftAP を起動できない場合、ドライバーはエラー コード STATUS_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED または STATUS_NDIS_DOT11_AP_BAND_NOT_ALLOWED で OID_WDI_TASK_START_AP タスクを失敗させる必要があります。

STA が要求されたバンド/チャネルと互換性のないバンド/チャネルで動作しており、ローミングに適切な候補がないため SoftAP を起動できない場合、ドライバーはエラー コード STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE または STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE で OID_WDI_TASK_START_AP タスクを失敗させる必要があります。

別の理由(サポートされていないバンド/チャネル、汎用ドライバーの問題など)で SoftAP を起動できない場合、ドライバーは STATUS_NOT_SUPPORTED などの汎用エラー コードを使用する必要があります。

STA 接続をローミングする必要があったが、ローミングが失敗したために SoftAP を維持できない場合、ドライバーは理由コード WDI_STOP_AP_REASON_FREQUENCY_NOT_AVAILABLE で SoftAP を停止する必要があります。