MAC ランダム化機能を使用すると、デバイスは Wi-Fi ネットワークへの接続時に、ランダム化された MAC アドレスを使用できます。実装手順については、MAC ランダム化の実装をご覧ください。このページでは、Android における MAC ランダム化の動作について説明します。
デバイスは、Wi-Fi ネットワークまたはアクセス ポイントへの接続時に、MAC アドレスを使用します。これらの MAC アドレスは暗号化されずに送信されるため、キャプチャされてユーザーの位置情報のトラッキングに使用される可能性があります。従来、デバイスは Wi-Fi ネットワークへの関連付けを行う際に、出荷時 MAC アドレスを使用していました。出荷時 MAC アドレスはグローバルに一意であり、かつ静的であるため、デバイスをトラッキングして個別に識別することが可能です。
MAC ランダム化機能を使用すると、Wi-Fi ネットワークへの接続時にランダム化された MAC アドレスが使用されるため、ユーザーのプライバシーが強化されます。
MAC アドレスの長さは 48 ビットで、通常は 12 個の 16 進数(各オクテットが 8 ビットであるため 6 オクテット)で表されます(例: 00:11:22:AA:BB:CC
)。MAC ランダム化機能は、ローカル管理ビットを 1 に設定し、ユニキャスト ビットを 0 に設定して、アドレスをランダム化します。他の 46 ビットはランダム化されます。
Android 10 以降を搭載したデバイスの場合、デフォルトではフレームワークはランダム化された MAC アドレスを使用します。図 1 に示すように、ユーザーは [設定] の [ネットワークの詳細] 画面のオプションを使用して、個々のネットワークに対して MAC ランダム化を有効または無効にできます。ユーザーがネットワークに対して MAC ランダム化を無効にすると、フレームワークは出荷時 MAC アドレス(グローバルに一意のアドレス)を使用します。
図 1. MAC ランダム化のオプション
MAC ランダム化の種類
Android フレームワークは、2 種類の MAC ランダム化(永続的ランダム化と非永続的ランダム化)を使用します。ユーザーが MAC ランダム化を無効にすると、出荷時 MAC アドレスが使用されます。
Android は、デバイスが Wi-Fi ネットワークへの関連付けを行う際に、どちらの種類の MAC ランダム化を使用するかを決定します。デフォルトでは、Android は永続的ランダム化を使用します。Android 12 以降、Android は次の場合に非永続的ランダム化を使用します。
- ネットワーク候補アプリは、
WifiNetworkSuggestion.Builder#setMacRandomizationSetting
API を介して、ネットワークで非永続的ランダム化を使用することを指定します。 - ネットワークはキャプティブ ポータルを検出していないオープン ネットワークであり、
config_wifiAllowEnhancedMacRandomizationOnOpenSsids
オーバーレイはtrue
に設定されています。このオーバーレイはデフォルトで無効になっています(false
に設定されています)。
永続的ランダム化
MAC ランダム化機能が有効になっている場合、Android はデフォルトで永続的ランダム化を使用します。Android は、SSID、セキュリティ タイプ、FQDN(Passpoint ネットワークの場合)などのネットワーク プロファイルのパラメータに基づいて、永続的にランダム化された MAC アドレスを生成します。この MAC アドレスは、出荷時の設定にリセットするまで変更されません。ユーザーが Wi-Fi ネットワークを削除して再度追加しても、MAC アドレスはネットワーク プロファイルのパラメータに依存するため、再ランダム化されません。
永続的な MAC アドレスは、ネットワークがユーザーに有用な機能を提供するために MAC アドレスの永続性に依存する場合に必要です。たとえば、デバイスを記憶して、想定されるログイン画面の迂回をユーザーに許可する場合や、保護者による使用制限を有効にする場合があります。
Android 10 および 11 では、MAC ランダム化が有効になっている場合、フレームワークはすべてのネットワークに対して永続的ランダム化を使用します。
非永続的ランダム化
Android 12 以降で一部のネットワークに対して使用される非永続的ランダム化では、接続を開始するたびに Wi-Fi モジュールが MAC アドレスを再ランダム化するか、フレームワークが既存のランダム化された MAC アドレスを使用してネットワークに接続します。Wi-Fi モジュールは、次の場合に MAC アドレスを再ランダム化します。
- デバイスが最後にこのネットワークから切断されてから DHCP リース期間が満了し、4 時間を超えている。
- ネットワーク プロファイルに対する現在のランダム化された MAC アドレスが生成されてから 24 時間を超えている。MAC アドレスの再ランダム化は、新しい接続を開始するときにだけ行われます。MAC アドレスを再ランダム化する目的で Wi-Fi が積極的に切断されることはありません。
上記のいずれにも該当しない場合、フレームワークは前回ランダム化された MAC アドレスを使用してネットワークに接続します。
非永続的ランダム化の開発者向けオプション
Android 11 以上を搭載したデバイスの場合、ユーザーは開発者向けオプション画面を使用して、すべての(MAC ランダム化が有効になっている)Wi-Fi ネットワークに対して、非永続的な MAC ランダム化をグローバルで有効にできます。すべてのプロファイルに対して非永続的な MAC ランダム化を有効にするオプションは、[設定] > [開発者向けオプション] > [Wi-Fi 非永続的 MAC ランダム化] にあります。
図 2. [Wi-Fi 非永続的 MAC ランダム化] オプション