蓝牙 LE 预配对

在制造过程中预配并启用了所有设备后,Windows 10 支持 LE 蓝牙外设自动配对到单一 PC。 首次给主机 PC 和捆绑设备供电后,用户无需保持 LE 设备配对并连接。 这些外设仍可用作普通蓝牙设备,并可在超出主机的范围时维持完整的功能。 但是,如果外设未配对且在主机 PC 范围内,它们将自动重新配对并连接。

当支持此功能的 LE 外设首次供电时,它会在一个无向可连接播发中发送出专有的 Microsoft 定义数据。 然后,该播发被主机 PC 选取。 如果设备处于范围内并且其播发与制造期间主机 PC 中预配的模式匹配,则设备可配对。 这是通过带外配对的,使用同样是预配的单独机密 OOB 密钥。 外设可以配对的主机 PC 距离由另一个预配的最小 RSSI 值(以 dB 表示)确定,因此范围可能会有所不同。 所有预配的数据都必须存储在 UEFI 中,以便在全新安装和系统还原时保留此功能。

如果捆绑设备在 RSSI 值定义的范围内未配对,蓝牙设备将自动重新配对到 Windows。 用户必须离开主机 PC 的范围,才能将其设备与其他已启用蓝牙的 PC 配对。

OEM 必须自行确定如何制造这些设备。 这些设备还必须保证安全性,并且在给客户发货时都将放在同一个箱子中。

功能要求

PC

外设

  • 蓝牙 LE
  • 用于设备 ID 的存储(通过蓝牙地址进行哈希处理)& TK 值
  • 自定义播发(定义如下)

Pre-pairing flow

主机 PC 上的 UEFI

此功能依赖于存储信息以帮助 UEFI 中的配对过程。 该功能允许在系统恢复和全新安装时保留此功能。 定义 UEFI 变量后,必须将其锁定为只读。

对于支持自动配对的每个设备,主机 PC 应将以下 OOB 信息编写在其 NVRAM 中:

  • RSSI 阈值:定义外围设备“超出主机电脑范围”时的距离阈值(以 dB 为单位)
    • 设置为在配对发生之前的最小信号强度
    • OEM 必须定义适当的阈值
  • DeviceID:唯一标识支持设备,长度应为 8 个字节,以避免设备冲突。
    • 必须和蓝牙 Mac 地址同等唯一
    • 与设备 ID 配置文件无关。 仅用于表示唯一外设。
    • OOB 密钥:16 字节 SMP TK 值在主机 PC 与 BTH LE 设备之间共享。

      注意

      如果设备 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(预配对) 设备标识符

安全问题

制造过程中

如果获得了预配数据,则可能会受到中间人攻击。 数据的安全取决于 OEM。

客户购买设备后

存储在 UEFI 中的值可能会被读取,然后在另一台设备上欺骗。 这会向恶意用户授予对系统的访问权限。 为了缓解这种情况,我们还创建了 MDM 策略 Bluetooth/AllowPrepairing。 此策略将允许企业和专业部署禁用此功能。