내 기기 허브 네트워크 액세서리 사양

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에 설명된 대로 계산됩니다. 요청된 작업에 따라 시커는 다음 키 중 하나 이상의 지식을 증명합니다.

작업

특성에 기록된 데이터의 형식은 표 2~5에 나와 있습니다. 각 작업은 이 섹션의 뒷부분에서 자세히 설명합니다.

옥텟 데이터 유형 설명
0 uint8 데이터 ID
  • 0x00: 비콘 매개변수 읽기
  • 0x01: 프로비저닝 상태 읽기
  • 0x02: 임시 ID 키 설정
  • 0x03: 임시 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 바이트 배열 추가 데이터
  • 0x00: 해당 사항 없음
  • 0x01: 해당 사항 없음
  • 0x02: 계정 키로 암호화된 임시 ID 키인 32바이트입니다(AES-ECB-128). 제공자가 이미 임시 ID 키 집합을 보유한 경우 SHA256(current ephemeral identity key || the last nonce read from the characteristic)의 처음 8바이트도 전송합니다.
  • 0x03: SHA256(ephemeral identity key || the last nonce read from the characteristic)의 처음 8바이트

표 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
  • 0x05: 벨소리
  • 0x06: 벨소리 상태 읽기
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 바이트 배열 추가 데이터
  • 0x05: 벨소리 상태, 벨소리 지속 시간, 벨소리 볼륨을 나타내는 4바이트입니다.
  • 0x06: 해당 사항 없음

표 4: 벨소리 요청

옥텟 데이터 유형 설명
0 uint8 데이터 ID
  • 0x07: 원치 않는 추적 방지 모드 활성화
  • 0x08: 원치 않는 추적 방지 모드 비활성화
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 바이트 배열 추가 데이터
  • 0x07: 1바이트의 제어 플래그 (선택사항)
  • 0x08: SHA256(ephemeral identity key || the last nonce read from the characteristic)의 처음 8바이트

표 5: 원치 않는 추적 방지 요청

쓰기가 성공하면 표 6에 나열된 대로 알림이 트리거됩니다.

0x05: 벨소리 상태 변경 이외의 데이터 ID가 있는 알림은 알림을 트리거하는 쓰기 트랜잭션이 완료되기 전에, 즉 쓰기 요청의 응답 PDU가 전송되기 전에 전송해야 합니다.

옥텟 데이터 유형 설명
0 uint8 데이터 ID
  • 0x00: 비콘 매개변수 읽기
  • 0x01: 프로비저닝 상태 읽기
  • 0x02: 임시 ID 키 설정
  • 0x03: 임시 ID 키 지우기
  • 0x04: 사용자 동의를 통해 임시 ID 키 읽기
  • 0x05: 벨소리 상태 변경
  • 0x06: 벨소리 상태 읽기
  • 0x07: 원치 않는 추적 방지 모드 활성화
  • 0x08: 원치 않는 추적 방지 모드 비활성화
1 uint8 데이터 길이 다양함
2~9 바이트 배열 인증 작업별 세부정보
10 - var 바이트 배열 추가 데이터
  • 0x00: 전송 전력, 시계 값, 암호화 방법, 벨소리 기능을 나타내는 8바이트입니다. 계정 키로 암호화된 AES-ECB-128입니다 (0으로 패딩됨).
  • 0x01: 프로비저닝 상태를 나타내는 1바이트와 현재 임시 ID(20 또는 32바이트)(해당하는 경우)
  • 0x04: 계정 키로 암호화된 임시 ID 키인 32바이트, AES-ECB-128
  • 0x05: 변경의 새 상태와 트리거를 나타내는 4바이트
  • 0x06: 활성 상태로 울리는 구성요소와 울림에 남은 데시초 수를 나타내는 3바이트
  • 기타 데이터 ID는 빈 추가 데이터를 사용합니다.

표 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 곡선 선택 암호화에 사용되는 타원 곡선입니다.
  • 0x00 (기본값): SECP160R1
  • 0x01: SECP256R1 (확장 광고 필요)
6 uint8 구성요소 벨소리를 울릴 수 있는 구성요소의 수:
  • 0x00: 기기에서 벨소리를 울릴 수 없음을 나타냅니다.
  • 0x01: 하나의 구성요소만 벨소리를 울릴 수 있음을 나타냅니다.
  • 0x02: 왼쪽 및 오른쪽 이어폰이라는 두 구성요소가 독립적으로 벨소리를 울릴 수 있음을 나타냅니다.
  • 0x03: 왼쪽 및 오른쪽 이어폰과 케이스 등 세 가지 구성요소가 독립적으로 벨소리를 울릴 수 있음을 나타냅니다.
