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

v1.3

내 기기 찾기 네트워크 (FMDN) 액세서리 사양은 저전력 블루투스 (BLE) 기기 비커닝을 추적하기 위한 엔드 투 엔드 암호화 방식을 정의합니다. 이 페이지에서는 FMDN을 빠른 페어링 사양의 확장 프로그램으로 설명합니다. FMDN과 호환되는 기기가 있고 해당 기기의 위치 추적을 사용 설정하려는 경우 제공업체는 이 확장 프로그램을 사용 설정해야 합니다.

GATT 사양

다음 시맨틱을 사용하여 Fast Pair 서비스에 추가 일반 속성 (GATT) 특성을 추가해야 합니다.

빠른 페어링 서비스 특성 암호화됨 권한 UUID
비콘 작업 아니요 읽기, 쓰기, 알림 FE2C1238-8366-4814-8EB0-01DE32100BEA

표 1: FMDN의 빠른 페어링 서비스 특성

인증

이 확장 프로그램에 필요한 작업은 챌린지-응답 메커니즘으로 보호되는 쓰기 작업으로 실행됩니다. 탐색자는 연산을 실행하기 전에 표 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: 32바이트로, 계정 키로 암호화된 AES-ECB-128 임시 ID 키입니다. 제공업체에 이미 임시 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: 벨 울림 요청

Octet 데이터 유형 설명
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 키인 AES-ECB-128에 해당하는 32바이트
  • 0x05: 새 상태 및 변경에 대한 트리거를 나타내는 4바이트
  • 0x06: 3바이트로, 현재 울리고 있는 구성요소와 울림이 남은 데시초 수를 나타냅니다.
  • 기타 데이터 ID가 빈 추가 데이터를 사용함

표 6: 비콘 서비스 응답

표 7에는 작업에서 반환할 수 있는 GATT 오류 코드가 나와 있습니다.

코드 설명 참고
0x80 인증되지 않음 이전 nonce가 사용된 경우를 포함하여 인증에 실패할 때 쓰기 요청에 대한 응답으로 반환됩니다.
0x81 값이 올바르지 않습니다. 잘못된 값이 제공되거나 수신된 데이터에 예상치 못한 바이트 수가 있으면 반환됩니다.
0x82 사용자 동의 없음 기기가 페어링 모드가 아닐 때 데이터 ID 0x04: 사용자 동의로 임시 ID 키 읽기가 있는 쓰기 요청에 대한 응답으로 반환됩니다.

표 7: GATT 오류 코드

비콘의 매개변수 읽기

검색자는 데이터 ID 0x00의 표 2의 요청으로 구성된 특성에 대한 쓰기 작업을 실행하여 제공업체에 비콘의 매개변수를 쿼리할 수 있습니다. 제공업체는 제공된 일회성 인증 키가 기기에 저장된 계정 키와 일치하는지 확인합니다.

확인에 실패하면 제공업체가 인증되지 않은 오류를 반환합니다.

성공하면 제공업체가 표 6의 데이터 ID가 0x00인 응답으로 알립니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.

옥텟 데이터 유형 설명
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 암호화를 위한 0 패딩

데이터는 요청 인증에 사용된 계정 키로 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의 요청으로 구성된 특성에 쓰기 작업을 실행하여 공급자에게 비콘의 프로비저닝 상태를 쿼리할 수 있습니다. 제공업체는 제공된 일회성 인증 키가 기기에 저장된 계정 키와 일치하는지 확인합니다.

인증에 실패하면 제공업체에서 인증되지 않은 오류를 반환합니다.

성공하면 제공자는 표 6의 응답(데이터 ID 0x01)을 사용하여 알립니다. 제공업체는 다음과 같이 데이터 세그먼트를 구성합니다.

옥텟 데이터 유형 설명
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 키 설정

프로비저닝되지 않은 제공업체를 FMDN 비콘으로 프로비저닝하거나 이미 프로비저닝된 제공업체의 임시 ID 키를 변경하려면 시커가 데이터 ID 0x02의 표 2 요청으로 구성된 특성에 쓰기 작업을 실행합니다. 제공업체는 다음을 확인합니다.

  • 제공된 일회성 인증 키가 소유자 계정 키와 일치합니다.
  • 임시 ID 키의 해시가 제공된 경우 이 해시된 임시 ID 키는 현재 임시 ID 키와 일치합니다.
  • 일시적인 ID 키의 해시가 제공되지 않은 경우 제공업체가 아직 FMDN 비콘으로 프로비저닝되지 않았는지 확인합니다.

확인에 실패하면 제공업체가 인증되지 않은 오류를 반환합니다.

