實作 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。