다음을 통해 공유


Bluetooth LE 사전 페어링

Windows 10은 제조 과정에서 모든 디바이스가 프로비저닝되고 사용하도록 설정된 후 단일 PC에 자동으로 페어링되는 LE Bluetooth 주변 디바이스를 지원합니다. 사용자는 호스트 PC와 번들 디바이스 모두에 처음 전원이 공급된 후 LE 디바이스를 페어링 및 연결한 상태로 유지할 필요가 없습니다. 이러한 주변 디바이스는 여전히 일반 Bluetooth 디바이스로 사용할 수 있으며 호스트 PC의 범위를 벗어날 때 전체 기능을 유지합니다. 그러나 주변 디바이스가 페어링되지 않고 호스트 PC의 범위 내에 있는 경우 자동으로 다시 페어링되고 연결됩니다.

이 기능을 지원하는 LE 주변 디바이스는 처음으로 전원이 공급될 때 독점 Microsoft 정의 데이터를 방향 없는 연결 가능한 보급으로 보냅니다. 그 보급은 호스트 PC에 의해 선택됩니다. 디바이스가 범위 내에 있고 해당 보급이 제조 중에 호스트 PC에 미리 프로비저닝된 패턴과 일치하는 경우 디바이스가 페어링됩니다. 이는 또한 미리 프로비저닝된 별도의 비밀 OOB 키를 사용하는 대역 외 페어링을 통해 이루어집니다. 주변 디바이스가 페어링될 수 있는 호스트 PC로부터의 거리는 dB로 표시되는 미리 프로비저닝된 다른 최소 RSSI 값에 의해 결정되므로 범위가 다를 수 있습니다. 새로 설치 및 시스템 복원 시 이 기능을 유지하려면 미리 프로비저닝된 모든 데이터를 UEFI에 저장해야 합니다.

번들 디바이스가 RSSI 값으로 정의된 범위 내에서 페어링 해제되면 Bluetooth 디바이스는 자동으로 Windows에 다시 페어링됩니다. 사용자는 자신의 디바이스를 다른 Bluetooth 지원 PC와 페어링할 수 있도록 호스트 PC의 범위를 벗어나야 합니다.

OEM은 이러한 디바이스를 제조하는 방법을 스스로 결정해야 합니다. 또한 보안을 보장해야 하며 고객에게 배송될 때 모두 같은 상자에 들어 있어야 합니다.

기능 요구 사항

PC

주변 장치

  • Bluetooth LE
  • 디바이스 ID(Bluetooth 주소에서 해시됨) 및 TK 값에 대한 저장소
  • 사용자 지정 보급(아래에 정의됨)

Pre-pairing flow

호스트 PC의 UEFI

이 기능은 UEFI에서 페어링 프로세스를 지원하기 위한 정보 저장에 따라 다릅니다. 이 기능을 사용하면 시스템 복구 및 새로 설치 시 이 기능을 유지할 수 있습니다. UEFI 변수를 정의한 후에는 읽기 전용으로 잠가야 합니다.

자동 페어링을 지원하는 각 디바이스에 대해 호스트 PC는 다음 OOB 정보를 NVRAM에 프로그래밍해야 합니다.

  • RSSI 임계값: 주변 디바이스가 "호스트 PC의 범위를 벗어난" 경우에 대한 거리 임계값을 dB로 정의합니다.
    • 페어링이 발생하기 전에 최소 신호 강도로 설정
    • OEM은 적절한 임계값을 정의해야 합니다.
  • DeviceID: 지원 디바이스를 고유하게 식별하며 디바이스 충돌을 피하기 위해 길이가 8바이트여야 합니다.
    • Bluetooth 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 bytes] 디바이스 식별자 [8바이트]
0xff(공급업체별) 0x0006(MSFT) 0x00000004(미리 페어링 중) 디바이스 식별자

보안 고려 사항

제조 중

프로비저닝 데이터를 얻을 경우 중간자 공격의 가능성이 있습니다. 데이터를 안전하게 유지하는 것은 OEM에 달려 있습니다.

고객이 디바이스를 구매한 후

UEFI에 저장된 값을 읽은 다음 다른 디바이스에서 스푸핑할 수 있습니다. 이렇게 하면 악의적인 사용자가 시스템에 액세스할 수 있습니다. 이를 완화하기 위해 MDM 정책 Bluetooth/AllowPrepairing도 만들었습니다. 이 정책을 사용하면 엔터프라이즈 및 프로 배포에서 이 기능을 사용하지 않도록 설정할 수 있습니다.