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 地址。

當設備關聯到 Wi-Fi 網絡時,Android 確定要使用的 MAC 隨機化類型。默認情況下,Android 使用持久隨機化。從 Android 12 開始,Android 在以下情況下使用非持久隨機化:

  • 一種網絡建議應用指定的非持續性隨機化可用於通過網絡WifiNetworkSuggestion.Builder#setMacRandomizationSetting API。
  • 該網絡是沒有遇到一個強制網絡門戶和開放的網絡config_wifiAllowEnhancedMacRandomizationOnOpenSsids疊加設置為true 。這是覆蓋禁用(設置為false ),默認情況下。

持續隨機化

當啟用 MAC 隨機化功能時,Android 默認使用持久隨機化類型。 Android 會根據網絡配置文件的參數(包括 SSID、安全類型或 FQDN(適用於 Passpoint 網絡))生成持久的隨機 MAC 地址。在恢復出廠設置之前,此 MAC 地址保持不變。 MAC地址沒有得到重新隨機如果用戶忘記,重新增加了Wi-Fi網絡,因為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的設備,用戶可以啟用非持久MAC隨機全球範圍內為所有的Wi-Fi網絡(具有MAC隨機化使能)通過顯影劑選項屏幕。使非持久性MAC隨機對所有配置文件選項,在設置>開發者選項>的Wi-Fi非持久性MAC隨機被發現。

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

圖2.無線網絡連接的非持久性隨機MAC選項。