v1.3
내 기기 허브 네트워크 (FHN) 액세서리 사양은 비콘을 전송하는 저전력 블루투스 (BLE) 기기를 추적하기 위한 엔드 투 엔드 암호화 방식을 정의합니다. 이 페이지에서는 빠른 페어링 사양의 확장 프로그램으로 FHN을 설명합니다. FHN과 호환되고 이러한 기기의 위치 추적을 사용 설정하려는 기기가 있는 경우 제공업체는 이 확장 프로그램을 사용 설정해야 합니다.
GATT 사양
다음 시맨틱스를 사용하여 일반 속성 (GATT) 특성을 빠른 페어링 서비스에 추가해야 합니다.
| 빠른 페어링 서비스 특성 | 암호화됨 | 권한 | UUID |
|---|---|---|---|
| 비콘 작업 | 아니요 | 읽기, 쓰기, 알림 | FE2C1238-8366-4814-8EB0-01DE32100BEA |
표 1: FHN의 빠른 페어링 서비스 특성
인증
이 확장 프로그램에 필요한 작업은 챌린지-응답 메커니즘으로 보호되는 쓰기 작업으로 실행됩니다. 작업을 수행하기 전에 시커는 표 1의 특성에서 읽기 작업을 실행해야 합니다. 그러면 버퍼가 다음 형식으로 생성됩니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 프로토콜 주 버전 번호 | 0x01 |
| 1 ~ 8 | 바이트 배열 | 일회성 무작위 nonce | 다름 |
각 읽기 작업은 다른 nonce를 생성해야 하며 단일 nonce는 단일 작업에만 유효해야 합니다. 작업이 실패한 경우에도 nonce는 무효화되어야 합니다.
그런 다음 Seeker는 후속 쓰기 요청에 사용될 일회성 인증 키를 계산합니다. 인증 키는 표 2~5에 설명된 대로 계산됩니다. 요청된 작업에 따라 시커는 다음 키 중 하나 이상의 지식을 증명합니다.
계정 키: 빠른 페어링 사양에 정의된 16바이트 빠른 페어링 계정 키입니다.
소유자 계정 키: 탐색기가 비콘 작업 특성에 처음 액세스할 때 제공자가 기존 계정 키 중 하나를 소유자 계정 키로 선택합니다. 선택한 소유자 계정 키는 제공업체가 초기화될 때까지 변경할 수 없습니다. 공급자는 무료 계정 키 슬롯이 소진될 때 소유자 계정 키를 삭제해서는 안 됩니다.
처음 페어링할 때 FHN을 이미 지원하는 제공업체 (또는 초기화 후 페어링할 때 지원)는 첫 번째 계정 키를 선택합니다. 이는 탐색기가 페어링 중에 프로비저닝 상태를 읽을 때 기존 계정 키가 하나만 있기 때문입니다.
이미 페어링된 후 FHN 지원을 받는 제공자 (예: 펌웨어 업데이트를 통해)는 기존 계정 키를 선택할 수 있습니다. 업데이트를 실행한 사용자가 공급자의 현재 소유자라고 가정하면 펌웨어 업데이트 후 비콘 작업 특성에서 프로비저닝 상태를 읽는 데 사용되는 첫 번째 계정 키를 선택하는 것이 합리적입니다.
임시 ID 키 (EIK): FHN 프로비저닝 프로세스를 실행할 때 탐색기에서 무작위로 선택한 32바이트 키입니다. 이 키는 위치 보고서를 엔드 투 엔드 암호화하는 데 사용되는 암호화 키를 파생하는 데 사용됩니다. Seeker는 백엔드에 이를 공개하지 않습니다.
복구 키:
SHA256(ephemeral identity key || 0x01)로 정의되며 처음 8바이트로 잘립니다. 키는 백엔드에 저장되며 사용자가 기기에서 버튼을 눌러 동의를 표현하는 경우 시커가 이를 사용하여 EIK를 복구할 수 있습니다.링 키:
SHA256(ephemeral identity key || 0x02)로 정의되며 처음 8바이트로 잘립니다. 키는 백엔드에 저장되며 탐색기는 이 키를 사용하여 기기를 울리는 데만 사용할 수 있습니다.원치 않는 추적 보호 키:
SHA256(ephemeral identity key || 0x03)로 정의되며 처음 8바이트로 잘립니다. 키는 백엔드에 저장되며 탐색기는 이 키를 사용하여 원치 않는 추적 방지 모드를 활성화할 수만 있습니다.
작업
특성에 기록된 데이터의 형식은 표 2~5에 나와 있습니다. 각 작업은 이 섹션의 뒷부분에서 자세히 설명합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID |
|
| 1 | uint8 | 데이터 길이 | 다름 |
| 2~9 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(account key, protocol major version number || the last nonce
read from the characteristic || data ID || data length || additional data)의 처음 8바이트 |
| 10 - var | 바이트 배열 | 추가 데이터 |
|
표 2: 비콘 프로비저닝 요청
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x04: 사용자 동의로 임시 ID 키 읽기 |
| 1 | uint8 | 데이터 길이 | 0x08 |
| 2~9 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(recovery key, protocol major version number || the last nonce
read from the characteristic || data ID || data length)의 처음 8바이트 |
표 3: 비콘 프로비저닝 키 복구 요청
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID |
|
| 1 | uint8 | 데이터 길이 | 다름 |
| 2~9 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(ring key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data)의 처음 8바이트 |
| 10 - var | 바이트 배열 | 추가 데이터 |
|
표 4: 벨소리 요청
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID |
|
| 1 | uint8 | 데이터 길이 | 다름 |
| 2~9 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(unwanted tracking protection key, protocol major version number
|| the last nonce read from the characteristic || data ID || data length ||
additional data)의 처음 8바이트 |
| 10 - var | 바이트 배열 | 추가 데이터 |
|
표 5: 원치 않는 추적 방지 요청
쓰기가 성공하면 표 6에 나열된 알림이 트리거됩니다.
0x05: 벨소리 상태 변경 이외의 데이터 ID가 있는 알림은 알림을 트리거하는 쓰기 트랜잭션이 완료되기 전에, 즉 쓰기 요청의 응답 PDU가 전송되기 전에 전송해야 합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID |
|
| 1 | uint8 | 데이터 길이 | 다름 |
| 2~9 | 바이트 배열 | 인증 | 작업별 세부정보 |
| 10 - var | 바이트 배열 | 추가 데이터 |
|
표 6: 비콘 서비스 응답
표 7에는 작업에서 반환될 수 있는 GATT 오류 코드가 나열되어 있습니다.
| 코드 | 설명 | 참고 |
|---|---|---|
| 0x80 | 인증되지 않음 | 인증이 실패한 경우 (이전 nonce가 사용된 경우 포함) 쓰기 요청에 대한 응답으로 반환됩니다. |
| 0x81 | 값이 올바르지 않습니다. | 잘못된 값이 제공되거나 수신된 데이터의 바이트 수가 예상과 다른 경우 반환됩니다. |
| 0x82 | 사용자 동의 없음 | 기기가 페어링 모드가 아닐 때 데이터 ID 0x04: 사용자 동의로 임시 ID 키 읽기가 있는 쓰기 요청에 대한 응답으로 반환됩니다. |
표 7: GATT 오류 코드
비콘의 매개변수 읽기
탐색기는 데이터 ID가 0x00인 표 2의 요청으로 구성된 특성에 쓰기 작업을 실행하여 비콘의 매개변수를 제공자에게 쿼리할 수 있습니다. 제공된 일회성 인증 키가 기기에 저장된 계정 키와 일치하는지 제공자가 확인합니다.
인증에 실패하면 제공업체는 인증되지 않은 오류를 반환합니다.
성공하면 공급자는 데이터 ID가 0x00인 표 6의 응답으로 알립니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 보정된 파워 | 0m에서 수신된 보정된 전력입니다 (범위 [-100, 20]의 값). 1dBm 해상도의 부호 있는 정수로 표현됩니다. |
| 1~4명 | uint32 | 시계 값 | 현재 시계 값(초)(빅엔디언) |
| 5 | uint8 | 곡선 선택 | 암호화에 사용되는 타원 곡선입니다.
|
| 6 | uint8 | 구성요소 | 벨소리를 울릴 수 있는 구성요소의 수:
|
| 7 | uint8 | 벨소리 기능 | 지원되는 옵션은 다음과 같습니다.
|
| 8~15 | 바이트 배열 | 패딩 | AES 암호화의 제로 패딩입니다. |
데이터는 요청을 인증하는 데 사용되는 계정 키로 AES-ECB-128 암호화되어야 합니다.
인증 세그먼트는 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data after
encryption || 0x01)의 처음 8바이트로 정의됩니다.
비콘의 프로비저닝 상태를 읽습니다.
탐색기는 데이터 ID가 0x01인 표 2의 요청으로 구성된 특성에 쓰기 작업을 실행하여 비콘의 프로비저닝 상태를 공급자에게 쿼리할 수 있습니다. 제공된 일회성 인증 키가 기기에 저장된 계정 키와 일치하는지 공급자가 확인합니다.
인증에 실패하면 제공업체는 인증되지 않은 오류를 반환합니다.
성공하면 공급자는 데이터 ID 0x01이 있는 표 6의 응답으로 알립니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 프로비저닝 상태 | 다음 값을 갖는 비트 마스크입니다.
|
| 1~20 또는 32 | 바이트 배열 | 현재 임시 식별자 | 비콘에서 광고하는 현재 임시 ID를 나타내는 20바이트 또는 32바이트(사용되는 암호화 방법에 따라 다름)입니다(기기에 설정된 경우). |
인증 세그먼트는 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)의 처음 8바이트로 정의됩니다.
임시 ID 키 설정
프로비저닝되지 않은 제공자를 FHN 비콘으로 프로비저닝하거나 이미 프로비저닝된 제공자의 임시 ID 키를 변경하려면 탐색기가 데이터 ID가 0x02인 표 2의 요청으로 구성된 특성에 쓰기 작업을 실행합니다. 제공업체는 다음 사항을 확인합니다.
- 제공된 일회성 인증 키가 소유자 계정 키와 일치합니다.
- 임시 ID 키의 해시가 제공된 경우 해시된 임시 ID 키가 현재 임시 ID 키와 일치합니다.
- 임시 ID 키의 해시가 제공되지 않은 경우 제공자가 이미 FHN 비콘으로 프로비저닝되지 않았는지 확인합니다.
인증에 실패하면 제공업체는 인증되지 않은 오류를 반환합니다.
성공하면 일치하는 계정 키를 사용하여 AES-ECB-128로 복호화하여 임시 ID 키가 복구됩니다. 키는 기기에 유지되어야 하며 이 시점부터 제공자는 FHN 프레임 광고를 시작해야 합니다. 새 임시 ID 키는 BLE 연결이 종료된 후 즉시 적용됩니다. 공급자는 데이터 ID가 0x02인 표 6의 응답으로 알립니다.
인증 세그먼트는 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01)의 처음 8바이트로 정의됩니다.
임시 ID 키 지우기
공급자의 비콘 부분을 프로비저닝 해제하려면 탐색기가 데이터 ID 0x03이 있는 표 2의 요청으로 구성된 특성에 쓰기 작업을 실행합니다. 제공업체는 다음 사항을 확인합니다.
- 제공된 일회성 인증 키가 소유자 계정 키와 일치합니다.
- 해시된 임시 ID 키가 현재 임시 ID 키와 일치합니다.
제공자가 FHN 비콘으로 프로비저닝되지 않았거나 인증에 실패하면 인증되지 않은 오류가 반환됩니다.
성공하면 제공업체는 키를 잊고 FHN 프레임 광고를 중지합니다.
공급자는 데이터 ID가 0x03인 표 6의 응답으로 알립니다.
인증 세그먼트는 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01)의 처음 8바이트로 정의됩니다.
사용자 동의를 통해 임시 ID 키 읽기
이 옵션은 손실된 키를 복구하는 데만 사용할 수 있습니다. 키는 Seeker에 의해 로컬로만 저장되기 때문입니다. 따라서 이 기능은 기기가 페어링 모드에 있거나 기기에서 물리적 버튼을 누른 후 (사용자 동의를 구성함) 제한된 시간 동안만 사용할 수 있습니다.
시커는 일반 텍스트 키를 복구할 수 있도록 백엔드에 복구 키를 저장해야 하지만 EIK 자체는 저장하지 않습니다.
EIK를 읽기 위해 탐색기는 데이터 ID가 0x04인 표 3의 요청으로 구성된 특성에 쓰기 작업을 실행합니다. 제공업체는 다음을 확인합니다.
- 해싱된 복구 키가 예상 복구 키와 일치합니다.
- 기기가 EIK 복구 모드에 있습니다.
인증에 실패하면 제공업체는 인증되지 않은 오류를 반환합니다.
기기가 페어링 모드가 아닌 경우 공급자는 사용자 동의 없음 오류를 반환합니다.
성공하면 공급자는 데이터 ID 0x04가 있는 표 6의 응답으로 알립니다.
인증 세그먼트는 HMAC-SHA256(recovery key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)의 처음 8바이트로 정의됩니다.
벨소리 울림 작업
탐색기는 데이터 ID가 0x05인 표 4의 요청으로 구성된 특성에 쓰기 작업을 실행하여 제공자에게 소리를 재생하도록 요청할 수 있습니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 벨소리 울림 작업 | 다음 값을 갖는 비트 마스크입니다.
|
| 1 - 2 | uint16 | 시간 초과 | 제한 시간(데시초)입니다. 0이 아니어야 하며 10분에 해당하는 값보다 커서는 안 됩니다. 제공자는 이 값을 사용하여 자동으로 소리가 꺼지기 전에 벨소리가 울려야 하는 시간을 결정합니다. 기기의 구성요소가 이미 울리고 있는 경우 제한 시간이 이미 적용된 제한 시간을 재정의합니다. 벨 울림 작업이 0x00으로 설정된 경우 제한 시간이 무시됩니다. |
| 3 | uint8 | 볼륨 |
|
요청을 받은 공급자는 다음을 확인합니다.
- 제공된 일회성 인증 키가 벨 키와 일치합니다.
- 요청된 상태가 벨소리를 울릴 수 있는 구성요소와 일치합니다.
제공자가 FHN 비콘으로 프로비저닝되지 않았거나 인증에 실패하면 인증되지 않은 오류가 반환됩니다. 하지만 원치 않는 추적 보호가 활성화되어 있고 원치 않는 추적 보호 요청을 트리거할 때 벨소리 인증 건너뛰기 플래그가 사용 설정되어 있다면 제공자는 해당 확인을 건너뛰어야 합니다. 인증 데이터는 여전히 Seeker가 제공해야 하지만 임의의 값으로 설정할 수 있습니다.
벨소리가 시작되거나 종료되면 데이터 ID가 0x05인 알림이 표 6에 표시된 대로 전송됩니다. 알림의 내용은 다음과 같이 정의됩니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 벨 울림 상태 |
|
| 1 | uint8 | 벨소리 구성요소 | 요청에 정의된 대로 적극적으로 울리는 구성요소의 비트 마스크입니다. |
| 2~3개 | uint16 | 시간 초과 | 벨소리가 울리는 데 남은 시간(데시초)입니다. 기기의 벨소리가 중지된 경우 0x0000이 반환되어야 합니다. |
인증 세그먼트는 HMAC-SHA256(ring key, protocol major version number || the nonce used to
initiate the ringing command || data ID || data length || additional data ||
0x01)의 처음 8바이트로 정의됩니다.
벨소리 울림 또는 벨소리 울림 중지 요청이 수신될 때 기기가 이미 요청된 벨소리 울림 상태에 있으면 제공자는 벨소리 울림 상태 또는 각각 0x00: 시작됨 또는 0x04: 중지됨 (GATT 요청)으로 알림을 전송해야 합니다. 이 요청은 기존 상태의 매개변수를 재정의하여 벨소리 울림 시간을 연장할 수 있습니다.
제공업체에 물리적 버튼이 있거나 터치 감지가 사용 설정된 경우 벨소리가 울리는 동안 버튼을 누르면 벨소리 기능이 중지되어야 합니다.
비콘의 울림 상태 가져오기
비콘의 울림 상태를 가져오기 위해 탐색기는 데이터 ID가 0x06인 표 4의 요청으로 구성된 특성에 쓰기 작업을 실행합니다. 제공된 일회성 인증 키가 벨소리 키와 일치하는지 공급자가 확인합니다.
제공자가 FHN 비콘으로 프로비저닝되지 않았거나 인증에 실패하면 제공자는 인증되지 않은 오류를 반환합니다.
성공하면 공급자는 데이터 ID 0x06이 있는 표 6의 응답으로 알립니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 벨소리 구성요소 | 벨소리 요청에 정의된 대로 적극적으로 벨소리를 울리는 구성요소입니다. |
| 1 - 2 | uint16 | 시간 초과 | 벨소리가 울리는 데 남은 시간(데시초)입니다. 기기가 울리지 않으면 0x0000이 반환되어야 합니다. |
인증 세그먼트는 HMAC-SHA256 (ring key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)의 처음 8바이트로 정의됩니다.
원치 않는 추적 방지 모드
원치 않는 추적 보호 모드는 클라이언트가 서버 통신 없이 악용 기기를 식별할 수 있도록 설계되었습니다. 기본적으로 제공자는 ID 순환에 설명된 대로 모든 식별자를 순환해야 합니다. 내 기기 허브 서비스는 내 기기 허브 네트워크를 통해 원치 않는 추적 보호 모드 활성화 요청을 중계할 수 있습니다. 이렇게 하면 서비스에서 제공자가 고정된 MAC 주소를 일시적으로 사용하도록 하여 클라이언트가 기기를 감지하고 사용자에게 원치 않는 추적 가능성을 경고할 수 있습니다.
비콘의 원치 않는 추적 보호 모드를 활성화하거나 비활성화하기 위해 탐색기는 각각 데이터 ID가 0x07 또는 0x08인 표 5의 요청으로 구성된 특성에 쓰기 작업을 실행합니다.
원치 않는 추적 방지 모드를 사용 설정하는 경우
제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 제어 플래그 |
플래그는 원치 않는 추적 방지 모드가 비활성화될 때까지만 적용됩니다. |
제공된 일회성 인증 키가 원치 않는 추적 보호 키와 일치하는지 제공업체가 확인합니다. 공급자가 FHN 비콘으로 프로비저닝되지 않았거나 확인이 실패하면 인증되지 않은 오류가 반환됩니다.
원치 않는 추적 방지 모드가 활성화되면 비콘은 MAC 비공개 주소 순환 빈도를 24시간에 한 번으로 줄여야 합니다. 광고된 임시 식별자는 평소와 같이 계속 순환해야 합니다. 프레임 유형은 0x41로 설정해야 합니다. 상태는 해시된 플래그 섹션에도 반영됩니다.
원치 않는 추적 방지 모드를 사용 중지하는 경우
제공업체는 다음 사항을 확인합니다.
- 제공된 일회성 인증 키가 원치 않는 추적 방지 키와 일치합니다.
- 해시된 임시 ID 키가 현재 임시 ID 키와 일치합니다.
제공자가 FHN 비콘으로 프로비저닝되지 않았거나 확인이 실패하면 제공자는 인증되지 않은 오류를 반환합니다.
원치 않는 추적 보호 모드가 비활성화되면 비콘은 임시 식별자 회전과 동기화되어 정상적인 속도로 MAC 주소를 다시 회전하기 시작해야 합니다. 프레임 유형은 0x40으로 다시 설정해야 합니다. 상태는 해시된 플래그 섹션에도 반영됩니다.
성공하면 공급자는 데이터 ID 0x07 또는 0x08이 있는 표 6의 응답으로 알립니다.
인증 세그먼트는 HMAC-SHA256(unwanted tracking protection key, protocol major version number ||
the last nonce read from the characteristic || data ID || data length ||
0x01)의 처음 8바이트로 정의됩니다.
정밀 찾기
이 섹션에서는 정밀한 위치 찾기에 필요한 흐름과 추가 작업을 자세히 설명합니다. GATT 사양 섹션에 정의된 GATT 특성 및 인증에 관한 동일한 규칙이 여기에 적용됩니다. 정밀한 위치 찾기는 선택사항입니다.
정밀 위치 찾기 유형은 정밀 위치 찾기에 참여하는 기기에서 지원되는 범위 지정 기술 유형에 따라 다릅니다. 지원되는 범위 지정 기술은 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 나와 있습니다. 이후 섹션에서는 사용된 거리 측정 기술을 기반으로 예상되는 정밀 찾기 환경을 살펴봅니다.
정밀 찾기 흐름
이 섹션에서는 정밀 찾기를 위한 FHNA 메시지 흐름을 살펴봅니다. 그림 1은 메시지 흐름을 보여주고 단락은 각 메시지를 자세히 설명합니다.