성공하면 일시적인 ID 키가 일치하는 계정 키를 사용하여 AES-ECB-128로 복호화하여 복구됩니다. 키는 기기에 유지되어야 하며, 그 시점부터 제공업체는 FMDN 프레임을 광고하기 시작해야 합니다. 새 임시 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 키와 일치합니다.

제공업체가 FMDN 비콘으로 프로비저닝되지 않거나 인증에 실패하면 인증되지 않은 오류가 반환됩니다.

성공 시 제공업체는 키를 잊고 FMDN 프레임 광고를 중지합니다. 공급업체는 데이터 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 복구 모드입니다.

인증에 실패하면 제공업체에서 인증되지 않은 오류를 반환합니다.

기기가 페어링 모드가 아니면 제공업체는 사용자 동의 없음 오류를 반환합니다.

성공하면 제공자는 표 6의 응답(데이터 ID 0x04)을 사용하여 알립니다.

인증 세그먼트는 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: 높음
이러한 값의 정확한 의미는 구현에 따라 다릅니다.

요청을 수신하면 제공업체는 다음을 확인합니다.

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

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

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

옥텟 데이터 유형 설명
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의 요청으로 구성된 특성에 대한 쓰기 작업을 수행합니다. 제공된 일회성 인증 키가 링 키와 일치하는지 확인합니다.

제공업체가 FMDN 비콘으로 프로비저닝되지 않았거나 확인에 실패하면 제공업체가 인증되지 않은 오류를 반환합니다.

성공하면 공급업체는 데이터 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임) 데이터 섹션을 완전히 생략하고 빈 데이터 섹션을 전송해도 됩니다.
이 플래그는 원치 않는 추적 보호 모드가 비활성화될 때까지만 적용됩니다.

제공업체는 제공된 일회성 인증 키가 원치 않는 추적 보호 키와 일치하는지 확인합니다. 제공업체가 FMDN 비콘으로 프로비저닝되지 않거나 인증에 실패하면 인증되지 않은 오류가 반환됩니다.

원치 않는 추적 보호 모드가 활성화되면 비콘은 MAC 비공개 주소 순환 빈도를 24시간마다 한 번으로 줄여야 합니다. 광고된 임시 식별자는 평소와 같이 계속 순환해야 합니다. 프레임 유형은 0x41로 설정해야 합니다. 이 상태는 해싱된 플래그 섹션에도 반영됩니다.

원치 않는 추적 보호 모드를 사용 중지하는 경우

제공업체는 다음을 확인합니다.

  • 제공된 일회성 인증 키가 원치 않는 추적 보호 키와 일치합니다.
  • 해싱된 임시 ID 키가 현재 임시 ID 키와 일치합니다.

제공업체가 FMDN 비콘으로 프로비저닝되지 않거나 인증에 실패하면 제공업체가 인증되지 않은 오류를 반환합니다.

원치 않는 추적 보호 모드가 비활성화되면 비콘은 일시적 식별자 회전과 동기화되어 정상 속도로 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초마다 한 번 이상 FMDN 프레임을 광고해야 합니다. 빠른 페어링 프레임이 광고되는 경우 제공업체는 일반 빠른 페어링 광고 내에 FMDN 프레임을 삽입해야 합니다. 예를 들어 제공업체는 2초마다 빠른 페어링 광고 7개와 FMDN 광고 1개를 알려야 합니다.

FMDN 프레임은 크라우드소싱 네트워크에 기여하는 모든 지원 클라이언트의 위치 보고서를 암호화하는 데 사용되는 공개 키를 전송합니다. 두 가지 유형의 타원 곡선 키를 사용할 수 있습니다. 기존 BLE 4 프레임에 맞는 160비트 키 또는 확장 광고 기능이 있는 BLE 5가 필요한 256비트 키입니다. 제공자의 구현에 따라 사용되는 곡선이 결정됩니다.

FMDN 프레임은 다음과 같이 구성됩니다.

옥텟 설명
0 0x02 길이
1 0x01 플래그 데이터 유형 값
2 0x06 플래그 데이터
3 0x18 또는 0x19 길이
4 0x16 서비스 데이터 데이터 유형 값
5 0xAA 16비트 서비스 UUID
6 0xFE ...
7 0x40 또는 0x41 원치 않는 추적 보호 모드 표시가 있는 FMDN 프레임 유형
8~27일 20바이트 임시 식별자
28 해싱된 플래그

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

표 9에는 256비트 곡선에 대한 바이트 오프셋 및 값이 나와 있습니다.

