| <html devsite><head> |
| |
| <meta name="book_path" value="/_book.yaml"/> |
| |
| <meta name="project_path" value="/_project.yaml"/> |
| </head> |
| <body> |
| |
| <!-- |
| Copyright 2018 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <h1 id="privacy_mac_randomization" class="page-title">隐私:随机选择 MAC 地址</h1> |
| |
| <p>从 Android 8.0 开始,Android 设备在未连接到网络的情况下探测新网络时会使用随机 MAC 地址。</p> |
| |
| <p>在 Android 9 中,您可以启用开发者选项(默认处于<strong>停用</strong>状态),使设备在连接到 WLAN 网络时使用随机选择的 MAC 地址。系统会对每个 SSID 使用随机选择的 MAC 地址。</p> |
| |
| <p>随机选择 MAC 地址可防止监听器使用 MAC 地址来生成设备活动的历史记录,从而加强对用户隐私的保护。</p> |
| |
| <p>此外,随机选择 MAC 地址也是 <a href="/devices/tech/connect/wifi-aware">WLAN 感知</a>和 <a href="/devices/tech/connect/wifi-rtt">WLAN RTT</a> 操作的一部分。</p> |
| |
| <h2 id="implementation">实现</h2> |
| |
| <p>要在设备上实现随机选择 MAC 地址,请执行以下操作:</p> |
| |
| <ol> |
| <li><p>与 WLAN 芯片供应商合作实现 <code>IWifiStaIface.setMacAddress()</code> HAL 方法。</p> |
| |
| <ul> |
| <li>AOSP 参考实现会关闭接口、更改 MAC 地址并备份接口。这种参考实现行为可能不适用于某些芯片供应商。</li> |
| </ul></li> |
| <li><p>在“设置”<code>config.xml</code> 中,将 <a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/res/values/config.xml#46" class="external"><code>config_wifi_support_connected_mac_randomization</code></a> 设置为 <strong>true</strong>(该步骤可在设备自定义叠层中完成)。</p> |
| |
| <ul> |
| <li>此标记用于控制参考“设置”实现的开发者选项中是否显示“连接时随机选择 MAC 网址”切换开关。<em></em>如果设置为 <strong>true</strong>,则显示该切换开关;如果设置为 <strong>false</strong>,则不显示该切换开关。</li> |
| </ul></li> |
| <li><p>使用<a href="#validation">验证</a>中所述的方法测试实现。</p></li> |
| </ol> |
| |
| <p>系统界面必须:</p> |
| |
| <ul> |
| <li>在开发者菜单中有一项可启用或停用该功能的设置。</li> |
| <li>如果启用了随机选择 MAC 地址功能,则在系统显示 WLAN 接口 MAC 地址时显示生成的随机 MAC 地址。</li> |
| </ul> |
| |
| <p>使用设置界面的<a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/development/WifiConnectedMacRandomizationPreferenceController.java" class="external">参考实现</a>来实现新提示。</p> |
| |
| <h2 id="validation">验证</h2> |
| |
| <p>要验证该功能是否如期正常运行,请同时运行集成测试 (ACTS) 和手动测试。</p> |
| |
| <p>要运行集成测试,请使用位于 <code>tools/test/connectivity/acts/tests/google/wifi</code> 中的 ACTS 文件 <code>WifiConnectedMacRandomizationTest.py</code>,验证设备是否使用随机选择的 MAC 地址,以及是否正确存储为每个网络随机选择的 MAC 地址。</p> |
| |
| <p>要运行手动测试,请执行以下操作:</p> |
| |
| <ol> |
| <li>开启该功能并验证设备是否能够连接到 WLAN 网络。</li> |
| <li>验证 WLAN 设置中显示的 MAC 地址是否与设备正在使用的 MAC 地址(通过 ifconfig 确定)相符。</li> |
| <li>执行数据包捕获来验证设备是否使用随机选择的 MAC 地址(而非出厂 MAC 地址)。</li> |
| <li>检查设备是否会在连接到同一网络时使用同一 MAC 地址,验证设备是否存储了基于网络随机选择的 MAC 地址。</li> |
| <li>验证忘记网络并重新连接到同一 SSID 后是否会生成新的随机 MAC 地址。</li> |
| </ol> |
| |
| <p>在连接到网络时,您可能会遇到长达 3 秒的延迟,这是因为只要设置了新的 MAC 地址,系统就会清除扫描结果。在连接到网络并验证互联网连接时,也可能会出现其他延迟。</p> |
| |
| <p>如果 WLAN 驱动程序或固件未正确同步 MAC 地址状态与主机内核,则互联网连接检查将会失败。如果出现这种情况,请咨询您的芯片合作伙伴,确保驱动程序或固件已根据新的 MAC 地址进行了相应更新。</p> |
| |
| </body></html> |