BLEアドレスで存在しないビットパターンをまとめた

  • BLE
  • Bluetooth

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

BLEのアドレス(6バイト48ビット)は基本16進数の並びだけど、仕様上「存在しない(生成されない)」ビットパターンがいくつかある。整理してみた。

前提

BLEアドレスはPublicとRandomの2系統。禁止パターンがあるのはRandom系のみで、Publicアドレス(IEEE管理のOUI)には規則的な禁止パターンはない。

Randomアドレスは先頭の上位2ビットで3つのサブタイプに分かれる。

  • 11 → Static Random Address
  • 10 → Resolvable Private Address(内部的にはprandの上位2ビットが01固定、little-endian表記だと10になる)
  • 00 → Non-Resolvable Private Address

存在しないパターン

残りのビットが全部1、または全部0になるパターンは禁止。

これがStatic Random、Resolvable Private(のprand部分)、Non-Resolvable Privateの3つ全部に共通するルール。

  • Static Random Address(上位2ビット11):残り46ビットがオール1・オール0はNG。つまりFF:FF:FF:FF:FF:FFと、上位2ビットだけ11で残りが全部0のパターン(C0:00:00:00:00:00)は存在しない。
  • Non-Resolvable Private Address(上位2ビット00):同様に残り46ビットのオール1・オール0がNG。00:00:00:00:00:00と、上位2ビットのみ00で残りが全部1のパターン(3F:FF:FF:FF:FF:FF)は存在しない。
  • Resolvable Private Address:24ビットのprandのうち上位2ビットは固定、残り22ビットは乱数だけどオール1・オール0はNG。ただし下位24ビットはhash値(IRKとprandから計算される値)なので、prand側の禁止と違って全体のアドレスパターンとして単純に列挙できるものではない。

まとめ

  • 禁止されているのは「Random系アドレスのランダム部分がオール1またはオール0になるケース」だけ
  • FF:FF:FF:FF:FF:FFと00:00:00:00:00:00は、どのRandomサブタイプとしても生成され得ない完全な無効パターン
  • Publicアドレスにはこの手の禁止パターンは存在しない