Octet 설명
0 0x02 길이
1 0x01 플래그 데이터 유형 값
2 0x06 플래그 데이터
3 0x24 또는 0x25 길이
4 0x16 서비스 데이터 데이터 유형 값
5 0xAA 16비트 서비스 UUID
6 0xFE ...
7 0x40 또는 0x41 원치 않는 추적 보호 모드 표시가 있는 FMDN 프레임 유형
8..39 32바이트 일회용 식별자
40 해싱된 플래그

표 9: 256비트 곡선을 지원하는 FMDN 프레임

일회용 식별자 (EID) 계산

임시 ID 키로 다음 데이터 구조를 AES-ECB-256 암호화하여 랜덤이 생성됩니다.

Octet 필드 설명
0~10 패딩 값 = 0xFF
11 K 순환 주기 지수
12~15명 TS[0]...TS[3] 비콘 시간 카운터(32비트 Big Endian 형식) 가장 낮은 비트가 지워집니다.
16~26세 패딩 값 = 0x00
27 K 순환 기간 지수
28 - 31 TS[0]...TS[3] 비콘 시간 카운터(32비트 Big Endian 형식) K개의 최하위 비트가 0으로 설정됩니다.

표 10: 가우시안 무작위 숫자 생성.

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

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

이제 r = r' mod n를 계산하여 r'가 유한 필드 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. 256비트 AES 키 k = HKDF-SHA256((s * R)x)를 계산합니다. 여기서 (s * R)x는 곡선 곱셈 결과의 x 좌표입니다. 솔트가 지정되지 않았습니다.
  5. URxLRx를 Big Endian 형식으로 각각 Rx의 상위 80비트와 하위 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. k = HKDF-SHA256((r * S)x)를 계산합니다. 여기서 (r * S)x는 곡선 곱셈 결과의 x 좌표입니다.
  6. nonce = LRx || LSx를 계산합니다.
  7. m = AES-EAX-256-DEC(k, nonce, m’, tag)를 계산합니다.

ID 순환

FMDN 프레임 광고에는 확인 가능 (RPA) 또는 확인 불가능 (NRPA) BLE 주소를 사용해야 합니다. RPA는 LE 오디오 (LEA) 기기에 필요하며 결합을 사용하지 않는 위치 추적기 태그를 제외한 다른 기기에도 권장됩니다.

빠른 페어링 광고, FMDN 광고, 해당 BLE 주소가 동시에 순환해야 합니다. 회전은 평균 1,024초마다 이루어져야 합니다. 비콘이 새 식별자를 광고하기 시작하는 정확한 지점은 기간 내에 무작위로 지정되어야 합니다.

순환 시간을 무작위로 지정하는 데 권장되는 방법은 다음으로 예상되는 순환 시간 (무작위 순서 지정이 적용되지 않은 경우)에 1~204초 범위의 무작위 양수 시간 계수를 더하는 것입니다.

기기가 원치 않는 추적 보호 모드인 경우 FMDN 광고의 BLE 주소는 고정되어야 하지만, FP 검색 불가능한 광고 (예: 빠른 페어링)의 RPA는 계속 순환해야 합니다. 프로토콜마다 다른 주소를 사용할 수 있습니다.

전원 공급 중단 복구

임시 식별자 확인은 광고 시점의 클록 값과 밀접하게 연결되어 있으므로 전력 손실이 발생하는 경우 제공업체가 클록 값을 복구할 수 있어야 합니다. 제공자는 현재 클록 값을 비휘발성 메모리에 적어도 하루에 한 번 쓰는 것이 좋으며 부팅 시에는 NVM을 확인하여 초기화할 값이 있는지 확인하는 것이 좋습니다. 임시 식별자의 리졸버는 합리적인 클록 드리프트와 이러한 유형의 전력 손실 복구를 모두 허용하기에 충분한 시간 동안 해상도를 구현합니다.

해결 시간 기간이 제한되어 있으므로 제공업체는 클록 드리프트를 최소화하기 위해 계속 노력해야 합니다. 하나 이상의 추가적인 클록 동기화 메서드를 구현해야 합니다 (검색할 수 없는 빠른 페어링 프레임을 공지하거나 메시지 스트림 구현).

빠른 페어링 구현 가이드라인

이 섹션에서는 FMDN을 지원하는 제공업체의 빠른 페어링 구현의 특수한 측면을 설명합니다.

