隐私:随机选择 MAC 地址

从 Android 8.0 开始,Android 设备在未连接到网络的情况下探测新网络时会使用随机 MAC 地址。

在 Android 9 中,您可以启用开发者选项(默认处于停用状态),使设备在连接到 WLAN 网络时使用随机选择的 MAC 地址。系统会对每个 SSID 使用随机选择的 MAC 地址。

随机选择 MAC 地址可防止监听器使用 MAC 地址来生成设备活动的历史记录,从而加强对用户隐私的保护。

此外,随机选择 MAC 地址也是 WLAN 感知WLAN RTT 操作的一部分。

实现

要在设备上实现随机选择 MAC 地址,请执行以下操作:

  1. 与 WLAN 芯片供应商合作实现 IWifiStaIface.setMacAddress() HAL 方法。

    • AOSP 参考实现会关闭接口、更改 MAC 地址并备份接口。这种参考实现行为可能不适用于某些芯片供应商。
  2. 在“设置”config.xml 中,将 config_wifi_support_connected_mac_randomization 设置为 true(该步骤可在设备自定义叠层中完成)。

    • 此标记用于控制参考“设置”实现的开发者选项中是否显示“连接时随机选择 MAC 网址”切换开关。如果设置为 true,则显示该切换开关;如果设置为 false,则不显示该切换开关。
  3. 使用验证中所述的方法测试实现。

系统界面必须:

  • 在开发者菜单中有一项可启用或停用该功能的设置。
  • 如果启用了随机选择 MAC 地址功能,则在系统显示 WLAN 接口 MAC 地址时显示生成的随机 MAC 地址。

使用设置界面的参考实现来实现新提示。

验证

要验证该功能是否如期正常运行,请同时运行集成测试 (ACTS) 和手动测试。

要运行集成测试,请使用位于 tools/test/connectivity/acts/tests/google/wifi 中的 ACTS 文件 WifiConnectedMacRandomizationTest.py,验证设备是否使用随机选择的 MAC 地址,以及是否正确存储为每个网络随机选择的 MAC 地址。

要运行手动测试,请执行以下操作:

  1. 开启该功能并验证设备是否能够连接到 WLAN 网络。
  2. 验证 WLAN 设置中显示的 MAC 地址是否与设备正在使用的 MAC 地址(通过 ifconfig 确定)相符。
  3. 执行数据包捕获来验证设备是否使用随机选择的 MAC 地址(而非出厂 MAC 地址)。
  4. 检查设备是否会在连接到同一网络时使用同一 MAC 地址,验证设备是否存储了基于网络随机选择的 MAC 地址。
  5. 验证忘记网络并重新连接到同一 SSID 后是否会生成新的随机 MAC 地址。

在连接到网络时,您可能会遇到长达 3 秒的延迟,这是因为只要设置了新的 MAC 地址,系统就会清除扫描结果。在连接到网络并验证互联网连接时,也可能会出现其他延迟。

如果 WLAN 驱动程序或固件未正确同步 MAC 地址状态与主机内核,则互联网连接检查将会失败。如果出现这种情况,请咨询您的芯片合作伙伴,确保驱动程序或固件已根据新的 MAC 地址进行了相应更新。