7 uint8 벨소리 기능 지원되는 옵션은 다음과 같습니다.
  • 0x00: 벨소리 볼륨 선택을 사용할 수 없습니다.
  • 0x01: 벨소리 볼륨 선택이 가능합니다. 설정된 경우 공급자는 벨소리 작업에 표시된 대로 3가지 볼륨 수준을 수락하고 처리해야 합니다.
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 (0x01): 기기에 임시 ID 키가 설정된 경우 설정됩니다.
  • 비트 2 (0x02): 제공된 일회성 인증 키가 소유자 계정 키와 일치하는지 설정합니다.
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 (0x01): 오른쪽 벨소리
  • 비트 2 (0x02): 왼쪽 벨소리 울림
  • 비트 3 (0x04): 벨소리 케이스
  • 0xFF: 모든 구성요소 울림
  • 0x00: 벨 울림 중지
1 - 2 uint16 시간 초과 제한 시간(데시초)입니다. 0이 아니어야 하며 10분에 해당하는 값보다 크지 않아야 합니다.
제공자는 이 값을 사용하여 자동으로 소리가 꺼지기 전에 벨소리가 울려야 하는 시간을 결정합니다. 기기의 구성요소가 이미 울리고 있는 경우 제한 시간이 이미 적용된 제한 시간을 재정의합니다.

벨 울림 작업이 0x00으로 설정된 경우 제한 시간이 무시됩니다.
3 uint8 볼륨
  • 0x00: 기본값
  • 0x01: 낮음
  • 0x02: 중간
  • 0x03: 높음
이러한 값의 정확한 의미는 구현에 따라 다릅니다.

요청을 받은 공급자는 다음을 확인합니다.

  • 제공된 일회성 인증 키가 벨 키와 일치합니다.
  • 요청된 상태가 벨소리를 울릴 수 있는 구성요소와 일치합니다.

제공자가 FHN 비콘으로 프로비저닝되지 않았거나 인증에 실패하면 인증되지 않은 오류가 반환됩니다. 하지만 원치 않는 추적 보호가 활성화되어 있고 원치 않는 추적 보호 요청을 트리거할 때 벨소리 인증 건너뛰기 플래그가 사용 설정되어 있다면 제공자는 해당 확인을 건너뛰어야 합니다. 인증 데이터는 여전히 Seeker가 제공해야 하지만 임의의 값으로 설정할 수 있습니다.

벨소리가 시작되거나 종료되면 데이터 ID가 0x05인 알림이 표 6에 표시된 대로 전송됩니다. 알림의 콘텐츠는 다음과 같이 정의됩니다.

옥텟 데이터 유형 설명
0 uint8 벨 울림 상태
  • 0x00: 시작됨
  • 0x01: 시작 또는 중지 실패 (요청된 모든 구성요소가 범위를 벗어남)
  • 0x02: 중지됨 (시간 초과)
  • 0x03: 중지됨 (버튼 누름)
  • 0x04: 중지됨 (GATT 요청)
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 제어 플래그
  • 0x01: 벨소리 인증을 건너뜁니다. 설정된 경우 원치 않는 추적 보호 모드에서는 벨소리 요청이 인증되지 않습니다.
설정된 플래그가 없으면 (바이트가 모두 0임) 데이터 섹션을 완전히 생략하고 빈 데이터 섹션을 전송해도 됩니다.
이 플래그는 원치 않는 추적 방지 모드가 비활성화될 때까지만 적용됩니다.

제공된 일회성 인증 키가 원치 않는 추적 보호 키와 일치하는지 제공업체가 확인합니다. 공급자가 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바이트로 정의됩니다.

공지된 프레임

프로비저닝 후 제공자는 2초마다 한 번 이상 FHN 프레임을 광고해야 합니다. 빠른 페어링 프레임이 공지되는 경우 공급자는 일반 빠른 페어링 광고 내에 FHN 프레임을 인터리브해야 합니다. 예를 들어 제공자는 2초마다 빠른 페어링 광고 7개와 FHN 광고 1개를 공지해야 합니다.

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 해시 처리된 플래그

표 8: 160비트 곡선을 지원하는 FHN 프레임

표 9는 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 해시 처리된 플래그

표 9: 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개의 최하위 비트가 삭제됩니다.

표 10: 의사 난수 구성

이 계산의 결과는 256비트 숫자이며 r'로 표시됩니다.

