概述
随着隐私保护要求的不断提高,Android 系统引入了随机 MAC 地址功能,目的是防止利用设备固定的硬件 MAC 地址跟踪用户位置和行为。最初在 Android 8.0 中,随机 MAC 地址主要用于在未连接网络时扫描附近的无线网络;而从 Android 10 起,系统默认在客户端模式、软 AP(热点)以及 Wi-Fi Direct 中启用随机 MAC 地址。随机 MAC 地址技术通过改变设备在连接网络时所使用的地址,从而降低被恶意追踪的风险,同时兼顾了网络连接的稳定性和设备认证需求。
系统架构与工作流程
Android 随机 MAC 地址功能的实现涉及三个主要层次:
-
Android 框架层
框架层负责根据系统配置、隐私策略和网络配置生成符合标准的随机 MAC 地址。生成的随机地址需要满足以下条件:-
地址为 48 位,通常以 12 个十六进制字符表示。
-
设置“局部管理”(Locally Administered)的位为 1,表示该地址由软件生成而非全球唯一的硬件地址。
-
保证单播(unicast)特性,即多播位设置为 0。
-
-
硬件抽象层(HAL)
Android 提供了一系列 Wi‑Fi HAL 接口,用于在硬件和上层框架之间进行通信。具体到随机 MAC 地址功能,HAL 层主要定义了以下方法:-
IWifiStaIface#setMacAddress:该接口用于配置无线局域网接口的 MAC 地址。框架层生成随机 MAC 地址后,通过该接口下发给 Wi‑Fi 驱动。
-
IWifiStaIface#getFactoryMacAddress:通过该接口可以获取设备的出厂 MAC 地址(通常通过 ioctl 调用实现)。
-
ISupplicantP2pIface#setMacRandomization:用于设置 P2P 模式下是否启用 MAC 随机化。
在标准的 AOSP 实现中,框架层会调用 HAL 层的方法,将生成的随机 MAC 地址传递给硬件层进行设置(https://source.android.com/docs/core/connect/wifi-mac-randomization?hl=zh-cn)。
-
-
驱动及芯片固件层
Wi‑Fi 驱动负责将 HAL 下发的 MAC 地址写入到硬件中,使设备在连接网络时使用新地址。对于大多数设备,芯片厂商会在固件中提供相应支持,因此实际行为可能会受到具体芯片和驱动实现的影响,但标准流程是:由框架层生成随机地址 → 通过 HAL 层传递 → 驱动将地址设置到硬件接口上。
技术细节
随机 MAC 地址的生成
-
地址格式与规范
随机生成的 MAC 地址需要遵守 IEEE 802 标准,即 48 位地址,其中局部管理位(第 2 位)必须置 1,表明这是一个本地管理的地址,避免与全局唯一地址冲突;同时,最低有效位(多播/单播位)需保持为 0,确保地址为单播地址。 -
持久化与非持久化随机化
Android 框架支持两种随机化策略:-
持久随机化:默认情况下,系统会根据网络配置(如 SSID、网络安全类型或 FQDN)生成一个持久化的随机 MAC 地址,该地址在设备恢复出厂设置前保持不变。
-
非持久随机化:在 Android 12 及更高版本中,某些情况下(例如网络建议应用通过 API 指定)可以使用非持久随机化,即在每次连接时重新生成随机 MAC 地址。
-
系统调用流程
-
网络连接前的随机地址生成
当设备尝试连接一个 Wi‑Fi 网络时,Android 框架首先根据当前网络的相关配置生成一个符合规范的随机 MAC 地址。 -
调用 HAL 接口设置 MAC 地址
随机生成的 MAC 地址随后由框架层调用 HAL 层的 IWifiStaIface#setMacAddress 接口。该接口内部通常实现了先将接口下线,再设置新地址,最后重新启用接口的流程,以确保新地址能正确生效。 -
驱动和固件的执行
HAL 层将设置命令传递给底层 Wi‑Fi 驱动,驱动将新地址写入无线芯片中。芯片固件随后根据新地址参与网络连接、数据传输等过程。
实现与厂商定制
虽然 AOSP 提供了标准的实现流程,但具体的实现细节可能会因硬件平台、芯片固件和厂商定制而有所不同。例如:
-
某些设备可能会在驱动层增加额外的随机化逻辑;
-
部分老旧设备在升级到 Android 10 后,可能需要通过设置特定的标志(如
WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION
)来启用或禁用随机 MAC 地址功能。
总结
Android 随机 MAC 地址功能通过上层框架生成随机地址,并借助 HAL 层接口将地址下发到驱动和芯片固件中,从而在网络连接时使用非全局唯一的地址以保护用户隐私。该功能不仅包括扫描阶段的随机化,还扩展到连接阶段,并支持持久化和非持久化两种模式。尽管具体实现可能会因硬件平台和厂商定制有所不同,但标准流程基本遵循上述架构。此技术有效降低了通过 MAC 地址跟踪用户的风险,同时为企业网络管理和用户隐私保护带来新的挑战和机遇。
参考:
Android 14 的 Wi-Fi 随机 MAC 地址功能:实现机制与技术解析_android 动态mac 地址-CSDN博客