實施 MAC 隨機化

從 Android 8.0 開始,Android 設備在探測當前未與網絡關聯的新網絡時使用隨機 MAC 地址。在 Android 9 中,您可以啟用開發人員選項(默認情況下禁用)以使設備在連接到 Wi-Fi 網絡時使用隨機 MAC 地址。

在 Android 10 中,默認為客戶端模式、SoftAp 和 Wi-Fi Direct 啟用 MAC 隨機化。

MAC 隨機化可防止偵聽器使用 MAC 地址來構建設備活動歷史記錄,從而增加用戶隱私。

此外,作為Wi-Fi AwareWi-Fi RTT操作的一部分,MAC 地址是隨機的。

有關詳細信息,請參閱MAC 隨機化行為

執行

要在您的設備上實現 MAC 隨機化:

  1. 與 Wi-Fi 芯片供應商合作實施以下 HAL 方法:

    • IWifiStaIface#setMacAddress :配置接口的 MAC 地址。默認實現會關閉接口、更改 MAC 地址並重新啟動接口。
    • IWifiStaIface#getFactoryMacAddress :使用ioctl調用獲取wlan0的工廠 MAC。
    • ISupplicantP2pIface#setMacRandomization :在請求者中設置 P2P MAC 隨機化開/關。
  2. 在 Settings config.xml config_wifi_connected_mac_randomization_supported設置為true (這可以在設備自定義覆蓋中完成)。

    • 此標誌用於控制是否啟用客戶端模式 MAC 隨機化。
  3. 在 Settings config.xml config_wifi_p2p_mac_randomization_supported設置為true (這可以在設備自定義覆蓋中完成)。

    • 此標誌用於控制是否啟用 Wi-Fi 直接 MAC 隨機化。
  4. 使用Validation中描述的方法測試您的實現。

系統 UI 必須:

  • 可以選擇為每個 SSID 啟用或禁用隨機化。
  • 默認情況下為所有新添加的網絡啟用 MAC 隨機化。

使用設置 UI 的參考實現來實現新的提示。

運行 Android 9 或更低版本的設備可能不支持 Wi-Fi MAC 隨機化。將此類設備升級到 Android 10 時,可以通過在 Wi-Fi 供應商 HAL make 文件中將WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION標誌設置為 true 來禁用 Wi-Fi MAC 隨機化功能。

驗證

要驗證該功能是否按預期工作,請同時運行集成測試 (ACTS) 和手動測試。

要運行集成測試,請使用位於tools/test/connectivity/acts_tests/tests/google/wifi中的 ACTS 文件WifiMacRandomizationTest.py來驗證設備是否使用隨機 MAC 地址並正確存儲每個設備的隨機 MAC 地址網絡。

要運行手動測試:

  1. 通過檢查設備覆蓋圖中的config_wifi_connected_mac_randomization_supported是否設置為true ,驗證設備上是否啟用了 MAC 隨機化。
  2. 連接到 Wi-Fi 網絡。
  3. 點擊網絡以進入網絡詳細信息頁面。驗證 MAC 隨機化是否已打開。驗證顯示的 MAC 地址是否為隨機 MAC,本地生成的位設置為 1,多播位設置為 0。
  4. 關閉 MAC 隨機化。連接到同一網絡並驗證是否使用了出廠 MAC。
  5. 通過點擊網絡詳細信息頁面上的忘記來刪除網絡。
  6. 連接到同一網絡並驗證是否使用了相同的隨機 MAC 地址。

要在升級到 Android 10 或更高版本的 Android 10 之前的設備(能夠支持 MAC 隨機化)上測試 MAC 隨機化:

  1. 在運行 Android 9 或更低版本的設備上至少保存一個網絡。
  2. 刷入 Android 10 系統映像。
  3. 在 Wi-Fi 選擇器中,確認所有已保存網絡的 MAC 隨機化均已關閉。
  4. 打開 MAC 隨機化。連接到同一網絡並驗證是否正在使用隨機 MAC。