MAC アドレス ランダム化の実装

Android 8.0 以降が搭載されている Android デバイスは、ネットワークに関連付けられていない場合、新しいネットワークを探索する際にランダムな MAC アドレスを使用します。Android 9 では、開発者向けオプションを有効にして、Wi-Fi ネットワークへの接続時にデバイスがランダムな MAC アドレスを使用できるようにすることができます(デフォルトでは無効になっています)。

Android 10 ではクライアント モード、SoftAP、Wi-Fi Direct に対してデフォルトで MAC アドレスのランダム化が有効になっています。

MAC アドレスのランダム化により、リスナーは MAC アドレスを使用してデバイスのアクティビティの履歴を作成することができないため、ユーザーのプライバシーが向上します。

また、MAC アドレスは Wi-Fi AwareWi-Fi RTT オペレーションの一部としてランダム化されます。

詳細については、MAC アドレス ランダム化の動作をご覧ください。

実装

MAC アドレスのランダム化をデバイスに実装する手順は次のとおりです。

  1. Wi-Fi チップベンダーと連携して、次の HAL メソッドを実装します。

    • IWifiStaIface#setMacAddress: インターフェースの MAC アドレスを構成します。デフォルトの実装ではインターフェースがダウンし、MAC アドレスが変更されてインターフェースが再起動します。
    • IWifiStaIface#getFactoryMacAddress: ioctl 呼び出しを使用して wlan0 の出荷時 MAC アドレスを取得します。
    • ISupplicantP2pIface#setMacRandomization: サプリカントで P2P MAC アドレスのランダム化をオンまたはオフに設定します。
  2. config.xml の設定内で config_wifi_connected_mac_randomization_supportedtrue に設定します(デバイスのカスタム オーバーレイで行うことができます)。

    • このフラグは、クライアント モードの MAC アドレスのランダム化を有効にするかどうかを制御するために使用します。
  3. config.xml の設定内で config_wifi_p2p_mac_randomization_supportedtrue に設定します(デバイスのカスタム オーバーレイで行うことができます)。

    • このフラグは、Wi-Fi Direct の MAC アドレスのランダム化を有効にするかどうかを制御するために使用します。
  4. 検証で説明されている方法で実装をテストします。

システム UI には次の条件が必要です。

  • SSID ごとにランダム化を有効または無効にできる。
  • 新しく追加されたすべてのネットワークで MAC アドレスのランダム化をデフォルトで有効にする。

新しいプロンプトを実装するには、設定 UI のリファレンス実装を使用します。

Android 9 以前を搭載しているデバイスは、Wi-Fi MAC アドレスのランダム化をサポートしていない可能性があります。こうしたデバイスを Android 10 にアップグレードする場合、Wi-Fi ベンダー HAL の make ファイルで WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION フラグを true に設定すると、Wi-Fi MAC アドレスのランダム化機能を無効にできます。

検証

機能が意図したとおりに動作することを確認するには、統合テスト(ACTS)と手動テストの両方を実行します。

統合テストを実行するには、tools/test/connectivity/acts_tests/tests/google/wifi にある ACTS ファイル WifiMacRandomizationTest.py を使用します。デバイスがランダム化された MAC アドレスを使用して、ネットワークごとにランダム化された MAC アドレスを正しく格納していることを確認できます。

手動テストを実行するには:

  1. MAC アドレスのランダム化がデバイスで有効になっていることを確認します(デバイス オーバーレイで config_wifi_connected_mac_randomization_supportedtrue に設定されていることを確認します)。
  2. Wi-Fi ネットワークに接続します。
  3. ネットワークをタップして、[ネットワークの詳細] ページに移動します。MAC アドレスのランダム化がオンになっていることを確認します。表示された MAC アドレスが、ローカルで生成されたビットが 1 に、マルチキャスト ビットが 0 に設定されたランダムな MAC アドレスであることを確認します。
  4. MAC アドレスのランダム化をオフにします。同じネットワークに接続し、出荷時 MAC アドレスが使用されていることを確認します。
  5. [ネットワークの詳細] ページで [削除] をタップしてネットワークを削除します。
  6. 同じネットワークに接続し、同じランダム化された MAC アドレスが使用されていることを確認します。

Android 10 以降にアップグレードする Android 10 より前のデバイス(MAC アドレスのランダム化をサポートしているデバイス)で、MAC アドレスのランダム化をテストする手順は次のとおりです。

  1. Android 9 以前を搭載したデバイスで、ネットワークを 1 つ以上保存します。
  2. Android 10 のシステム イメージをフラッシュします。
  3. Wi-Fi 選択ツールで、保存されているすべてのネットワークで MAC アドレスのランダム化がオフになっていることを確認します。
  4. MAC アドレスのランダム化をオンにします。同じネットワークに接続し、ランダム化された MAC アドレスが使用されていることを確認します。