Bluetooth LE の事前ペアリング

Windows 10 では、Bluetooth LE 周辺機器が製造過程ですべてプロビジョニングされ、有効にされていれば、それらの機器を 1 台の PC に対して自動的にペアリングすることができます。 ホスト PC とバンドル デバイスの両方に一度電源が投入された後は、LE デバイスのペアリングと接続をユーザーが管理する必要はありません。 しかも、これらの周辺機器は通常の Bluetooth デバイスとして使用できるので、ホスト PC の圏外に移動した場合でも、すべての機能が利用できます。 ただし、ペアリングが解除された周辺機器がホスト PC の圏内に移動すると、それらは再び自動的にペアリングされて接続されます。

この機能をサポートする LE 周辺機器は初回電源投入時に、Microsoft によって定義された独自技術のデータを、接続要求可能な無向のアドバタイズメントで送出します。 そのアドバタイズメントは、その後ホスト PC によって検出されます。 デバイスが圏内に存在し、そのアドバタイズメントが、ホスト PC 内に製造過程で事前プロビジョニングされたパターンと一致した場合に、デバイスはペアリングされます。 これは、個別のシークレット OOB キーを使用するアウトオブバンド ペアリングを通じて行われます。この OOB キーも、やはり事前にプロビジョニングされます。 周辺機器がペアリングできるホスト PC との距離は、さらに別の事前プロビジョニングされた最小 RSSI 値 (dB 単位) によって決まるため、一定ではありません。 クリーン インストール時とシステムの復元時にこの機能を維持するには、事前プロビジョニングされるすべてのデータが UEFI に格納されている必要があります。

RSSI 値によって定義された圏内でバンドル デバイスのペアリングを解除しても、Bluetooth デバイスによって自動的に Windows との再ペアリングが行われます。 他の Bluetooth 対応 PC に対してデバイスをペアリングするためには、ユーザーがホスト PC の圏外に移動しなければなりません。

これらのデバイスの製造方法は OEM が独自に決める必要があります。 また、セキュリティも OEM が請け負い、顧客に出荷する際には、それらがすべて同梱されていることを保証する必要があります。

機能要件

PC

周辺

  • Bluetooth LE
  • デバイス ID (Bluetooth アドレスからハッシュされる) と TK 値の格納
  • カスタム アドバタイズメント (以下で定義)

Pre-pairing flow

ホスト PC 上の UEFI

この機能は UEFI を利用して、ペアリング プロセスに必要な情報を格納します。 したがって、システム回復時やクリーン インストール時にも、この機能が失われることはありません。 定義した UEFI 変数は、読み取り専用としてロックする必要があります。

自動ペアリングをサポートするデバイスごとに、ホスト PC の NVRAM に次の OOB 情報をプログラムしてください。

  • RSSI しきい値: 周辺機器が "ホスト PC の圏外" となる距離のしきい値を dB 単位で定義します。
    • ペアリングが実行される最小信号強度として設定します。
    • 適切なしきい値を OEM が定義する必要があります。
  • デバイス ID: サポート対象デバイスを一意に識別します。デバイスの競合を防ぐために、長さは 8 バイトとしてください。
    • Bluetooth MAC アドレスと同等の一意性が必要です。
    • デバイス ID プロファイルには関連しません。 あくまで一意の周辺機器を表す目的で使用されます。
    • OOB キー: ホスト PC と BTH LE デバイスとの間で 16 バイトの SMP TK 値が共有されます。

      Note

      デバイスごと、少なくてもバンドルごとにデバイス ID が一意でなければ、複数のデバイスが圏内に存在した場合に互いに競合が生じます。 意図しない PC に対して周辺機器がペアリングされてしまいます。

OOB 情報の擬似コード表現

const unsigned long BTH_LE_DEVICE_ID_SIZE = 8;
#pragma pack(push,1)
typedef struct
{
    CHAR  RssiThreshold;
    UCHAR DeviceId[BTHLE_PREPAIRING_DEVICE_ID_SIZE];
    UCHAR SmpTK[16]; // TK Max Size
} BTHLE_PREPAIRING_ENTRY;
#pragma pack(pop)

パブリック UEFI NVRAM インターフェイス定義

static const LPWSTR BTH_LE_PREPAIRING_NVRAM_VAR_NAME = L"BluetoothPairingInfo";
static const LPWSTR BTH_LE_PREPAIRING_NVRAM_VAR_GUID = L"{3C901928-0243-4778-8ADC-BC2D3C6E6B0E}";
セクションの種類 [1 バイト] 製造元 [2 バイト] MsftSectionType [4 バイト] デバイス識別子 [8 バイト]
0xff (ベンダー固有) 0x0006 (MSFT) 0x00000004 (事前ペアリング) <デバイス ID>

セキュリティに関する注意事項

製造過程

プロビジョニング データが流出すると中間者攻撃につながります。 OEM の責任の下、データを安全に保管してください。

顧客がデバイスを購入した後

UEFI に格納されている値が読み取られ、別のデバイスでなりすまされるおそれがあります。 悪意のあるユーザーにシステムへのアクセスを許してしまう可能性があります。 その可能性を軽減するために、Microsoft では、MDM ポリシー Bluetooth/AllowPrepairing も作成しています。 このポリシーにより、Enterprise や Pro のデプロイでこの機能を無効にすることができます。