各プラットフォームにおけるMACアドレスランダム化の振る舞い

これを書いている時点では、コンシューマ向け機器としては、AndroidiOSWindowsにおいてMACアドレスのランダム化を利用できる。

では具体的に、MACアドレスをランダム化したらどのように振る舞うのか? 参考文書へのポインタと現時点での振る舞いの要約を書き残しておく。

Android

要約
  • Android 8以降では、端末がネットワークに関連付けられていない場合に、新しいネットワークを探索する時にランダムなMACアドレスが使用される。
  • Android 9では、開発者向けオプション経由で、Wi-Fi接続時にランダムなMACアドレスを使用することができる。
    • デフォルトでは、Wi-Fi接続時のMACアドレスランダム化は無効化されている。
  • Android 10以降では、Wi-Fi接続時のMACアドレスランダム化が有効化されている。
    • 接続先ネットワークごとに、個別にランダム化の有効/無効を切り替えることが可能。
  • AndroidMACアドレスランダム化の振る舞いは「永続的なランダム化」と「非永続的なランダム化」の2種類がある。
    • 永続的なランダム化
      1. ネットワークプロファイル(SSIDやセキュリティタイプ)ごとに、初回接続時にランダムなMACアドレスが生成される。
      2. 2回目以降の接続時には、初回に生成されたランダムなMACアドレスが使いまわされる。
      3. 端末を工場出荷状態にリセットすると、生成済みの「ランダムなMACアドレス」は削除される。
    • 非永続的なランダム化
      1. DHCPのリース期間が期限切れとなり、かつ端末が前回切断してから4時間以上経過した状態にて、切断したネットワークに再度接続する際に、ランダムなMACアドレスが生成し直される。
      2. 使用中の「ランダムなMACアドレス」が、生成されてから24時間以上経過した後に、当該ネットワークに再度接続する際に、ランダムなMACアドレスが生成し直される。
      3. 上記以外のケースでは、前回生成された「ランダムなMACアドレス」が使いまわされる。
  • Android 10では常に「永続的なランダム化」が使用される。
  • Android 11では、デフォルトでは「永続的なランダム化」が使用される。開発者向けオプション経由で、常に「非永続的なランダム化」を使用するように変更できる。
  • Android 12では、デフォルトでは、一部のネットワークにたいして「非永続的なランダム化」が使用されて、それ以外では「永続的なランダム化」が使用される。開発者向けオプション経由で、常に「非永続的なランダム化」を使用するように変更できる。
    • 「非永続的なランダム化」が使用される条件だが、公式文書を読んでもいまいちよく分からなかった……。

iOS

要約
  • 端末がネットワークに関連付けられていない場合に、新しいネットワークを探索する時にランダムなMACアドレスが使用される。
  • 端末がネットワークに関連付けられていないか、もしくは端末のプロセッサがスリープ状態の場合に、ePNOスキャン実行時にランダムなMACアドレスが使用される。
  • iOS 14・iPadOS 14・watchOS 7以降では、デフォルトではWi-Fi接続時にランダムなMACアドレスが使用される。
    • 接続先ネットワークごとに、個別にランダム化の有効/無効を切り替えることが可能。
  • Wi-Fi接続時のMACアドレスランダム化の振る舞い:
    1. Wi-Fiネットワークごとに、初回接続時にランダムなMACアドレスが生成される。
    2. 端末を工場出荷状態にリセットすると、生成済みの「ランダムなMACアドレス」は削除される。
    3. iOS 15・iPadOS 15・watchOS 8以降では:
      1. 端末が前回切断してから6週間以上経過した状態にて、切断したネットワークに再度接続する際に、ランダムなMACアドレスが生成し直される。
      2. 端末にてネットワークの設定を削除してから2週間以上経過した状態にて、当該ネットワークに再度接続する際に、ランダムなMACアドレスが生成し直される。

Windows

要約
  • Windows 10にて「ランダムなハードウェアアドレス」などの名称で導入されたようだが、どのバージョンからなのかは不明。割と初期のころから導入済みだったようだが……。
  • 振る舞いとしては「オフ・オン・毎日変更する」の3種類を選択できる。
    • 「オフ」は文字通り「ランダムなハードウェアアドレスを使わない≒デバイスMACアドレスを使用する」ということだと思われる。
    • 「オン」や「毎日変更する」の振る舞いがよく分からない。
    • わざわざ「毎日変更する」を用意しているということは、「オン」はAndroidでいう「永続的なランダム化」みたいな振る舞いだと思うのだが、どうなのだろうか? 仮にそうだったとして、一度生成された「ランダムなMACアドレス」が削除されるパスは存在するのだろうか?
    • 「毎日変更する」にしても、律儀に「24時間経過したらMACアドレスを再生成してネットワークに再接続」みたいなことはしない気がする*1のだけど、実際にはどんな感じだろうか?
参考文書

なし。MACアドレスランダム化の挙動についてまとまった公式の文書が見つからない……。

まとめ

AndroidiOSも、徐々に「ランダムなMACアドレスを生成し直す」方向に向かっているようだ。

それはそうとして、MicrosoftMACアドレスランダム化の具体的な挙動について情報を公開してほしい(すでに公開しているなら、もうちょっと分かりやすいところに置いてくれないだろうか)。

*1:なぜならWi-Fi接続が一時的に切れることになるから。