裝置連上 Wi-Fi 網路時,可透過 MAC 隨機化功能使用隨機 MAC 位址。如需實作操作說明,請參閱「實作 MAC 位址隨機化」。本頁說明 Android 中的 MAC 位址隨機化行為。
裝置連線至 Wi-Fi 網路或存取點時,會使用 MAC 位址。由於這些 MAC 位址是以未加密的形式傳輸,因此可能會遭到擷取,並用於追蹤使用者的位置。過去,裝置會使用原廠 MAC 位址與 Wi-Fi 網路建立關聯。原廠 MAC 位址在全球都不會重複,而且是靜態的,因此可追蹤及個別識別裝置。
連上 Wi-Fi 網路時,MAC 隨機化功能會使用隨機 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 位址。
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 以上版本的裝置,使用者可以透過開發人員選項畫面,為所有已啟用 MAC 位址隨機化的 Wi-Fi 網路,全域啟用非持續性 MAC 位址隨機化功能。如要為所有設定檔啟用非持續性隨機 MAC 位址,請依序前往「設定」>「開發人員選項」>「Wi-Fi 非持續性隨機 MAC 位址」。
圖 2. Wi-Fi 非持續性隨機 MAC 位址選項。