實施 MAC 隨機化

從 Android 8.0 開始,Android 裝置在探測目前未與網路關聯的新網路時使用隨機 MAC 位址。在 Android 9 中,您可以啟用開發人員選項(預設為停用)以使裝置在連接到 Wi-Fi 網路時使用隨機 MAC 位址。

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

MAC 隨機化可防止偵聽器使用 MAC 位址建立裝置活動歷史記錄,從而增強使用者隱私。

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

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

執行

要在您的裝置上實現 MAC 隨機化:

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

    • IWifiStaIface#setMacAddress :設定介面的 MAC 位址。預設實作會關閉接口,變更 MAC 位址,然後恢復接口。
    • IWifiStaIface#getFactoryMacAddress :使用ioctl呼叫取得wlan0的工廠 MAC。
    • ISupplicantP2pIface#setMacRandomization :在請求者中設定 P2P MAC 隨機化開/關。
  2. 在設定config.xml中將config_wifi_connected_mac_randomization_supported設為true (這可以在裝置自訂覆蓋中完成)。

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

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

系統使用者介面必須:

  • 可以選擇啟用或停用每個 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。