나머지 계산에서는 타원 곡선 암호화 작업에 SECP160R1 또는 SECP256R1가 사용됩니다. 다음에 참조되는 Fp, n, G를 정의하는 SEC 2: 권장되는 타원 곡선 도메인 매개변수의 곡선 정의를 참고하세요.

이제 r'은(는) r = r' mod n을 계산하여 유한 필드 Fp에 투영됩니다. 마지막으로 사용되는 공개 키를 나타내는 곡선 위의 점인 R = r * G를 계산합니다. 비컨은 Rx 좌표인 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을 읽은 사용자)는 다음을 실행합니다.

  1. EID 계산 섹션에 정의된 대로 Fp에서 임의의 숫자 s를 선택합니다.
  2. 컴퓨팅 S = s * G
  3. 곡선 방정식에 대입하고 가능한 결과에서 임의의 Ry 값을 선택하여 R = (Rx, Ry)를 계산합니다.
  4. (s * R)x이 곡선 곱셈 결과의 x 좌표인 256비트 AES 키 k = HKDF-SHA256((s * R)x)를 계산합니다. 솔트가 지정되지 않았습니다.
  5. URxLRx을 빅엔디언 형식의 Rx의 상위 및 하위 80비트라고 하겠습니다. 마찬가지로 SUSxLSx를 정의합니다.
  6. 컴퓨팅 nonce = LRx || LSx
  7. 컴퓨팅 (m’, tag) = AES-EAX-256-ENC(k, nonce, m)
  8. 신뢰할 수 없는 원격 서비스를 통해 소유자에게 (URx, Sx, m’, tag)를 전송합니다.

EID로 암호화된 값의 복호화

EIK와 순환 기간 지수를 보유한 소유자의 클라이언트는 다음과 같이 메시지를 복호화합니다.

  1. URx가 주어지면 URx가 기반하는 비콘 시간 카운터 값을 획득합니다. 이는 소유자의 클라이언트가 최근 과거 및 가까운 미래의 비콘 시간 카운터 값에 대한 Rx 값을 계산하여 수행할 수 있습니다.
  2. URx의 기준이 되는 비콘 시간 카운터 값을 고려하여 EID 계산 섹션에 정의된 대로 r의 예상 값을 계산합니다.
  3. R = r * G를 계산하고 목격자가 제공한 URx 값과 일치하는지 확인합니다.
  4. 곡선 방정식에 대입하고 가능한 결과에서 임의의 Sy 값을 선택하여 S = (Sx, Sy)를 계산합니다.
  5. (r * S)x이 곡선 곱셈 결과의 x 좌표인 경우 k = HKDF-SHA256((r * S)x)를 계산합니다.
  6. 컴퓨팅 nonce = LRx || LSx
  7. 컴퓨팅 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 호출까지 검색 불가능한 빠른 페어링 프레임을 광고해야 합니다. 이렇게 하면 심각한 시계 드리프트가 발생한 경우에도 Seeker가 기기를 감지하고 시계를 동기화할 수 있습니다.
  • 검색할 수 없는 빠른 페어링 프레임을 광고할 때는 UI 표시를 사용 설정하면 안 됩니다.
  • 공개된 빠른 페어링 프레임은 공급자가 FHN용으로 프로비저닝되는 동안 광고되어서는 안 됩니다.
  • 인증되지 않은 방식으로 식별 정보 (예: 이름 또는 식별자)를 노출해서는 안 됩니다.

클래식 블루투스 기기별 가이드라인

이 섹션에서는 FHN을 지원하는 기존 블루투스 기기의 특별한 측면을 설명합니다.

이미 페어링된 기기의 FHN 프로비저닝

탐색기와 페어링할 때 항상 FHN이 프로비저닝되는 것은 아니지만 페어링 후 잠시 지나면 프로비저닝됩니다. 이 경우 제공업체에 GATT 연결을 설정하는 데 필요한 최신 BLE MAC 주소가 없을 수 있습니다. 공급자는 탐색기가 이미 페어링된 동안 BLE 주소를 가져올 수 있는 다음 방법 중 하나 이상을 지원해야 합니다(MUST).

  • 제공자는 탐색기가 BLE 검색을 통해 BLE 주소를 찾을 수 있도록 하는 빠른 페어링 계정 데이터를 주기적으로 광고할 수 있습니다.
    이 접근 방식은 메시지 스트림을 구현하지 않는 제공업체에 적합합니다.
  • 제공업체는 클래식 블루투스를 통해 빠른 페어링 메시지 스트림을 통해 이 데이터를 제공할 수 있습니다.
    이 접근 방식은 블루투스를 통해 탐색기에 연결된 동안 빠른 페어링 프레임을 광고하지 않는 제공업체에 적합합니다.