그림 1. 일반적인 정밀도 찾기 메시지 흐름
시작 기기는 내 기기 허브 앱이 있고 정밀 찾기 기능이 사용 설정된 기기입니다. 이니시에이터는 다른 기기를 찾으려고 하는 기기입니다.
응답자 기기는 이니시에이터 기기에서 찾으려고 하는 기기입니다.
이니시에이터 기기는 레인징 기능 요청 메시지를 리스폰더 기기에 전송합니다. 여기에는 리스폰더 기기로부터 알아보고 싶은 레인징 기술이 나열됩니다. 응답자 기기는 지원되는 거리 측정 기술과 그 기능에 관한 정보가 포함된 거리 측정 기능 응답 알림으로 다시 응답합니다. 응답자에는 요청자가 요청한 정보만 포함됩니다. 기능 목록은 응답기 기기가 선호하는 범위 지정 기술의 우선순위에 따라 정렬되며 목록의 첫 번째 항목이 우선순위가 가장 높습니다.
그러면 이니시에이터 기기는 범위 지정 구성 메시지를 후속으로 전송하여 범위 지정에 사용할 각 범위 지정 기술의 구성을 정의합니다. 이 메시지를 수신하면 응답자 기기는 제공된 구성을 사용하여 해당 기술의 범위 측정을 시작해야 합니다. 응답기 기기는 각 개별 범위 지정 기술이 성공적으로 시작되었는지 여부의 결과를 포함하는 범위 지정 구성 응답 알림을 다시 전송합니다. 일부 범위 지정 기술은 범위 지정 세션을 성공적으로 진행하려면 이니시에이터와 응답자 기기 모두에서 시작해야 하지만, 다른 기술의 경우 이니시에이터 기기에서만 시작하면 됩니다. 하지만 응답자 기기는 이러한 기술에 대해 성공 결과를 다시 응답해야 합니다. 특정 범위 지정 기술 동작에 관한 자세한 내용은 이후 섹션을 참고하세요.
시작 기기가 정밀 탐색 세션을 중지할 준비가 되면 응답자에게 범위 지정 중지를 나타내는 범위 지정 중지 메시지를 전송하여 어떤 범위 지정 기술이 범위 지정을 중지해야 하는지 나타냅니다. Responder 기기는 요청된 범위 지정 기술을 사용한 범위 지정이 성공적으로 중지되었음을 나타내는 범위 지정 중지 응답 알림으로 응답합니다.
FHNA BLE GATT 통신 채널이 정밀 찾기 세션 중에 연결이 끊어졌지만 일부 범위 지정 기술이 여전히 범위 지정 중인 경우 응답자 기기는 무기한 범위 지정이 되지 않도록 제한 시간 메커니즘을 구현합니다. 세부정보는 각 사용 사례에 따라 다릅니다.
응답자 기기는 작업 순서가 항상 동일하다고 가정해서는 안 됩니다. 예를 들어 응답기 기기는 연속된 여러 범위 지정 기능 요청 작업을 처리할 수 있어야 하며, 이전 기능 요청 없이 직접 범위 지정 구성 작업을 처리할 수도 있어야 합니다.
정밀 찾기 작업
표 8에서는 정밀 찾기에 필요한 이 문서에 정의된 FHNA 작업을 보여줍니다. 각 하위 섹션에서는 각 작업의 FHNA 메시지를 정의하고 추가 데이터 필드 콘텐츠는 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양을 참조합니다.
| 작업 | 데이터 ID | 설명 |
|---|---|---|
| 범위 지정 기능 요청 | 0x0A | 이니시에이터 기기에서 리스폰더 기기로 전송할 기능 요청 작업입니다. 이 작업의 데이터 콘텐츠에는 이니시에이터가 응답자 기기에서 알고 싶어 하는 모든 범위 지정 기술이 나열됩니다. |
| 범위 지정 기능 응답 | 0x0A | 범위 지정 기능 요청 작업에 대한 알림 응답입니다. 여기에는 지원되는 각 범위 지정 기술의 기능에 관한 정보가 포함되어 있으며, 이 정보는 이니시에이터가 요청한 것입니다. |
| 범위 지정 구성 | 0x0B | 범위 지정 구성 작업에는 이니시에이터 기기가 응답자 기기와 범위 지정을 시작하려는 범위 지정 기술의 구성이 포함됩니다. |
| 범위 지정 구성 응답 | 0x0B | 범위 지정 구성 작업에 대한 알림 응답입니다. 여기에는 제공된 구성을 기반으로 요청된 범위 지정 기술을 사용하여 응답자 기기가 범위 지정을 성공적으로 시작했는지에 관한 데이터가 포함됩니다. |
| RFU | 0x0C | 이 데이터 ID를 사용하는 작업은 사용되지 않으며 향후 사용을 위해 예약되어 있습니다. |
| 범위 지정 중지 | 0x0D | 이니시에이터 기기에서 전송한 범위 지정 중지 작업에는 응답자 기기가 범위 지정을 중지해야 하는 범위 지정 기술에 관한 정보가 포함됩니다. |
| 범위 지정 응답 중지 | 0x0D | 범위 지정 중지 작업에 대한 알림 응답입니다. 여기에는 특정 범위 지정 기술의 중지 작업이 성공했는지 여부에 관한 데이터가 포함됩니다. |
표 8: 정밀한 위치 찾기 작업
범위 지정 기능 요청 작업
표 9에서는 범위 지정 기능 요청 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0A - 범위 지정 기능 요청 작업 |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 주요 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이 || 추가 데이터)의 처음 8바이트입니다. |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 기능 요청 메시지 (헤더와 페이로드 모두) |
표 9: 범위 지정 기능 요청
Ranging Capability Response 작업
표 10에서는 범위 지정 기능 응답 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0A: Ranging Capability Response |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 주 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이 || 추가 데이터 || 0x01)의 처음 8바이트입니다. |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 기능 응답 메시지 (헤더와 페이로드 모두) |
표 10: 범위 지정 기능 응답
범위 지정 구성 작업
표 11에서는 범위 지정 구성 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0B - 범위 지정 구성 설정 |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 주요 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이 || 추가 데이터)의 처음 8바이트입니다. |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 구성 메시지 (헤더와 페이로드 모두) |
표 11: 범위 지정 구성
범위 지정 구성 응답 작업
표 12에서는 범위 지정 구성 응답 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0B - 범위 지정 구성 설정 응답 |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 주 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이 || 추가 데이터 || 0x01)의 처음 8바이트입니다. |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 구성 응답 메시지 (헤더와 페이로드 모두) |
표 12: 범위 지정 구성 응답
범위 지정 작업 중지
표 13에서는 범위 지정 중지 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0D - 범위 지정 중지 |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 메이저 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이)의 처음 8바이트 |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 중지 메시지 (헤더와 페이로드 모두) |
표 13: 범위 지정 중지
범위 지정 응답 작업 중지
표 14에서는 범위 지정 중지 응답 메시지를 정의합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 데이터 ID | 0x0D - 범위 지정 중지 응답 |
| 1 | uint8 | 데이터 길이 | 다양한 가격 |
| 2 | 바이트 배열 | 일회성 인증 키 | HMAC-SHA256(계정 키, 프로토콜 주 버전 번호 || 특성에서 읽은 마지막 nonce || 데이터 ID || 데이터 길이 || 추가 데이터 || 0x01)의 처음 8바이트입니다. |
| 10 | 바이트 배열 | 추가 데이터 | 범위 지정: 대역 외 메시지 시퀀스 및 페이로드 사양에 정의된 범위 지정 중지 응답 메시지 (헤더와 페이로드 모두) |
표 14: 범위 지정 중지 응답
정밀 찾기 기능으로 원치 않는 추적 방지
원치 않는 추적 방지 모드가 활성화되면 원치 않는 추적 방지 섹션에 설명된 대로 벨소리 메시지의 인증 확인을 건너뛰는 데 적용되는 동일한 흐름이 이 기능을 지원하려는 기기에 대해 이 문서에 정의된 모든 정밀 찾기 메시지에도 적용됩니다.
정밀 찾기를 위한 범위 지정 기술 세부정보
이 섹션에는 범위 지정 기술과 관련된 세부정보가 포함되어 있습니다.
초광대역 (UWB) 사양
UWB 관련 세부정보입니다.
정밀 찾기 수준
UWB를 거리 측정 기술로 사용하는 정밀 찾기 세션에서는 거리와 방향 정보를 모두 확인할 수 있습니다. 범위 지정 간격은 240ms 이상이어야 하며, 최적의 안내를 위해서는 96ms가 권장됩니다.
구성 ID
UWB를 위해 교환된 대역 외 구성 데이터에는 UWB 범위 세션을 시작하는 데 UWB가 필요로 하는 사용 가능한 구성 매개변수의 전체 집합이 포함되어 있지 않습니다. 일부 매개변수는 선택한 구성 ID에 의해 암시적으로 선택됩니다.
각 구성 ID는 공개적으로 문서화된 사전 정의된 UWB 구성 매개변수 집합입니다. 정밀 찾기 사용 사례의 경우 응답기 기기는 구성 ID 6을 지원해야 하고 선택적으로 구성 ID 3을 지원해야 합니다.
UWB 시작자 및 응답자
정밀 탐색 사용 사례의 경우 이 문서에서 시작 기기로 표시된 기기가 UWB 응답기가 되고 이 문서에서 응답 기기로 표시된 기기가 UWB 시작기가 됩니다. 이는 UWB 이니시에이터 기기가 UWB 응답기보다 전력을 적게 소비하기 때문이며, 대부분의 경우 응답기 기기는 배터리가 제한된 주변기기입니다.
즉, 응답자 기기는 범위 지정 기능 응답 메시지에서 UWB 시작자 역할을 지원한다고 표시해야 합니다.
기타 UWB 관련 매개변수
- 채널 9가 지원되어야 합니다.
- 최적의 안내를 위해 96ms 범위 지정 간격이 권장됩니다. 그렇지 않으면 240ms가 지원되어야 합니다.
- 배터리 절약에는 슬롯 지속 시간 1ms가 권장되지만 2ms도 지원됩니다.
- UWB 칩은 최소 FIRA v1.2 + P-STS를 준수해야 합니다.
- BPRF는 필수이고 HPRF는 권장되지만 선택사항입니다. 지원되거나 선택된 모드는 지원되거나 선택된 프리앰블 인덱스에 따라 결정됩니다.
- 세션 보안 유형: P-STS
BLE 채널 사운딩 (CS) 세부사항
BLE CS 관련 세부정보입니다.
정밀 찾기 수준
CS를 범위 지정 기술로 사용하는 정밀 찾기 세션은 거리만 측정하며 현재 방향은 제공되지 않습니다.
기기 간 결합 필요
기기가 결합되지 않은 경우 채널 사운딩을 사용하는 정밀 찾기 세션이 작동하지 않습니다. 시작 기기와 응답 기기 간의 기존 결합이 필요합니다. 이 사양은 기기 간 결합을 만드는 방법을 제공하지 않습니다. 대신 기기 간의 이러한 결합을 설정하는 것은 사용 사례 개발자의 몫입니다.
CS를 위해 응답자 측에서 취해야 할 조치
두 기기 모두 UWB 범위 지정 시작 및 범위 지정 중지 API를 명시적으로 호출해야 하는 UWB와 달리 CS의 경우 시작 기기만 블루투스 스택을 호출하여 CS 범위 지정을 시작하면 됩니다. 응답자 측의 나머지 초기화는 블루투스 (BT)를 사용하여 인밴드로 이루어집니다. 즉, CS의 범위 지정 구성 메시지나 범위 지정 중지 메시지를 수신하면 응답자 측에서는 BT가 사용 설정된 경우 범위 지정 구성 응답 메시지 알림으로 응답하는 것 외에는 아무것도 하지 않아도 됩니다. 응답기 기기는 이러한 메시지를 트리거로 사용하여 화면이 있는 UI를 업데이트하거나 화면이 있는지와 관계없이 기기 상태에 관한 시각적 피드백(예: 기기 LED 깜박임)에 사용할 수 있습니다.
Wi-Fi NAN RTT
Wi-Fi NAN RTT 관련 세부정보입니다.
정밀 찾기 수준
범위 지정 기술로 Wi-Fi NAN RTT를 사용하는 정밀 찾기 세션은 거리만 측정하며 현재 방향은 제공되지 않습니다.
BLE RSSI
BLE RSSI 세부정보입니다.
정밀 찾기 수준
범위 지정 기술로 BLE RSSI만 사용하는 정밀 찾기 세션은 BLE RSSI가 정확한 범위 지정 기술이 아니기 때문에 거리 또는 방향 정보를 가져올 수 없습니다. 대신 기기가 가까이 있거나 멀리 있음을 나타내는 안내가 사용자에게 표시됩니다.
공지된 프레임
프로비저닝 후 제공자는 2초마다 한 번 이상 FHN 프레임을 광고해야 합니다. 빠른 페어링 프레임이 광고되는 경우 공급자는 일반 빠른 페어링 광고 내에 FHN 프레임을 인터리브해야 합니다. 예를 들어 2초마다 제공자는 7개의 빠른 페어링 광고와 1개의 FHN 광고를 공지해야 합니다.
FHN 광고의 전도 블루투스 전송 전력은 0dBm 이상으로 설정해야 합니다.
FHN 프레임은 크라우드소싱 네트워크에 기여하는 지원 클라이언트가 위치 보고서를 암호화하는 데 사용하는 공개 키를 전달합니다. 타원 곡선 키에는 두 가지 유형이 있습니다. 기존 BLE 4 프레임에 적합한 160비트 키와 확장된 광고 기능이 있는 BLE 5가 필요한 256비트 키입니다. 사용되는 곡선은 제공업체의 구현에 따라 결정됩니다.
FHN 프레임은 다음과 같이 구성됩니다.
| 옥텟 | 값 | 설명 |
|---|---|---|
| 0 | 0x02 | 길이 |
| 1 | 0x01 | 플래그 데이터 유형 값 |
| 2 | 0x06 | 플래그 데이터 |
| 3 | 0x18 또는 0x19 | 길이 |
| 4 | 0x16 | 서비스 데이터 데이터 유형 값 |
| 5 | 0xAA | 16비트 서비스 UUID |
| 6 | 0xFE | ... |
| 7 | 0x40 또는 0x41 | 원치 않는 추적 방지 모드 표시가 있는 FHN 프레임 유형 |
| 8..27 | 20바이트 임시 식별자 | |
| 28 | 해시 처리된 플래그 |
표 15: 160비트 곡선을 지원하는 FHN 프레임
표 16에서는 256비트 곡선의 바이트 오프셋과 값을 보여줍니다.
| 옥텟 | 값 | 설명 |
|---|---|---|
| 0 | 0x02 | 길이 |
| 1 | 0x01 | 플래그 데이터 유형 값 |
| 2 | 0x06 | 플래그 데이터 |
| 3 | 0x24 또는 0x25 | 길이 |
| 4 | 0x16 | 서비스 데이터 데이터 유형 값 |
| 5 | 0xAA | 16비트 서비스 UUID |
| 6 | 0xFE | ... |
| 7 | 0x40 또는 0x41 | 원치 않는 추적 방지 모드 표시가 있는 FHN 프레임 유형 |
| 8..39 | 32바이트 임시 식별자 | |
| 40 | 해시 처리된 플래그 |
표 16: 256비트 곡선을 지원하는 FHN 프레임
임시 식별자 (EID) 계산
무작위는 임시 ID 키로 다음 데이터 구조를 AES-ECB-256으로 암호화하여 생성됩니다.
| 옥텟 | 필드 | 설명 |
|---|---|---|
| 0~10 | 패딩 | 값 = 0xFF |
| 11 | K | 순환 주기 지수 |
| 12~15명 | TS[0]...TS[3] | 비콘 시간 카운터(32비트 big-endian 형식) K개의 하위 비트가 삭제됩니다. |
| 16~26 | 패딩 | 값 = 0x00 |
| 27 | K | 순환 주기 지수 |
| 28 - 31 | TS[0]...TS[3] | 비콘 시간 카운터(32비트 big-endian 형식) K개의 하위 비트가 삭제됩니다. |
표 17: 의사 난수 구성
이 계산의 결과는 256비트 숫자이며 r'로 표시됩니다.
나머지 계산에서는 타원 곡선 암호화 작업에 SECP160R1 또는 SECP256R1가 사용됩니다. 다음에 참조되는 Fp, n, G를 정의하는
SEC 2: 권장되는 타원 곡선 도메인 매개변수의 곡선 정의를 참고하세요.
이제 r'은(는) r = r' mod n를 계산하여 유한 필드 Fp에 투영됩니다.
마지막으로 사용되는 공개 키를 나타내는 곡선의 점인 R = r * G를 계산합니다. 비콘은 R의 x 좌표인 Rx를 임시 식별자로 광고합니다.
해싱된 플래그
해시된 플래그 필드는 다음과 같이 계산됩니다 (비트는 최상위에서 최하위로 참조됨).
- 비트 0~4: 예약됨 (0으로 설정됨).
- 비트 5~6은 다음과 같이 기기의 배터리 수준을 나타냅니다.
- 00: 배터리 잔량 표시가 지원되지 않음
- 01: 정상 배터리 잔량
- 10: 배터리 수준이 낮음
- 11: 배터리 잔량이 매우 낮음 (곧 배터리 교체 필요)
- 비트 7은 비콘이 원치 않는 추적 보호 모드에 있으면 1로 설정되고, 그렇지 않으면 0으로 설정됩니다.
이 바이트의 최종 값을 생성하기 위해 SHA256(r)의 최하위 바이트와 xor됩니다.
r은 곡선의 크기에 맞춰야 합니다. 표현이 160 또는 256비트보다 짧은 경우 최상위 비트로 0을 추가하고, 표현이 160 또는 256비트보다 큰 경우 최상위 비트를 잘라야 합니다.
비콘이 배터리 잔량 표시를 지원하지 않고 원치 않는 추적 방지 모드가 아닌 경우 광고에서 이 바이트를 완전히 생략할 수 있습니다.
EID를 사용한 암호화
메시지 m를 암호화하기 위해 목격자 (비콘에서 Rx를 읽음)는 다음을 실행합니다.
- EID 계산 섹션에 정의된 대로
Fp에서 임의의 숫자s를 선택합니다. - 컴퓨팅
S = s * G - 곡선 방정식에 대입하고 가능한 결과에서 임의의
Ry값을 선택하여R = (Rx, Ry)를 계산합니다. (s * R)x이 곡선 곱셈 결과의x좌표인 256비트 AES 키k = HKDF-SHA256((s * R)x)를 계산합니다. 솔트가 지정되지 않았습니다.URx와LRx을 빅엔디언 형식의Rx의 상위 및 하위 80비트라고 하겠습니다. 마찬가지로S의USx및LSx를 정의합니다.- 컴퓨팅
nonce = LRx || LSx - 컴퓨팅
(m’, tag) = AES-EAX-256-ENC(k, nonce, m) - 신뢰할 수 없는 원격 서비스를 통해 소유자에게
(URx, Sx, m’, tag)를 전송합니다.
EID로 암호화된 값의 복호화
EIK와 순환 기간 지수를 보유한 소유자의 클라이언트는 다음과 같이 메시지를 복호화합니다.
URx가 주어지면URx의 기반이 되는 비콘 시간 카운터 값을 획득합니다. 이는 소유자의 클라이언트가 최근 과거 및 가까운 미래의 비콘 시간 카운터 값에 대한Rx값을 계산하여 수행할 수 있습니다.URx의 기준이 되는 비콘 시간 카운터 값을 고려하여 EID 계산 섹션에 정의된 대로r의 예상 값을 계산합니다.R = r * G를 계산하고 목격자가 제공한URx값과 일치하는지 확인합니다.- 곡선 방정식에 대입하고 가능한 결과에서 임의의
Sy값을 선택하여S = (Sx, Sy)를 계산합니다. (r * S)x이 곡선 곱셈 결과의x좌표인 경우k = HKDF-SHA256((r * S)x)를 계산합니다.- 컴퓨팅
nonce = LRx || LSx - 컴퓨팅
m = AES-EAX-256-DEC(k, nonce, m’, tag)
ID 순환
확인 가능한 (RPA) 또는 확인 불가능한 (NRPA) BLE 주소는 FHN 프레임을 광고하는 데 사용해야 합니다. RPA는 LE 오디오 (LEA) 기기에 필요하며, 본딩을 사용하지 않는 위치 추적기 태그를 제외한 다른 기기에는 권장됩니다.
빠른 페어링 광고, FHN 광고, 해당 BLE 주소는 동시에 순환해야 합니다. 회전은 평균 1024초마다 발생해야 합니다. 비콘이 새 식별자를 광고하기 시작하는 정확한 지점은 창 내에서 무작위로 지정해야 합니다.
순환 시간을 무작위로 지정하는 권장 방법은 무작위 지정이 적용되지 않은 경우 예상되는 다음 순환 시간에 1~204초 범위의 무작위 양수 시간 요소를 더하는 것입니다.
기기가 원치 않는 추적 방지 모드에 있는 경우 FHN 광고의 BLE 주소는 고정되어야 하지만 FP 검색 불가능 광고 (예: 빠른 페어링)의 RPA는 계속 순환해야 합니다. 프로토콜마다 다른 주소를 사용해도 됩니다.
전원 손실에서 복구
임시 식별자 해결은 광고 시점의 시계 값과 밀접하게 관련되어 있으므로 전원 손실이 있는 경우 제공자가 시계 값을 복구할 수 있는 것이 중요합니다. 공급자는 현재 시계 값을 하루에 한 번 이상 비휘발성 메모리에 써야 하며 부팅 시 공급자는 NVM을 확인하여 초기화할 값이 있는지 확인해야 합니다. 임시 식별자의 리졸버는 합리적인 시계 드리프트와 이러한 유형의 전원 손실 복구를 모두 허용할 수 있을 만큼 충분한 시간 범위에 걸쳐 해결을 구현합니다.
해결 시간 창이 제한되어 있으므로 제공자는 여전히 클럭 드리프트를 최소화하기 위해 모든 노력을 기울여야 합니다. 하나 이상의 추가 시계 동기화 방법을 구현해야 합니다 (검색 불가능한 빠른 페어링 프레임 광고 또는 메시지 스트림 구현).
빠른 페어링 구현 가이드라인
이 섹션에서는 FHN을 지원하는 제공업체에서 빠른 페어링 구현의 특별한 측면을 설명합니다.
위치 추적 태그 관련 가이드라인
- 제공자가 페어링되었지만 5분 이내에 FHN이 프로비저닝되지 않은 경우 (또는 기기가 페어링되었지만 FHN이 프로비저닝되지 않은 상태에서 OTA 업데이트가 적용된 경우) 제공자는 공장 구성으로 되돌아가 저장된 계정 키를 삭제해야 합니다.
- 제공자가 페어링된 후에는 FHN이 프로비저닝되거나 5분이 지날 때까지 MAC 주소를 변경해서는 안 됩니다.
- 임시 ID 키가 기기에서 삭제되면 기기는 초기화를 실행하고 저장된 계정 키도 삭제해야 합니다.
- 제공자는 일반 블루투스 페어링 시도를 거부하고 빠른 페어링만 수락해야 합니다.
- 제공자는 사용자가 기기를 초기화하지 않고 광고를 일시적으로 중지할 수 있는 메커니즘을 포함해야 합니다 (예: 버튼 조합 누르기).
- 전원이 손실된 후 기기는 다음 read beacon parameters 호출까지 검색 불가능한 빠른 페어링 프레임을 광고해야 합니다. 이렇게 하면 시계 드리프트가 심하게 발생하더라도 시커가 기기를 감지하고 시계를 동기화할 수 있습니다.
- 검색할 수 없는 빠른 페어링 프레임을 광고할 때는 UI 표시를 사용 설정하면 안 됩니다.
- 공개된 빠른 페어링 프레임은 공급자가 FHN용으로 프로비저닝되는 동안 광고되어서는 안 됩니다.
- 제공자는 인증되지 않은 방식으로 식별 정보 (예: 이름 또는 식별자)를 노출해서는 안 됩니다.
클래식 블루투스 기기별 가이드라인
이 섹션에서는 FHN을 지원하는 기존 블루투스 기기의 특별한 측면을 설명합니다.
이미 페어링된 기기의 FHN 프로비저닝
탐색기와 페어링할 때 항상 FHN용으로 프로비저닝되는 것은 아니지만 그 후에는 프로비저닝됩니다. 이 경우 제공자에게 GATT 연결을 설정하는 데 필요한 최신 BLE MAC 주소가 없을 수 있습니다. 공급자는 이미 페어링된 동안 탐색기가 BLE 주소를 가져오는 다음 방법 중 하나 이상을 지원해야 합니다.
- 제공자는 탐색기가 BLE 스캔을 통해 BLE 주소를 찾을 수 있도록 하는 빠른 페어링 계정 데이터를 주기적으로 광고할 수 있습니다.
이 방법은 메시지 스트림을 구현하지 않는 제공업체에 적합합니다. - 제공업체는 클래식 블루투스를 통해 빠른 페어링 메시지 스트림을 통해 이 데이터를 제공할 수 있습니다.
이 접근 방식은 블루투스를 통해 탐색기에 연결된 동안 빠른 페어링 프레임을 광고하지 않는 제공업체에 적합합니다.
두 접근 방식을 모두 지원하면 사용자가 FHN용 기기를 프로비저닝할 가능성이 높아집니다.
빠른 페어링 메시지 스트림
공급자는 빠른 페어링 메시지 스트림을 구현하고 이를 사용하여 탐색기에 기기 정보를 알릴 수 있습니다. 메시지 스트림을 구현하면 이 섹션에 설명된 특정 기능을 사용할 수 있습니다.
제공자는 메시지 스트림 RFCOMM 채널이 설정될 때마다 기기 정보 메시지를 한 번씩 전송해야 합니다.
펌웨어 버전 (기기 정보 코드 0x09) 및 추적 기능
펌웨어 업데이트로 공급자에 FHN 지원이 추가되면 연결된 시커가 사용자에게 이를 알리고 프로비저닝을 제안할 수 있습니다. 그렇지 않으면 사용자가 블루투스 기기 목록으로 수동으로 이동하여 FHN 프로비저닝을 시작해야 합니다.
이를 허용하려면 제공자는 펌웨어 버전 속성 (코드 0x09)을 사용하여 펌웨어 버전을 나타내는 문자열 값을 보고해야 합니다. 또한 공급자는 펌웨어 업데이트로 인한 기능 변경사항을 탐색기에 알리는 프로토콜을 지원해야 합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 기기 정보 이벤트 | 0x03 |
| 1 | uint8 | 펌웨어 버전 | 0x09 |
| 2~3개 | uint16 | 추가 데이터 길이 | 다름 |
| var | 바이트 배열 | 버전 문자열 | 다름 |
표 18: 기기 정보 이벤트: 업데이트된 펌웨어 버전
기능 업데이트 요청 (0x0601)을 수신하면 제공자가 FHN 추적 지원을 사용 설정한 경우 표 12와 같이 응답해야 합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 기기 기능 동기화 이벤트 | 0x06 |
| 1 | uint8 | FHN 추적 | 0x03 |
| 2~3개 | uint16 | 추가 데이터 길이 | 0x0007 |
| 4 | uint8 | FHN 프로비저닝 상태 | 프로비저닝되지 않은 경우 0x00, 계정에서 프로비저닝된 경우 0x01 |
| 5 - 10 | 바이트 배열 | 기기의 현재 BLE MAC 주소 | 다름 |
표 19: 기기 기능 동기화 이벤트: 추적 기능이 추가되었습니다.
현재 임시 식별자 (기기 정보 코드 0x0B)
제공자는 현재 임시 식별자 (코드 0x0B)를 사용하여 제공자가 FHN용으로 프로비저닝된 경우 현재 EID와 시계 값을 보고 시계 드리프트 (예: 배터리 소진으로 인해)가 발생한 경우 탐색기를 동기화할 수 있습니다. 그렇지 않으면 탐색기에서 이 목적으로 더 비싸고 신뢰성이 낮은 연결을 시작합니다.
| 옥텟 | 데이터 유형 | 설명 | 값 |
|---|---|---|---|
| 0 | uint8 | 기기 정보 이벤트 | 0x03 |
| 1 | uint8 | 현재 임시 식별자 | 0x0B |
| 2~3개 | uint16 | 추가 데이터 길이 | 0x0018 또는 0x0024 |
| 4 - 7 | 바이트 배열 | 시계 값 | 예: 0x13F9EA80 |
| 8~19 또는 31 | 바이트 배열 | 현재 EID | 예: 0x1122334455667788990011223344556677889900 |
표 20: 기기 정보 이벤트: 시계 동기화
초기화
초기화를 지원하는 기기의 경우 초기화가 실행되면 제공자는 비콘 전송을 중지하고 소유자의 계정 키를 비롯한 임시 ID 키와 저장된 모든 계정 키를 삭제해야 합니다.
초기화 (수동 또는 프로그래매틱) 후에는 사용자가 기기를 삭제한 후 페어링 흐름이 즉시 시작되지 않도록 제공자가 바로 빠른 페어링 광고를 시작하면 안 됩니다.
원치 않는 추적 방지
인증된 FHN 기기는 원치 않는 위치 추적기 감지 (DULT)를 위한 교차 플랫폼 사양의 구현 버전 요구사항도 충족해야 합니다.
DULT 사양을 준수하기 위한 FHN 관련 가이드라인:
- FHN 호환 기기는 근처 기기 콘솔에 등록되어 있어야 하며 '허브 찾기' 기능이 활성화되어 있어야 합니다.
- 기기는 액세서리 정보 작업과 비소유자 제어를 비롯해 DULT 사양의 구현 버전에 정의된 액세서리 비소유자 서비스와 특성을 구현해야 합니다.
- DULT 사양에 정의된 하위 호환성 기간에는 이 문서에 정의된 광고 프레임이 변경되지 않습니다.
- 이 문서에 정의된 '원치 않는 추적 보호 모드'는 DULT 사양에 정의된 '분리된 상태'에 매핑됩니다.
- 액세서리 정보 명령 코드 구현 가이드라인:
- Get_Product_Data는 콘솔에서 제공한 모델 ID를 8바이트 요구사항에 맞게 0으로 패딩하여 반환해야 합니다. 예를 들어 모델 ID 0xFFFFFF는 0x0000000000FFFFFF로 반환됩니다.
- Get_Manufacturer_Name 및 Get_Model_Name은 콘솔에 제공된 값과 일치해야 합니다.
- 다른 카테고리가 기기 유형에 더 적합하지 않은 경우 Get_Accessory_Category는 일반적인 '위치 추적기' 값을 반환할 수 있습니다.
- Get_Accessory_Capabilities는 BLE 식별자 조회뿐만 아니라 벨소리 지원도 나타내야 합니다.
- Get_Network_ID는 Google의 식별자 (0x02)를 반환해야 합니다.
- Get_Identifier 명령 코드 구현 가이드라인:
- 이 작업은 사용자가 버튼 누르기 조합이 필요한 '식별' 모드를 활성화한 후 5분 동안만 유효한 응답을 반환해야 합니다. 시각적 또는 오디오 신호는 공급자가 해당 모드로 전환되었음을 사용자에게 나타내야 합니다. 해당 모드를 활성화하는 모델별 안내는 인증 요건으로 Google에 제공되어야 하며 안내 업데이트 또는 수정 최소 10일 전에 제공되어야 합니다.
- 응답은 현재 임시 식별자의 처음 10바이트와
HMAC-SHA256(recovery key, the truncated current ephemeral identifier)의 처음 8바이트로 구성됩니다.
- NFC를 통한 식별자 구현 가이드라인:
- URL로
find-my.googleapis.com/lookup을 사용합니다. e매개변수로는 Get_Identifier용으로 구성된 응답을 16진수로 인코딩하여 사용합니다.pid매개변수로는 Get_Product_Data에 맞게 구성된 응답을 16진수로 인코딩하여 사용합니다.
- URL로
- 기기에 소리 생성기가 포함되고 벨소리 기능을 지원해야 합니다. DULT 사양에 따라 소리 발생기는 ISO 532-1:2017에 정의된 대로 최소 60폰 피크 음량의 소리를 내야 합니다.
- Sound_Start 명령 코드 구현 가이드라인:
- 이 명령어는 사용 가능한 모든 구성요소에서 벨소리를 울려야 합니다.
- 지원되는 최대 볼륨을 사용해야 합니다.
- 벨소리의 권장 지속 시간은 12초입니다.
- 위치 추적기 태그에는 사용자가 기기를 초기화하지 않고도 광고를 일시적으로 중지할 수 있는 메커니즘이 포함되어야 합니다 (예: 버튼 조합 누르기).
- 사용 중지 안내는 공개적으로 제공되는 URL에 문서화되어야 하며 인증 요건으로 Google에 제공되어야 하고 안내 업데이트 또는 수정이 있기 최소 10일 전에 제공되어야 합니다.
- URL은 현지화를 지원해야 합니다. 클라이언트에 따라 언어가 쿼리 매개변수 ('hl=en')로 제공되거나 'accept-language' HTTP 헤더를 사용하여 제공됩니다.
전환 가능한 프로토콜 가이드라인
- 한 번에 하나의 프로토콜만 사용해야 합니다. 두 개 이상의 네트워크가 기기에서 동시에 작동할 수 없어야 합니다. 이 요구사항은 다양한 프로토콜 간에 민감한 사용자 데이터가 혼합되지 않도록 하는 데 필요합니다.
- 사용자가 다른 네트워크로 기기를 다시 설정할 수 있도록 하드 리셋 워크플로를 기기에 통합하는 것이 좋습니다.
- 기기를 네트워크로 업데이트하는 프로세스는 사용자 친화적이어야 하며 네트워크 간에 공정해야 합니다. 사용자는 네트워크 중 하나를 우선하지 않고 사용할 네트워크를 선택할 수 있어야 합니다. 이 흐름은 Google팀의 승인을 받아야 합니다.
펌웨어 업데이트
OTA 업데이트 프로세스와 배포는 파트너가 자체 모바일 또는 웹 앱 워크플로를 사용하여 관리해야 합니다.
빠른 페어링은 사용자에게 사용 가능한 OTA 업데이트를 알리는 알림을 전송하는 것을 지원합니다. 이 메커니즘을 사용하려면 다음 단계를 따르세요.
- 최신 펌웨어 버전은 Nearby Device Console에서 업데이트해야 합니다.
- 호환 앱은 근처 기기 콘솔에서 설정해야 합니다. 펌웨어 업데이트 인텐트를 지원해야 합니다.
- 제공자는 펌웨어 버전 GATT 특성을 구현해야 합니다.
추적을 방지하려면 펌웨어 버전 특성에 대한 액세스를 제한해야 합니다. 시커는 먼저 이 사양에 정의된 대로 프로비저닝 상태를 읽고 인증 키를 제공한 후에만 펌웨어 버전을 읽습니다. 이 작업은 동일한 연결을 통해 실행됩니다. 펌웨어 버전을 읽으려고 시도하고 제공자가 결합되지 않았거나 동일한 연결을 통해 인증된 작업이 성공적으로 완료되지 않은 경우 제공자는 인증되지 않은 오류를 반환해야 합니다.
호환성
내 기기 허브 네트워크를 사용하려면 위치 서비스 및 블루투스가 사용 설정되어 있어야 합니다. 이동통신 서비스 또는 인터넷 연결이 필요합니다. Android 9 이상에서 작동하며 특정 국가에서는 연령 요건을 충족하는 사용자를 대상으로 합니다.
변경 로그
| FHN 버전 | 날짜 | 댓글 |
|---|---|---|
| v1 | 사전 체험판을 위한 FHN 사양의 초기 출시 | |
| v1.1 | 2023년 2월 |
|
| v1.2 | 2023년 4월 |
|
| v1.3 | 2023년 12월 |
|