MAC 隨機化行為

MAC 隨機化功能可讓裝置在連接到 Wi-Fi 網路時使用隨機 MAC 位址。有關實作說明,請參閱實作 MAC 隨機化。本頁描述了 Android 中 MAC 隨機化的行為。

裝置在連接到 Wi-Fi 網路或存取點時使用 MAC 位址。由於這些 MAC 位址的傳輸沒有加密,因此可以捕獲它們並用於潛在地追蹤用戶的位置。從歷史上看,設備使用工廠 MAC 位址來關聯到 Wi-Fi 網路。工廠 MAC 位址是全球唯一且靜態的,允許追蹤和單獨識別設備。

MAC 隨機化功能透過連接到 Wi-Fi 網路時使用隨機 MAC 位址來增強使用者隱私。

MAC 位址長 48 位,通常以 12 個十六進位數字(6 個八位元組,因為每個八位元組為 8 位元)表示,例如00:11:22:AA:BB:CC 。 MAC 隨機化功能透過將本機管理位元設為 1,播位元設為 0 來隨機化位址。其他 46 位元被隨機化。

對於運行 Android 10 或更高版本的設備,框架預設使用隨機 MAC 位址。使用者可以透過「設定」網路詳細資料畫面中的選項啟用或停用各個網路的MAC 隨機化,如圖1 所示。如果使用者停用網路的MAC 隨機化,框架將使用出廠MAC 位址(全域唯一位址) 。

MAC 隨機化選項

圖 1.MAC隨機化選項。

MAC 隨機化類型

Android框架使用兩種類型的MAC隨機化:持久性隨機化非持久性隨機化。如果使用者停用 MAC 隨機化,則使用原廠 MAC 位址。

Android 決定當裝置關聯到 Wi-Fi 網路時要使用哪種 MAC 隨機化類型。預設情況下,Android 使用持久隨機化。從 Android 12 開始,Android 在以下情況下使用非持久性隨機化:

  • 網路建議應用程式透過WifiNetworkSuggestion.Builder#setMacRandomizationSetting API 指定對網路使用非持久性隨機化。
  • 該網絡是未遇到強制門戶的開放網絡,並且config_wifiAllowEnhancedMacRandomizationOnOpenSsids覆蓋設置為true 。預設情況下停用此疊加層(設定為false )。

持續隨機化

啟用 MAC 隨機化功能時,Android 預設使用持久性隨機化類型。 Android 根據網路設定檔的參數(包括 SSID、安全類型或 FQDN(用於 Passpoint 網路))產生持久的隨機 MAC 位址。此 MAC 位址在恢復出廠設定之前保持不變。如果使用者忘記並重新添加 Wi-Fi 網絡,MAC 位址不會重新隨機化,因為 MAC 位址取決於網路設定檔的參數。

當網路依賴 MAC 位址的持久性來為使用者提供有用的功能時,持久性 MAC 位址是必要的,例如,記住裝置並允許使用者按預期繞過登入畫面,或啟用家長監護。

對於 Android 10 和 11,當啟用 MAC 隨機化時,框架對所有網路使用持久性隨機化。

非持久性隨機化

在非持久性隨機化類型(用於Android 12 或更高版本中的某些網路)下,Wi-Fi 模組會在每次連線開始時重新隨機化MAC 位址,或框架使用現有的隨機化MAC 位址來連接網路。 Wi-Fi模組在以下情況下會重新隨機化MAC位址:

  • DHCP 租約期限已過期,並且自設備上次與該網路斷開連接以來已經過去了 4 小時以上。
  • 網路設定檔的目前隨機 MAC 是在 24 小時前產生的。 MAC 位址重新隨機化僅在新連線開始時發生。 Wi-Fi 不會為了重新隨機化 MAC 位址而主動斷開連線。

如果這些情況都不適用,框架將使用先前隨機化的 MAC 位址連接到網路。

非持久性隨機化的開發人員選項

對於運行 Android 11 或更高版本的設備,使用者可以透過開發者選項畫面為所有 Wi-Fi 網路(已啟用 MAC 隨機化)全域啟用非持久性 MAC 隨機化。為所有設定檔啟用非持久性 MAC 隨機化的選項可在「設定」>「開發者選項」>「Wi-Fi 非持久性 MAC 隨機化」中找到。

Wi-Fi 非持久性 MAC 隨機化選項

圖 2.Wi -Fi 非持久性 MAC 隨機化選項。