WiFiCx WPA3 SoftAP
WPA3 SoftAP 功能使设备使用 Wi-Fi 保护的访问 3 - 对等实体同时验证 (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 的支持。 此调用会向 WiFiCx 报告 Wi-Fi 直接功能。 驱动程序必须在 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
列出这些配对向 WiFiCx 发出信号,表明驱动程序支持 WPA3 过渡模式下的 SoftAP 功能。
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_SAE 和 WDI_AUTH_ALGO_RSNA_PSK。 在这种情况下,驱动程序必须通过信标和探测响应播发对安全协议的支持,并且必须允许使用 WPA2-PSK 或 WPA3-SAE 进行客户端身份验证。
AKM 支持
AKM 0xac0f08 (RSNA_AKM_SAE_PMK256) 是 WPA3 SoftAP 唯一支持的 AKM。 驱动程序不得播发对其他 AKM 的支持。
受保护的管理帧 (PMF) 功能检测
操作系统没有在 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) 和 Hunt and Peck 支持
OS 不提供仅在 AP 启动参数中使用 H2E 的特定标志。 因此,驱动程序必须始终表明它们支持 SoftAP 的 H2E 和 Hunt and Peck 方法。
防堵塞令牌
OS 可能会通过请求反阻塞令牌来响应对等提交请求。 OS 使用以下命令调用OID_WDI_SET_SAE_AUTH_PARAMS:
- 请求类型 WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS 或 WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS_H2E(如果使用 H2E)。
- 提交帧 StatusCode (WDI_TLV_SAE_COMMIT_PARAMS>WDI_TLV_SAE_STATUS_CODE) 设置为 DOT11_FRAME_STATUS_ANTI_CLOGGING_TOKEN_REQUIRED。
对等方提供反阻塞令牌作为提交参数的一部分。
在 SoftAP 方案中,当提交参数中包含反阻塞令牌时,不会生成 Scalar/Element 值。 因此,这些字段在 WDI_TLV_SAE_COMMIT_PARAMS TLV 中是可选的,驱动程序应在访问它们之前检查其状态。 此更改仍与现有驱动程序兼容。 新驱动程序应验证所有路径中是否存在这些可选字段。
被拒绝的组
OS 仅支持组 19。 如果 OS 从指示 OS 不支持的组的对等方收到提交帧,则 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。
- 提交帧 StatusCode (WDI_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) 为拒绝的组(不会与包含对等拒绝的组的 RejectedGroups 字段混淆)。
如果 OS 从包含 OS 实际支持的 RejectedGroups 字段中的组的对等方收到提交帧,OS 仍将无法通过 SAE 身份验证。 OS 将使用以下内容发送 OID_WDI_SET_SAE_AUTH_PARAMS 命令:
- WDI_SAE_REQUEST_TYPE 设置为 WDI_SAE_REQUEST_TYPE_FAILURE。
- SaeStatus 设置为 WDI_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 通过 WDI_SAE_COMMIT_PARAMS 和 WDI_SAE_CONFIRM_PARAMS 调用 OID_WDI_SET_SAE_AUTH_PARAMS 来完成 SAE 交换。
驱动程序从 OS 接收确认参数并将其发送到对等方后,可以接受关联请求并将其指示给 OS。
高性能 SoftAP
对于增强现实 (AR) 或虚拟现实 (VR) 等方案,驱动程序应尽可能优化 SoftAP 性能,并将其优先于 STA 连接。 此过程涉及启动 SoftAP 时的战略决策,例如频道/通道选择以及与 STA 连接共存。 它还涉及优化,同时维持 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 链接上的优化性能。 驱动程序应履行此任务,但还应努力增强 SoftAP 链接,即使它未通过 OID_WDI_SET_CONNECTION_QUALITY 任务接收特定要求。
漫游 STA 端口时的预期行为
OS 请求“any”频段/通道:
考虑到当前配置和 STA 连接,驱动程序应在最佳频段/通道上启动 SoftAP。 通常,最佳频段/通道是 STA 链接使用的频段/通道。 然后,驱动程序应成功完成 OID_WDI_TASK_START_AP 任务。
如果移动 STA 可能会改善 SoftAP 链接,驱动程序可以使用 NDIS_STATUS_WDI_INDICATION_ROAMING_NEEDED 将漫游请求发送到 OS。 漫游成功后,驱动程序可以将 SoftAP 链接移动到可优化性能的新频段/通道。
OS 请求特定的频段/通道:
如果驱动程序能在操作系统要求的频带/信道上以合理的性能持续运行 SoftAP,则应能成功完成 OID_WDI_TASK_START_AP 任务。
如果驱动程序当前无法在请求的频段/通道上维持 SoftAP,则应检查是否满足以下条件。
- 备用 BSS 可供 STA 漫游。
- 驱动程序可以在漫游 STA 链接后在 OS 请求的频段/通道上维持 SoftAP。
- 漫游不太可能失败。
如果满足这些条件,驱动程序应成功完成 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,并且没有合理的候选项可用于漫游,则驱动程序应使 OID_WDI_TASK_START_AP 任务失败,错误代码为 STATUS_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE 或 STATUS_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE。
如果由于其他原因(不支持的频段/通道、泛型驱动程序问题等)而无法启动 SoftAP,驱动程序应使用泛型错误代码,例如 STATUS_NOT_SUPPORTED。
如果由于需要漫游 STA 连接但漫游失败而导致无法持续 SoftAP,驱动程序应停止 SoftAP,原因代码为 WDI_STOP_AP_REASON_FREQUENCY_NOT_AVAILABLE。