위치 검색기 태그 관련 가이드라인

  • 제공업체가 페어링되었지만 5분 이내에 FMDN이 프로비저닝되지 않은 경우 (또는 기기가 페어링된 상태에서 OTA 업데이트가 적용되었지만 FMDN이 프로비저닝되지 않은 경우) 제공업체는 초기 구성으로 되돌리고 저장된 계정 키를 삭제해야 합니다.
  • 제공업체가 페어링된 후에는 FMDN이 프로비저닝될 때까지 또는 5분이 지나기 전까지 MAC 주소를 변경해서는 안 됩니다.
  • 임시 ID 키가 기기에서 삭제되면 기기는 초기화를 실행하고 저장된 계정 키도 삭제해야 합니다.
  • 제공업체는 일반 블루투스 페어링 시도를 거부하고 빠른 페어링 페어링만 수락해야 합니다.
  • 제공업체는 사용자가 기기를 초기화하지 않고도 일시적으로 광고를 중지할 수 있는 메커니즘 (예: 버튼 조합 누르기)을 포함해야 합니다.
  • 전원이 꺼진 후 기기는 비콘 매개변수 읽기를 다음에 호출할 때까지 검색 불가능한 빠른 페어링 프레임을 광고해야 합니다. 이렇게 하면 탐색자가 기기를 감지하고 상당한 클록 드리프트가 발생하더라도 클록을 동기화할 수 있습니다.
  • 검색할 수 없는 빠른 페어링 프레임을 광고할 때는 UI 표시를 사용 설정해서는 안 됩니다.
  • 제공업체가 FMDN에 프로비저닝되는 동안에는 검색 가능한 빠른 페어링 프레임을 광고해서는 안 됩니다.
  • 제공업체는 인증되지 않은 방식으로 식별 정보를 노출해서는 안 됩니다 (예: 이름 또는 식별자).

기본 블루투스 기기별 가이드라인

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

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

제공업체는 시커와 페어링할 때 항상 FMDN에 프로비저닝되지는 않으며 그 후 잠시 후에 프로비저닝됩니다. 이 경우 제공업체에 GATT 연결을 설정하는 데 필요한 최신 BLE MAC 주소가 없을 수 있습니다. 이미 페어링된 상태에서 탐색기가 BLE 주소를 가져오는 데 사용할 수 있도록 공급자는 다음 방법 중 하나 이상을 지원해야 합니다.

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

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

빠른 페어링 메시지 스트림

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

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

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

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

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

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

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

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

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

표 12: 기기 기능 동기화 이벤트: 추가된 추적 기능

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

제공업체는 현재 일시적인 식별자(코드 0x0B)를 사용하여 제공업체가 FMDN에 프로비저닝된 경우 현재 EID 및 시계 값을 보고하고, 배터리 소모 등으로 인해 시계가 드리프트하는 경우 시커를 동기화할 수 있습니다. 그러지 않으면 탐색자가 이 목적으로 더 비싸고 덜 안정적인 연결을 시작합니다.

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

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

초기화

초기화를 지원하는 기기의 경우: 초기화가 실행되면 제공자는 비커닝을 중지하고 임시 ID 키와 저장된 모든 계정 키(소유자의 계정 키 포함)를 완전 삭제해야 합니다.

수동 또는 프로그래매틱 초기화 후에는 사용자가 기기를 삭제한 직후에 페어링 흐름이 시작되지 않도록 제공업체가 즉시 빠른 페어링을 광고하면 안 됩니다.

원치 않는 추적 방지

인증된 FMDN 기기는 원치 않는 위치 추적기 감지 (DULT)를 위한 크로스 플랫폼 사양의 구현 버전 요구사항도 충족해야 합니다.

