實作 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. 在「設定」config.xml 中將 config_wifi_connected_mac_randomization_supported 設為 true (可在裝置自訂疊加層中完成)。

    • 這個標記可用來控制是否已啟用用戶端模式 MAC 隨機化。
  3. 在「設定」config.xml 中將 config_wifi_p2p_mac_randomization_supported 設為 true (可在裝置自訂疊加層中完成)。

    • 此標記用於控制是否已啟用 Wi-Fi 直接 MAC 隨機化。
  4. 使用驗證中說明的方法測試實作成果。

系統 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 隨機化功能。

驗證

如要確認功能是否如預期運作,請執行手動測試:

  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 以下版本 (支援 MAC 隨機化) 的裝置上測試 MAC 隨機化作業,請升級至 Android 10 以上版本:

  1. 在搭載 Android 9 以下版本的裝置上至少儲存一個網路。
  2. 刷新 Android 10 系統映像檔。
  3. 在 Wi-Fi 挑選器中,確認所有已儲存的網路已關閉 MAC 隨機化功能。
  4. 開啟 MAC 隨機化設定。請連線至相同的網路,並確認使用的是隨機 MAC。