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 地址(全局唯一地址)。
圖 1. MAC 隨機化選項。
MAC 隨機化類型
Android 框架使用兩種類型的 MAC 隨機化:持久隨機化和非持久隨機化。如果用戶禁用 MAC 隨機化,則使用出廠 MAC 地址。
當設備關聯到 Wi-Fi 網絡時,Android 會確定要使用的 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 或 12 的設備,用戶可以通過開發者選項屏幕為所有 Wi-Fi 網絡(已啟用 MAC 隨機化)全局啟用非持久 MAC 隨機化。為所有配置文件啟用非持久 MAC 隨機化的選項位於Settings > Developer Options > Wi-Fi non-persistent MAC randomization 。
圖 2. Wi-Fi 非持久 MAC 隨機化選項。