두 접근 방식을 모두 지원하면 사용자가 FHN용 기기를 프로비저닝할 가능성이 높아집니다.

빠른 페어링 메시지 스트림

공급자는 빠른 페어링 메시지 스트림을 구현하고 이를 사용하여 탐색기에 기기 정보를 알릴 수 있습니다. 메시지 스트림을 구현하면 이 섹션에 설명된 특정 기능을 사용할 수 있습니다.

제공자는 메시지 스트림 RFCOMM 채널이 설정될 때마다 한 번씩 기기 정보 메시지를 전송해야 합니다.

펌웨어 버전 (기기 정보 코드 0x09) 및 추적 기능

펌웨어 업데이트로 공급자에 FHN 지원이 추가되면 연결된 시커가 사용자에게 이를 알리고 프로비저닝을 제안할 수 있습니다. 그렇지 않으면 사용자가 블루투스 기기 목록으로 수동으로 이동하여 FHN 프로비저닝을 시작해야 합니다.

이를 허용하려면 공급자는 펌웨어 버전 속성 (코드 0x09)을 사용하여 펌웨어 버전을 나타내는 문자열 값을 보고해야 합니다. 또한 공급자는 펌웨어 업데이트로 인한 기능 변경사항을 탐색기에 알리는 프로토콜을 지원해야 합니다.

옥텟 데이터 유형 설명
0 uint8 기기 정보 이벤트 0x03
1 uint8 펌웨어 버전 0x09
2~3개 uint16 추가 데이터 길이 다양함
var 바이트 배열 버전 문자열 다양함

표 11: 기기 정보 이벤트: 업데이트된 펌웨어 버전

기능 업데이트 요청 (0x0601)을 수신하면 제공자가 FHN 추적 지원을 사용 설정한 경우 표 12와 같이 응답해야 합니다.

옥텟 데이터 유형 설명
0 uint8 기기 기능 동기화 이벤트 0x06
1 uint8 FHN 추적 0x03
2~3개 uint16 추가 데이터 길이 0x0007
4 uint8 FHN 프로비저닝 상태 프로비저닝되지 않은 경우 0x00, 계정에서 프로비저닝된 경우 0x01
5 - 10 바이트 배열 기기의 현재 BLE MAC 주소 다양함

표 12: 기기 기능 동기화 이벤트: 추적 기능이 추가되었습니다.

현재 임시 식별자 (기기 정보 코드 0x0B)

제공자는 현재 임시 식별자 (코드 0x0B)를 사용하여 제공자가 FHN용으로 프로비저닝된 경우 현재 EID와 시계 값을 보고 시계 드리프트 (예: 배터리 소진으로 인해)가 발생한 경우 탐색기를 동기화할 수 있습니다. 그렇지 않으면 시커가 이 목적으로 더 비싸고 신뢰성이 낮은 연결을 시작합니다.

옥텟 데이터 유형 설명
0 uint8 기기 정보 이벤트 0x03
1 uint8 현재 임시 식별자 0x0B
2~3개 uint16 추가 데이터 길이 0x0018 또는 0x0024
4 - 7 바이트 배열 시계 값 예: 0x13F9EA80
8~19 또는 31 바이트 배열 현재 EID 예: 0x1122334455667788990011223344556677889900

표 13: 기기 정보 이벤트: 시계 동기화

초기화

초기화를 지원하는 기기의 경우 초기화가 실행되면 제공자는 비콘 전송을 중지하고 소유자 계정 키를 비롯한 임시 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진수로 인코딩하여 사용합니다.
  • 기기에 사운드 메이커가 포함되고 벨소리 기능을 지원해야 합니다. 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월
  • 소유자의 AK 정의가 업데이트되었습니다.
  • 위치 추적기 태그에서 전원 손실로부터 복구하기 위한 권장사항을 추가했습니다.
  • MAC 주소 무작위 지정에 관한 설명을 추가했습니다.
  • 원치 않는 추적 보호 모드에서 MAC 주소 순환에 관한 설명이 추가되었습니다.
  • 위치 추적기 태그를 비활성화하는 방법을 갖추는 것에 관한 가이드라인을 추가했습니다.
v1.3 2023년 12월
  • 위치 추적기 태그에 의해 노출되는 식별 정보에 대한 설명이 추가되었습니다.
  • 원치 않는 추적 방지 사양을 구현해야 한다는 요구사항이 추가되었습니다.
  • 전환 가능한 프로토콜 기기에 관한 가이드라인이 추가되었습니다.