WiFiCx WPA3-SAE 身份验证

WiFiCx 支持 WPA3-SAE,也称为 WPA3-Personal。 在 Windows 中完成 SAE (Secure Authentication of Equals) 身份验证的帧内容生成和分析,但 OS 要求驱动程序支持发送和接收 WPA3-SAE 身份验证帧。

WPA3-SAE 功能

WiFiCx 驱动程序通过执行以下操作表示 SAE 支持:

  1. 设置 SAE 支持的功能。
    驱动程序在调用 WifiDeviceSetDeviceCapabilities 期间在 WIFI_DEVICE_CAPABILITIES 中设置 SAEAuthenticationSupported 功能。

  2. 设置 MFP 功能。
    驱动程序在调用 WifiDeviceSetStationCapabilities 期间在 WIFI_STATION_CAPABILITIES 中设置 MFPCapable 功能。

  3. 添加 WDI_AUTH_ALGO_WPA3_SAE 密码。
    驱动程序在调用 WifiDeviceSetStationCapabilities 中返回的身份验证密码组合列表中包括 WDI_AUTH_ALGO_WPA3_SAE + DOT11_CIPHER_ALGO_CCMP 对。 这应添加到以下结构中:

    驱动程序在调用 WifiDeviceSetStationCapabilities 中返回的身份验证密码组合列表中也包括 WDI_AUTH_ALGO_WPA3_SAE + WDI_CIPHER_ALGO_BI 对。 它应被添加到以下结构中:

WPA3-SA 身份验证流

连接启动

SAE 连接通过 OID_WDI_TASK_CONNECTOID_WDI_TASK_ROAM 启动。 当驱动程序需要执行 SAE 身份验证时,WDI 将 WDI_AUTH_ALGO_WPA3_SAE 指定为身份验证方法。 如果 WDI 在连接/Roam 任务中的 BSS 列表中提供 PMKID,则驱动程序将跳过 SAE 身份验证并改为执行开放身份验证,然后是与 PMKID 的重新关联请求。

身份验证流

显示 WPA3-SAE 身份验证流的示意图。

SAE 参数的初始请求

驱动程序首先选择要连接到或漫游的 BSS,如果 WDI 未为该 BSS 提供 PMKID,驱动程序会使用 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED 从 WDI 请求提交参数。 在此初始指示中,驱动程序将指示类型设置为 WDI_SAE_INDICATION_TYPE_COMMIT_REQUEST_PARAMS_NEEDED。 作为响应,WDI 使用以下选项之一将 OID_WDI_SET_SAE_AUTH_PARAMS 发送到驱动程序。

  • 发送提交请求 (WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS)
  • SAE 身份验证失败 (WDI_SAE_REQUEST_TYPE_FAILURE)

收到提交响应后

收到提交响应时,驱动程序会发送 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED,类型设置为WDI_SAE_INDICATION_TYPE_COMMIT_FRAME。 作为响应,WDI 使用以下请求之一发送 OID_WDI_SET_SAE_AUTH_PARAMS

  • 发送提交请求 (WDI_SAE_REQUEST_TYPE_COMMIT_PARAMS)
  • 发送确认请求 (WDI_SAE_REQUEST_TYPE_CONFIRM_PARAMS)
  • SAE 身份验证失败 (WDI_SAE_REQUEST_TYPE_FAILURE)

收到确认响应后

收到确认响应时,驱动程序会发送 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED,类型设置为WDI_SAE_INDICATION_TYPE_CONFIRM_FRAME。 然后,WDI 发送 OID_WDI_SET_SAE_AUTH_PARAMS,SAE 状态字段设置为成功或失败。 如果因超时或其他原因导致驱动程序中的 SAE 身份验证失败,驱动程序会发送 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED 指示,该指示的类型设置为WDI_SAE_INDICATION_TYPE_ERROR,失败原因在 WDI_TLV_SAE_STATUS 中指定。

超时和重新传输

这些由驱动程序处理。

WPA3-SAE 关联

设备使用以下选项之一连接到 SAE 网络。

SAE 交流后(重新)关联

这通常是与 SAE 网络的第一次关联尝试。 驱动程序在关联请求帧的 RSN IE 中设置 SAE AKM。

使用 PMKID(重新)关联

如果 WDI 为连接/漫游任务中的 BSS 条目提供了 PMKID,驱动程序将执行以下操作:

  1. 驱动程序执行 Open 身份验证,随后在(重新)关联请求中包含 PMKID。
  2. 如果设备在短时间内未收到来自 AP 的响应,或者 AP 在响应中返回关联错误,驱动程序将跳过对此 AP 的 SE 身份验证,并移动到另一个 AP,或回退到使用此 AP 执行完整的 SAE 身份验证。

SAE 身份验证/关联完成后,SAE 连接即完成。 与之前一样,在连接或漫游任务结束时,驱动程序会发送以下指示:

错误处理

重新发送 SAE 提交请求帧

如果驱动程序因超时而需要重新发送提交帧,则它可以重新发送 WDI 提供的原始标量/元素值,或者使用 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED 指示从 WDI 请求一组新的 Scalar/Element 值。

重新发送 SAE 确认响应帧

如果驱动程序因超时而需要重新发送 Confirm 帧,则应使用 NDIS_STATUS_WDI_INDICATION_SAE_AUTH_PARAMS_NEEDED 指示从 WDI 请求一组新的 SendConfirmConfirm 值,并将类型设置为 WDI_SAE_INDICATION_TYPE_CONFIRM_REQUEST_RESEND_REQUEST

Wi-Fi 7 SAE 身份验证更改

有关 Wi-Fi 7 SAE 身份验证更新,请参阅 WiFiCx Wi-Fi 7 功能要求