透過 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 隨機產生功能會將「locally administered」位元設為 1,並將「unicast」位元設為 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 會根據網路設定檔的參數產生持續隨機 MAC 位址,包括 SSID、安全性類型或 FQDN (適用於 Passpoint 網路)。這個 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 位址」。
圖 2. Wi-Fi 非持續性隨機 MAC 位址選項。