DULT 사양을 준수하기 위한 FMDN 관련 가이드라인:

  • 모든 FMDN 호환 기기는 근처 기기 콘솔에 등록되어 있어야 하며 '내 기기 찾기' 기능이 활성화되어 있어야 합니다.
  • 기기는 액세서리 정보 연산 및 소유자가 아닌 제어 등 DULT 사양의 구현 버전에 정의된 액세서리 비소유자 서비스 및 특성을 구현해야 합니다.
  • DULT 사양에 정의된 하위 호환성 기간에는 이 문서에 정의된 광고 프레임이 변경되지 않습니다.
  • 이 문서에 정의된 '원치 않는 추적 보호 모드'는 DULT 사양에 정의된 '분리된 상태'에 매핑됩니다.
  • 액세서리 정보 opcode를 구현하기 위한 가이드라인은 다음과 같습니다.
    • 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 opcode 구현을 위한 가이드라인은 다음과 같습니다.
    • 이 작업은 사용자가 버튼 누르기 조합이 필요한 '식별' 모드를 활성화한 후 5분 동안만 유효한 응답을 반환해야 합니다. 시각적 또는 청각적 신호를 통해 사용자에게 제공업체가 해당 모드로 전환되었음을 알려야 합니다. 이 모드를 활성화하기 위한 모델별 안내는 인증 요건으로 Google에 제공되어야 하며, 안내를 업데이트하거나 수정하기 최소 10일 전에 제공해야 합니다.
    • 응답은 현재 일시적인 식별자의 처음 10바이트와 HMAC-SHA256(recovery key, the truncated current ephemeral identifier)의 처음 8바이트로 구성됩니다.
  • NFC를 통한 식별자를 구현하기 위한 가이드라인은 다음과 같습니다.
    • URL로 find-my.googleapis.com/lookup를 사용합니다.
    • e 매개변수로는 16진수로 인코딩된 Get_Identifier에 대해 구성된 것과 동일한 응답을 사용합니다.
    • pid 매개변수로 Get_Product_Data에 생성된 것과 동일한 응답을 사용합니다(16진수로 인코딩됨).
  • Sound_Start 명령 코드 구현을 위한 가이드라인:
    • 이 명령어는 사용 가능한 모든 구성요소에서 벨소리를 트리거해야 합니다.
    • 지원되는 최대 볼륨을 사용해야 합니다.
    • 권장되는 지속 시간은 12초입니다.
  • 위치 추적기 태그에는 사용자가 기기를 초기화하지 않고도 일시적으로 광고를 중지할 수 있는 메커니즘 (예: 버튼 조합 누르기)이 포함되어야 합니다.
    • 사용 중지 안내는 공개적으로 사용 가능한 URL에 문서화되어야 하며 인증 요구사항으로 Google에 제공되어야 하며, 안내가 업데이트되거나 수정되기 최소 10일 전에 제공되어야 합니다.
    • URL은 현지화를 지원해야 합니다. 클라이언트에 따라 언어는 쿼리 매개변수 ('hl=ko')로 제공되거나 'accept-language' HTTP 헤더를 사용하여 제공됩니다.

전환 가능한 프로토콜 가이드라인

  • 한 번에 하나의 프로토콜만 사용해야 합니다. 기기에서 동시에 두 개 이상의 네트워크가 작동할 수 없는지 확인합니다. 이 요구사항은 다양한 프로토콜 간에 민감한 사용자 데이터가 혼합되지 않도록 하기 위해 필요합니다.
  • 사용자가 다른 네트워크로 기기를 다시 설정할 수 있도록 기기에 강제 초기화 워크플로를 통합하는 것이 좋습니다.
  • 기기를 네트워크로 업데이트하는 프로세스는 사용자 친화적이고 네트워크 간에 공정해야 합니다. 사용자는 특정 네트워크를 선호하지 않고도 사용할 네트워크를 선택할 수 있어야 합니다. 이 절차는 Google팀의 승인을 받아야 합니다.

펌웨어 업데이트

OTA 업데이트의 프로세스와 배포는 파트너가 자체 모바일 또는 웹 앱 워크플로를 사용하여 관리해야 합니다.

호환성

내 기기 찾기 네트워크를 사용하려면 위치 서비스 및 블루투스가 사용 설정되어 있어야 합니다. 이동통신 서비스 또는 인터넷 연결이 필요합니다. Android 9 이상에서 작동하며 특정 국가에서는 연령 요건을 충족하는 사용자를 대상으로 합니다.

변경 로그

FMDN 버전 날짜 댓글
v1 사전 체험을 위한 FMDN 사양의 초기 버전입니다.
v1.1 Feb 2023
  • 원치 않는 추적 보호 모드를 나타내는 일반 텍스트 표시가 추가되었습니다.
  • 원치 않는 추적 보호 모드에 있는 동안 벨이 울리는 요청의 인증을 건너뛸 수 있는 옵션이 추가되었습니다.
v1.2 2023년 4월
  • 소유자의 AK 정의가 업데이트되었습니다.
  • 위치 추적기 태그에서 전원 손실 복구에 관한 권장사항을 추가했습니다.
  • MAC 주소 무작위 지정에 관한 명확한 설명을 추가했습니다.
  • 원치 않는 추적 보호 모드에서 MAC 주소 순환에 관한 명확한 설명을 추가했습니다.
  • 위치 검색기 태그를 비활성화하는 방법에 관한 가이드라인을 추가했습니다.
v1.3 2023년 12월
  • 위치 검색기 태그로 노출된 정보를 식별하는 방법을 명확하게 추가했습니다.
  • 원치 않는 추적 방지 사양을 구현하기 위한 요구사항이 추가되었습니다.
  • 전환 가능한 프로토콜 기기에 관한 가이드라인을 추가했습니다.