随机分配 MAC 地址的行为

借助随机分配 MAC 地址功能,设备可以在连接到 WLAN 网络时使用随机分配的 MAC 地址。如需了解实现说明,请参阅实现随机分配 MAC 地址。 本页将介绍 Android 中的随机分配 MAC 地址的行为。

设备在连接到 WLAN 网络或接入点时会使用 MAC 地址。由于这些 MAC 地址未经加密即被传输,因此可能会被捕获并用于跟踪用户的位置。过去,设备使用出厂 MAC 地址连接到 WLAN 网络。出厂 MAC 地址在全球范围内是唯一的静态地址,可以跟踪和逐个识别设备。

随机分配 MAC 地址功能通过在连接到 WLAN 网络时使用随机分配的 MAC 地址,可以加强用户隐私保护。

MAC 地址的长度为 48 位,通常由 12 个十六进制数字表示(每个 8 位字节为 6 个八位字节),例如 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 地址。

当设备连接到 WLAN 网络时,Android 会决定要使用的随机分配 MAC 地址类型。默认情况下,Android 使用永久性随机分配。从 Android 12 开始,Android 会在以下情况下使用非永久性随机分配:

  • “网络建议”应用通过 WifiNetworkSuggestion.Builder#setMacRandomizationSetting API 指定对网络使用非永久性随机分配。
  • 该网络是未遇到强制门户的开放式网络,并且 config_wifiAllowEnhancedMacRandomizationOnOpenSsids 叠加层设置为 true。默认情况下,此叠加层处于停用状态(设为 false)。

永久性随机分配

启用随机分配 MAC 地址功能时,Android 默认使用永久性随机分配类型。Android 会根据网络配置文件的参数(包括适用于 Passpoint 网络的 SSID、安全类型或 FQDN)生成随机分配的 MAC 地址。在恢复出厂设置之前,此 MAC 地址将保持不变。如果用户忘记并重新添加 WLAN 网络,则不会重新随机分配 MAC 地址,因为所分配的 MAC 地址取决于网络配置文件的参数。

如果网络依赖 MAC 地址的永久性为用户提供有用的功能(例如,记住设备并使用户按照预期绕过登录屏幕),则必须使用永久性 MAC 地址或启用家长控制功能。

对于 Android 10 和 11,框架会在启用随机分配 MAC 地址功能后对所有网络使用永久性随机分配。

非永久性随机分配

在 Android 12 或更高版本中用于某些网络的非永久性随机分配类型下,WLAN 模块在每次连接开始时重新随机分配 MAC 地址,或者框架使用现有的随机分配 MAC 地址连接到网络。在以下情况下,WLAN 模块会重新随机分配 MAC 地址:

  • DHCP 租约已过期,自设备上次与此网络断开连接的时间已超过 4 小时。
  • 当前网络配置文件的随机分配的 MAC 地址是在 24 小时之前生成的。重新随机分配 MAC 地址仅在新连接开始时执行。WLAN 不会出于重新随机分配 MAC 地址的目的主动断开连接。

如果上述情况均不适用,该框架会使用之前随机选择的 MAC 地址连接到网络。

用于非永久性随机分配的开发者选项

对于搭载 Android 11 或 12 的设备,用户可以通过开发者选项界面对所有启用了随机分配 MAC 地址功能的 WLAN 网络在全球范围内启用非永久性随机分配 MAC 地址功能。您可以在设置 > 开发者选项 > WLAN 非持久随机分配 MAC 地址功能中找到为所有配置文件启用非永久性随机分配 MAC 地址的选项。

WLAN 非永久性随机分配 MAC 地址选项

图 2.WLAN 非永久性随机分配 MAC 地址选项。