v1.3
Specyfikacja akcesoriów sieci usługi Znajdź moje urządzenie (FMDN) definiuje szyfrowane od końca do końca podejście do śledzenia urządzeń z Bluetooth Low Energy (BLE) z beaconami. Ta strona opisuje FMDN jako rozszerzenie specyfikacji Fast Pair. Dostawcy powinni włączyć to rozszerzenie, jeśli mają urządzenia zgodne z FMDN i chcą włączyć na nich śledzenie lokalizacji.
Specyfikacja GATT
Do usługi Szybkie parowanie należy dodać dodatkową cechę atrybutów ogólnych (GATT) zgodnie z następującą semantyką:
Charakterystyka usługi Szybkie parowanie | Zaszyfrowane | Uprawnienia | UUID |
---|---|---|---|
Działania beacon | Nie | Odczyt, zapis i powiadomienie | FE2C1238-8366-4814-8EB0-01DE32100BEA |
Tabela 1. Charakterystyka usługi Fast Pair dla FMDN
Uwierzytelnianie
Operacje wymagane przez to rozszerzenie są wykonywane jako operacje zapisu zabezpieczone mechanizmem wyzwanie-odpowiedź. Przed wykonaniem jakiejkolwiek operacji Seeker ma wykonać operację odczytu z charakterystyki w tabeli 1, co spowoduje buforowanie w takim formacie:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Numer wersji głównej protokołu | 0x01 |
1–8 | tablica bajtów | Jednorazowa losowa liczba jednorazowa | zmienia się |
Każda operacja odczytu powinna prowadzić do uzyskania innego nonce, a jeden nonce powinien być ważny tylko dla jednej operacji. Wartość nonce musi zostać unieważniona nawet wtedy, gdy operacja się nie udała.
Następnie oblicza klucz uwierzytelniający jednorazowy, który będzie używany w następnym żądaniu zapisu. Klucz uwierzytelniania jest obliczany zgodnie z opisem w tabelach 2–5. W zależności od operacji, o której żądanie chodzi, szukający musi udowodnić, że zna co najmniej jeden z tych kluczy:
Klucz konta: 16-bajtowy klucz do konta Szybkie parowanie, zgodnie ze specyfikacją Szybkiego parowania.
Klucz konta właściciela: gdy Poszukiwacz po raz pierwszy uzyskuje dostęp do cechy działań typu beacon, dostawca wybiera jeden z istniejących kluczy konta jako klucz konta właściciela. Wybranego klucza konta właściciela nie można zmienić, dopóki dostawca nie przywróci ustawień fabrycznych. Dostawca nie może usunąć klucza konta właściciela, gdy zabraknie wolnych slotów na klucze kont.
Dostawcy, którzy obsługują już FMDN podczas parowania po raz pierwszy (lub obsługują go podczas parowania po przywróceniu ustawień fabrycznych), wybierają pierwszy klucz konta, ponieważ jest to jedyny istniejący klucz konta, gdy Seeker odczytuje stan inicjalizacji podczas parowania.
Dostawcy, którzy uzyskają obsługę FMDN po sparowaniu (np. poprzez aktualizację oprogramowania), mogą wybrać dowolny klucz konta. Rozsądnie jest wybrać pierwszy klucz konta używany do odczytu stanu udostępniania z charakterystyki działań beaconu po aktualizacji oprogramowania, przy założeniu, że użytkownik, który przeprowadził aktualizację, jest obecnym właścicielem Dostawcy.
Tymczasowy klucz tożsamości (EIK): 32-bajtowy klucz wybierany losowo przez Seeker podczas przeprowadzania procesu udostępniania FMDN. Ten klucz służy do generowania kluczy kryptograficznych, które są używane do pełnego szyfrowania raportów o lokalizacji. Seeker nigdy nie ujawnia go backendowi.
Klucz odzyskiwania: zdefiniowany jako
SHA256(ephemeral identity key || 0x01)
, przycięty do pierwszych 8 bajtów. Klucz jest przechowywany na serwerze, a poszukiwacz może go użyć do odzyskania klucza EIK, o ile użytkownik wyrazi zgodę, naciskając przycisk na urządzeniu.Klucz pierścieniowy: zdefiniowany jako
SHA256(ephemeral identity key || 0x02)
, obcięty do pierwszych 8 bajtów. Klucz jest przechowywany w backendzie i Seeker może go użyć tylko do dzwonienia na urządzenie.Klucz ochrony przed niechcianym śledzeniem: zdefiniowany jako
SHA256(ephemeral identity key || 0x03)
, obcięty do pierwszych 8 bajtów. Klucz jest przechowywany w backendzie i Searchker może go użyć tylko do aktywowania trybu ochrony przed niechcianym śledzeniem.
Operacje
Format danych zapisywanych w charakterystyce podano w tabelach 2–5. Każdą z tych operacji omówimy dokładniej w dalszej części tego rozdziału.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Identyfikator danych |
|
1 | uint8 | Długość danych | zmienia się |
2–9 | tablica bajtów | Klucz uwierzytelniający jednorazowy | Pierwsze 8 bajtów HMAC-SHA256(account key, protocol major version number || the last nonce
read from the characteristic || data ID || data length || additional data) |
10 – var | tablica bajtów | Dodatkowe dane |
|
Tabela 2. Prośba o obsługę administracyjną beaconów.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Identyfikator danych | 0x04: odczyt efemerycznego klucza tożsamości za zgodą użytkownika |
1 | uint8 | Długość danych | 0x08 |
2–9 | tablica bajtów | Klucz uwierzytelniania jednorazowego | Pierwsze 8 bajtów HMAC-SHA256(recovery key, protocol major version number || the last nonce
read from the characteristic || data ID || data length) |
Tabela 3. Prośba o przywrócenie klucza przez udostępnienie obrazu typu beacon.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Identyfikator danych |
|
1 | uint8 | Długość danych | zmienia się |
2–9 | tablica bajtów | Jednorazowy klucz uwierzytelniania | Pierwsze 8 bajtów instancji HMAC-SHA256(ring key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data) |
10 – var | tablica bajtów | Dodatkowe dane |
|
Tabela 4. Prośba o dzwonienie.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Identyfikator danych |
|
1 | uint8 | Długość danych | zmienia się |
2–9 | tablica bajtów | Klucz uwierzytelniania jednorazowego | Pierwsze 8 bajtów instancji HMAC-SHA256(unwanted tracking protection key, protocol major version number
|| the last nonce read from the characteristic || data ID || data length ||
additional data) |
10 – var | tablica bajtów | Dodatkowe dane |
|
Tabela 5. Prośba o ochronę przed niechcianym śledzeniem
Udane zapisy wywołują powiadomienia wymienione w tabeli 6.
Powiadomienia z identyfikatorem danych innym niż 0x05: zmiana stanu dzwonka należy wysłać przed zakończeniem transakcji zapisu, która powoduje wysłanie powiadomienia, czyli przed wysłaniem odpowiedzi PDU na żądanie zapisu.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Identyfikator danych |
|
1 | uint8 | Długość danych | zmienia się |
2–9 | tablica bajtów | Uwierzytelnianie | Szczegóły operacji |
10 – var | tablica bajtów | Dodatkowe dane |
|
Tabela 6. Odpowiedź usługi beacona
Tabela 7 zawiera listę możliwych kodów błędów GATT zwracanych przez operacje.
Kod | Opis | Uwagi |
---|---|---|
0 × 80 | Nieuwierzytelnione | Zwracany w odpowiedzi na żądanie zapisu, gdy uwierzytelnianie się nie powiedzie (w tym w przypadku, gdy użyto starego numeru losowego). |
0 × 81 | Nieprawidłowa wartość | Zwracana, gdy podana zostanie nieprawidłowa wartość lub gdy otrzymane dane mają nieoczekiwaną liczbę bajtów. |
0x82 | Brak zgody użytkownika | Zwracany w odpowiedzi na żądanie zapisu z identyfikatorem danych 0x04: odczyt efemerycznego klucza tożsamości za zgodą użytkownika, gdy urządzenie nie jest w trybie parowania. |
Tabela 7. Kody błędów GATT
Odczyt parametrów beacona
Poszukiwacz może wysłać do dostawcy zapytanie o parametry beacona, wykonując operację zapisu do cechy, która składa się z żądania z tabeli 2 z identyfikatorem danych 0x00. Usługodawca sprawdza, czy podany jednorazowy klucz uwierzytelniający jest zgodny z jednym z kluczy konta zapisanych na urządzeniu.
Jeśli weryfikacja się nie powiedzie, dostawca zwróci błąd nieautoryzowany.
W przypadku powodzenia dostawca wysyła powiadomienie z odpowiedzią z tabeli 6 z identyfikatorem danych 0x00. Dostawca tworzy segment danych w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Moc skalibrowana | Skalibrowana moc odbierana przy 0 m (wartość z zakresu [-100, 20]). Reprezentowana jako liczba całkowita ze znakiem, z rozdzielczością 1 dBm. |
1–4 | uint32 | Wartość zegara | Bieżąca wartość zegara w sekundach (duży endian). |
5 | uint8 | Wybór krzywej | Krzywa eliptyczna używana do szyfrowania:
|
6 | uint8 | Komponenty | Liczba komponentów zdolnych do dzwonienia:
|
7 | uint8 | Funkcje dzwonienia | Obsługiwane opcje:
|
8-15 | tablica bajtów | Dopełnienie | Dodawanie zera do szyfrowania AES. |
Dane powinny być zaszyfrowane algorytmem AES-ECB-128 przy użyciu klucza konta używanego do uwierzytelniania żądania.
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data after
encryption || 0x01)
.
Odczytywanie stanu obsługi administracyjnej beacona
W celu uzyskania informacji o stanie obsługiwania sygnalizatora może on wysłać do dostawcy zapytanie, wykonując operację zapisu do charakterystyki, która składa się z żądania z tabeli 2 o identyfikatorze danych 0x01. Usługodawca sprawdza, czy podany jednorazowy klucz uwierzytelniający jest zgodny z jednym z kluczy konta zapisanych na urządzeniu.
Jeśli weryfikacja się nie powiedzie, dostawca zwróci błąd braku uwierzytelnienia.
W przypadku powodzenia dostawca wysyła powiadomienie z odpowiedzią z tabeli 6 z identyfikatorem danych 0x01. Dostawca tworzy segment danych w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Stan obsługi administracyjnej | Maska bitowa o tych wartościach:
|
1–20 lub 32 | tablica bajtów | Bieżący identyfikator efemeryczny | 20 lub 32 bajty (w zależności od używanej metody szyfrowania) wskazujące bieżący identyfikator tymczasowy reklamowany przez beacon, jeśli został ustawiony na urządzeniu. |
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)
.
Ustawianie klucza tożsamości o krótkim czasie ważności
Aby udostępnić nieskonfigurowanego dostawcę jako sygnał FMDN lub zmienić tymczasowy klucz tożsamości już skonfigurowanego dostawcy, szukający wykonuje operację zapisu do cechy, która składa się z żądania z tabeli 2 z identyfikatorem danych 0x02. Usługodawca weryfikuje, czy:
- Podany jednorazowy klucz uwierzytelniania jest zgodny z kluczem konta właściciela.
- Jeśli podany został skrót efemerycznego klucza tożsamości, zaszyfrowany efemeryczny klucz tożsamości jest zgodny z bieżącym efemerycznym kluczem tożsamości.
- Jeśli nie podano hasha klucza tożsamości tymczasowej, sprawdź, czy dostawca nie został już skonfigurowany jako sygnał FMDN.
Jeśli weryfikacja się nie powiedzie, dostawca zwróci błąd braku uwierzytelnienia.
W przypadku powodzenia klucz tożsamości jest odszyfrowywany przy użyciu klucza konta dopasowanego za pomocą algorytmu AES-ECB-128. Klucz powinien być przechowywany na urządzeniu, a od tego momentu dostawca powinien zacząć reklamować ramki FMDN. Nowy klucz tożsamości tymczasowej zacznie obowiązywać natychmiast po zakończeniu połączenia BLE. Dostawca wysyła powiadomienie z tabeli 6 z identyfikatorem danych 0x02.
Segment uwierzytelniania to pierwsze 8 bajtów pola HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01)
.
Wyczyść efemeryczny klucz tożsamości
Aby odmówić udostępnienia części beacona dostawcy, szukający wykonuje operację zapisu do cechy, która składa się z żądania z tabeli 2 z identyfikatorem danych 0x03. Usługodawca weryfikuje, czy:
- Podany jednorazowy klucz uwierzytelniający jest zgodny z kluczem konta właściciela.
- Zaszyfrowany klucz tożsamości tymczasowej jest zgodny z bieżącym kluczem tożsamości tymczasowej.
Jeśli Dostawca nie będzie udostępniony jako beacon FMDN lub weryfikacja się nie powiedzie, wyświetli się nieuwierzytelniony błąd.
Po udanym działaniu dostawca zapomina klucz i przestaje reklamować ramki FMDN.
Dostawca powiadamia o odpowiedzi z tabeli 6 o identyfikatorze danych 0x03.
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01)
.
Odczytywanie efemerycznego klucza tożsamości za zgodą użytkownika
Ta opcja jest dostępna tylko do odzyskania utracone klucza, ponieważ klucz jest przechowywany tylko lokalnie przez szukającego. Ta funkcja jest dostępna tylko wtedy, gdy urządzenie jest w trybie parowania lub przez ograniczony czas po naciśnięciu fizycznego przycisku na urządzeniu (co stanowi zgodę użytkownika).
Aby móc odzyskać klucz jawny, Seeker musi przechowywać klucz odzyskiwania na zapleczu, ale nie przechowuje samego klucza EIK.
Aby odczytać EIK, Seeker wykonuje operację zapisu do tej cechy, która składa się z żądania z tabeli 3 z identyfikatorem danych 0x04. Dostawca sprawdza, czy:
- Zaszyfrowany klucz odzyskiwania jest zgodny z oczekiwanym kluczem odzyskiwania.
- Urządzenie jest w trybie odzyskiwania EIK.
Jeśli weryfikacja się nie powiedzie, dostawca zwróci błąd braku uwierzytelnienia.
Jeśli urządzenie nie jest w trybie parowania, dostawca zwraca błąd „Brak zgody użytkownika”.
Po udanym działaniu dostawca powiadamia, w odpowiedzi z tabeli 6, używając identyfikatora danych 0x04.
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(recovery key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)
.
Dzwonek
W ramach operacji zapisu do tej cechy (będącej żądaniem z tabeli 4 o identyfikatorze danych 0x05) żądający może poprosić dostawcę o odtworzenie dźwięku. Dostawca tworzy segment danych w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Dzwonienie | Maska bitowa o tych wartościach:
|
1–2 | uint16 | Czas oczekiwania | Limit czasu w decysekundach. Nie może być równa 0 ani większa niż 10 minut. Dostawca używa tej wartości, aby określić, jak długo ma dzwonić, zanim zamilknie. Czas oczekiwania zastępuje ten, który jest już aktywny, jeśli jakikolwiek element urządzenia już dzwoni. Jeśli operacja dzwonienia ma wartość 0x00, limit czasu jest ignorowany. |
3 | uint8 | Głośność |
|
Po otrzymaniu żądania Dostawca sprawdza, czy:
- Podany jednorazowy klucz uwierzytelniania jest zgodny z kluczem Ring.
- Żądany stan odpowiada komponentom, które mogą dzwonić.
Jeśli Dostawca nie będzie udostępniony jako beacon FMDN lub weryfikacja się nie powiedzie, wyświetli się nieuwierzytelniony błąd. Jeśli jednak dostawca ma włączoną ochronę przed niechcianym śledzeniem, a żądanie wywołujące ochronę przed niechcianym śledzeniem miało włączone pole wyboru pomijania uwierzytelniania podczas dzwonienia, dostawca powinien pominąć to sprawdzenie. Dane uwierzytelniające nadal musi podać osoba poszukująca, ale mogą one mieć dowolną wartość.
Gdy dzwonienie się rozpoczyna lub kończy, wysyłane jest powiadomienie zgodnie z tabelą 6 z identyfikatorem danych 0x05. Treść powiadomienia jest określona w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Stan dzwonienia |
|
1 | uint8 | Komponenty dzwonienia | Bitmaska komponentów aktywnie dzwoniących, jak określono w prośbie. |
2–3 | uint16 | Czas oczekiwania | Pozostały czas dzwonienia w decysekundach. Jeśli urządzenie przestało dzwonić, należy zwrócić kod 0x0000. |
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(ring key, protocol major version number || the nonce used to
initiate the ringing command || data ID || data length || additional data ||
0x01)
.
Jeśli po otrzymaniu żądania dzwonienia lub zatrzymania dzwonienia urządzenie jest już w żądanym stanie dzwonienia, dostawca powinien wysłać powiadomienie ze stanem dzwonienia 0x00: Started (Rozpoczęto) lub 0x04: Stopped (Zatrzymano) (żądanie GATT). To żądanie zastępuje parametry bieżącego stanu, dzięki czemu można wydłużyć czas dzwonienia.
Jeśli Dostawca ma przycisk fizyczny (lub włączony czujnik dotykowy), przycisk ten powinien zatrzymywać dzwonek, jeśli zostanie naciśnięty, gdy dzwonek jest aktywny.
Sprawdzanie stanu dzwonienia beaconu
Aby uzyskać stan dzwonienia beacona, Seeker wykonuje operację zapisu w charakterystyce, która składa się z żądania z tabeli 4 o identyfikatorze danych 0x06. Dostawca weryfikuje, czy podany klucz uwierzytelniania jednorazowego jest zgodny z kluczem pierścienia.
Jeśli dostawca nie jest skonfigurowany jako sygnał FMDN lub weryfikacja się nie powiedzie, dostawca zwróci błąd nieautoryzowany.
W przypadku powodzenia dostawca wysyła powiadomienie z odpowiedzią z tabeli 6 z identyfikatorem danych 0x06. Dostawca tworzy segment danych w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Elementy dzwonka | Komponenty aktywnie dzwoniące zgodnie z definicją w żądaniu dzwonienia. |
1–2 | uint16 | Czas oczekiwania | Pozostały czas dzwonienia w decysekundach. Pamiętaj, że jeśli urządzenie nie dzwoni, powinna zostać zwrócona wartość 0x0000. |
Segment uwierzytelniania to pierwsze 8 bajtów pola HMAC-SHA256 (ring key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)
.
Tryb ochrony przed niechcianym śledzeniem
Tryb ochrony przed niechcianym śledzeniem ma umożliwić każdemu klientowi identyfikację urządzeń nadużywanych bez komunikacji z serwerem. Domyślnie dostawca powinien wykonać rotację wszystkich identyfikatorów zgodnie z opisem w sekcji Rotacja identyfikatorów. Usługa Znajdź moje urządzenie może przekazywać prośby o aktywowanie trybu ochrony przed śledzeniem za pomocą sieci Znajdź moje urządzenie. W ten sposób usługa powoduje, że dostawca tymczasowo używa stałego adresu MAC, co umożliwia klientom wykrywanie urządzenia i ostrzeganie użytkownika o możliwym niepożądanym śledzeniu.
Aby aktywować lub dezaktywować tryb ochrony przed niechcianym śledzeniem beacona, Seeker wykonuje operację zapisu związaną z cechą, która składa się z żądania z tabeli 5 o identyfikatorze danych 0x07 lub 0x08.
Podczas włączania trybu ochrony przed niechcianym śledzeniem
Dostawca tworzy segment danych w ten sposób:
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Flagi sterujące |
Flagi są aktywne tylko do momentu dezaktywacji trybu ochrony przed niepożądanym śledzeniem. |
Dostawca weryfikuje, czy podany jednorazowy klucz uwierzytelniający jest zgodny z kluczem ochrony przed niepożądanym śledzeniem. Jeśli dostawca nie jest skonfigurowany jako sygnał FMDN lub weryfikacja się nie powiedzie, zwróci błąd niezweryfikowany.
Gdy włączony jest tryb ochrony przed niechcianym śledzeniem, beacon powinien zmniejszyć częstotliwość rotacji adresów prywatnych MAC do raz na 24 godziny. Reklamowany tymczasowy identyfikator powinien się nadal wyświetlać. Typ klatki powinien być ustawiony na 0 x 41. Stan jest też widoczny w sekcji flagi zaszyfrowane.
Wyłączanie trybu ochrony przed niechcianym śledzeniem
Dostawca sprawdza, czy:
- Podany jednorazowy klucz uwierzytelniania jest zgodny z kluczem ochrony przed niechcianym śledzeniem.
- Zaszyfrowany klucz tożsamości tymczasowej jest zgodny z obecnym kluczem tożsamości tymczasowej.
Jeśli Dostawca nie będzie udostępniony jako beacon FMDN lub weryfikacja się nie powiedzie, dostawca zwróci nieuwierzytelniony błąd.
Gdy tryb ochrony przed niechcianym śledzeniem zostanie dezaktywowany, beacon powinien ponownie zacząć rotować adres MAC z normalną częstotliwością, zsynchronizowaną z rotacją tymczasowych identyfikatorów. Typ ramki powinien być ustawiony z powrotem na 0x40. Ten stan jest również widoczny w sekcji dotyczącej zahaszowanych flag.
Po udanym działaniu dostawca powiadamia, w odpowiedzi z tabeli 6, używając identyfikatora danych 0x07 lub 0x08.
Segment uwierzytelniania to pierwsze 8 bajtów parametru HMAC-SHA256(unwanted tracking protection key, protocol major version number ||
the last nonce read from the characteristic || data ID || data length ||
0x01)
.
Ramki reklamowane
Po udostępnieniu dostawca powinien rozgłaszać ramki FMDN co najmniej raz na 2 sekundy. Jeśli reklamowane są ramki Szybkiego parowania, dostawca powinien przeplatać ramki FMDN w ramkach Szybkiego parowania. Na przykład co 2 sekundy dostawca powinien wyświetlać 7 reklam Fast Pair i 1 reklamę FMDN.
Ramka FMDN zawiera klucz publiczny używany do szyfrowania raportów o lokalizacji przez dowolnego klienta obsługującego, który udostępnia dane crowdsourcingowej sieci. Dostępne są 2 rodzaje kluczy krzywej eliptycznej: 160-bitowy klucz, który pasuje do starszych ramek BLE 4, lub 256-bitowy klucz, który wymaga BLE 5 z rozszerzonymi możliwościami reklamowymi. Którą z krzywych ma być używana, określa implementacja dostawcy.
Struktura ramki FMDN jest taka:
Octet | Wartość | Opis |
---|---|---|
0 | 0x02 | Długość |
1 | 0x01 | Wartość typu danych flagi |
2 | 0x06 | Dane flagi |
3 | 0x18 lub 0x19 | Długość |
4 | 0x16 | Wartość typu danych usługi |
5 | 0xAA | 16-bitowy UUID usługi |
6 | 0xFE | … |
7 | 0x40 lub 0x41 | Typ ramki FMDN z wskazaniem trybu ochrony przed niechcianym śledzeniem |
8..27 | 20-bajtowy identyfikator tymczasowy | |
28 | Zaszyfrowane flagi |
Tabela 8. Ramka FMDN obsługująca krzywą 160-bitową.
Tabela 9 zawiera przesunięcia i wartości bajtów dla krzywej 256-bitowej.
Octet | Wartość | Opis |
---|---|---|
0 | 0x02 | Długość |
1 | 0x01 | Wartość typu danych flagi |
2 | 0x06 | Dane flagi |
3 | 0x24 lub 0x25 | Długość |
4 | 0x16 | Wartość typu danych usługi |
5 | 0xAA | 16-bitowy UUID usługi |
6 | 0xFE | … |
7 | 0x40 lub 0x41 | Typ ramki FMDN z wskazaniem trybu ochrony przed niechcianym śledzeniem |
8..39 | 32-bajtowy identyfikator tymczasowy | |
40 | Zaszyfrowane flagi |
Tabela 9: ramka FMDN obsługująca krzywą 256-bitową.
Obliczanie identyfikatorów efemerycznych (EID)
W wyniku zaszyfrowania następującej struktury danych za pomocą efemerycznego klucza tożsamości jest generowana liczba losowa:
Octet | Pole | Opis |
---|---|---|
0–10 | Dopełnienie | Wartość = 0xFF |
11 | K | Wykładnik okresu obrotu |
12–15 | TS[0]...TS[3] | Licznik czasu beacona w formacie 32-bitowym big-endian. Najniższe bity K są wyczyszczone. |
16–26 | Dopełnienie | Wartość = 0x00 |
27 | K | Wykładnik okresu obrotu |
28–31 | TS[0]...TS[3] | Licznik czasu beacona w formacie 32-bitowym big-endian. Najniższe bity K są czyszczone. |
Tabela 10: tworzenie liczby pseudolosowej.
Wynikiem tego obliczenia jest liczba 256-bitowa oznaczona jako r'
.
W pozostałej części obliczeń do operacji kryptograficznych na krzywej eliptycznej używane są wartości SECP160R1
lub SECP256R1
. Definicje krzywych znajdziesz w sekcji
SEC 2: Recommended Elliptic Curve Domain Parameters (zalecane parametry domeny krzywej eliptycznej), w której zdefiniowano wartości Fp
, n
i G
, do których odwołujemy się w dalszej części artykułu.
Wartość r'
jest teraz rzutowana na ograniczone pole Fp
przez obliczenie r = r' mod n
.
Na koniec oblicz R = r * G
, który jest punktem na krzywej reprezentującym używany klucz publiczny. Beacon reklamuje Rx
, czyli współrzędne x
, jako swój tymczasowy identyfikator.R
Zaszyfrowane flagi
Pole flagi zaszyfrowanej jest obliczane w ten sposób (bity są odwoływane od najbardziej znaczącego do najmniej znaczącego):
- Bity 0–4: zarezerwowane (ustawione na zera).
- Bity 5–6 wskazują poziom baterii urządzenia:
- 00: wskaźnik poziomu naładowania baterii nie jest obsługiwany
- 01: Normalny poziom naładowania baterii
- 10: Niski poziom baterii
- 11. Bardzo niski poziom baterii (wkrótce konieczna będzie wymiana baterii)
- Bit 7 jest ustawiony na 1, jeśli beacon jest w trybie ochrony przed niechcianym śledzeniem, a w przeciwnym razie na 0.
Aby uzyskać ostateczną wartość tego bajtu, należy go złączyć bitowo z najmniej istotnym bajtem wartości SHA256(r)
.
Pamiętaj, że r powinien być dopasowany do rozmiaru krzywej. Dodaj zera jako najważniejsze bity, jeśli jego reprezentacja jest krótsza niż 160 lub 256 bitów. Jeśli natomiast jest krótszy niż 160 lub 256 bitów, najważniejsze bity powinny zostać obcięte.
Jeśli beacon nie obsługuje pomiaru poziomu baterii i nie działa w trybie ochrony przed śledzeniem, można całkowicie pominąć ten bajt w reklamie.
Szyfrowanie z użyciem EID
Aby zaszyfrować wiadomość m
, osoba, która ją zobaczy (czyli odczyta Rx
z beacona), wykona te czynności:
- Wybierz losową liczbę
s
wFp
, zgodnie z definicją w sekcji Obliczanie identyfikatora EID. - Oblicz
S = s * G
. - Oblicz
R = (Rx, Ry)
przez podstawianie w równaniu krzywej i wybranie dowolnej wartościRy
z możliwych wyników. - Oblicz 256-bitowy klucz AES
k = HKDF-SHA256((s * R)x)
, gdzie(s * R)x
to współrzędnax
wyniku mnożenia krzywej. Nie podano ciągu zaburzającego. - Niech
URx
iLRx
będą odpowiednio górnymi i dolnymi 80 bitami wartościRx
w formacie big-endian. W podobny sposób zdefiniuj wartościUSx
iLSx
dla atrybutuS
. - Obliczanie
nonce = LRx || LSx
. - Oblicz
(m’, tag) = AES-EAX-256-ENC(k, nonce, m)
. - Wyślij
(URx, Sx, m’, tag)
do właściciela, prawdopodobnie za pomocą niezaufanego zdalnego serwera.
Odszyfrowywanie wartości zaszyfrowanych za pomocą identyfikatora EID
Klient właściciela, który ma klucz EIK i wykładnik okresu rotacji, odszyfrowuje wiadomość w ten sposób:
- Na podstawie wartości
URx
uzyskaj wartość licznika czasu beacona, na którym opiera sięURx
. Może to zrobić klient właściciela, który oblicza wartościRx
dla wartości licznika czasu obrazu typu beacon dla niedalekiej i najbliższej przyszłości. - Na podstawie wartości licznika czasu beacona, na którym opiera się
URx
, oblicz przewidywaną wartośćr
zgodnie z definicją w sekcji Obliczanie identyfikatora EID. - Oblicz
R = r * G
i sprawdź dopasowanie do wartościURx
podanej przez narzędzie. - Oblicz
S = (Sx, Sy)
przez podstawianie w równaniu krzywej i wybranie dowolnej wartościSy
z możliwych wyników. - Oblicz
k = HKDF-SHA256((r * S)x)
, gdzie(r * S)x
to współrzędnax
wyniku mnożenia krzywej. - Oblicz
nonce = LRx || LSx
. - Obliczanie
m = AES-EAX-256-DEC(k, nonce, m’, tag)
.
Rotacja identyfikatorów
Do wyświetlania reklam ramek FMDN należy używać możliwego (RPA) lub nierozsądnego (NRPA) adresu BLE. RPA jest wymagana w przypadku urządzeń z technologią LE Audio (LEA) i zalecana w przypadku innych urządzeń, z wyjątkiem tagów lokalizacyjnych, które nie korzystają z wiązania.
Reklama Szybkiego parowania, reklama FMDN i odpowiednie adresy BLE powinny być wyświetlane naprzemiennie. Rotacja powinna następować średnio co 1024 sekundy. Precyzyjny punkt, w którym beacon zaczyna reklamować nowy identyfikator, musi być losowy w oknie.
Zalecanym sposobem losowego przydzielania czasu rotacji jest ustawienie go na następny przewidywany czas rotacji (jeśli nie zastosowano randomizacji) plus dodatnie, losowo ujęty współczynnik czasu w zakresie od 1 do 204 sekund.
Gdy urządzenie jest w trybie ochrony przed niepożądanym śledzeniem, adres BLE reklamy FMDN powinien być stały, ale RPA dla reklamy FP, która nie może być wykryta (np. Fast Pair), musi się nadal wyświetlać. Możesz używać różnych adresów w przypadku różnych protokołów.
Przywracanie danych po utracie zasilania
Rozwiązanie tymczasowego identyfikatora jest ściśle powiązane z wartością zegara w momencie wyświetlenia reklamy, dlatego ważne jest, aby dostawca mógł odzyskać wartość zegara w przypadku utraty zasilania. Zalecamy, aby dostawca zapisywał bieżącą wartość zegara w pamięci nieulotnej co najmniej raz dziennie, a podczas uruchamiania sprawdzał, czy w pamięci nieulotnej jest obecna wartość, z której można zainicjować urządzenie. Rozwiązania identyfikatora ulotnego byłyby wdrażane w okresie wystarczającym do uwzględnienia zarówno rozsądnego przesunięcia zegara, jak i tego typu odzyskiwania po utracie zasilania.
Dostawcy powinni jednak dołożyć wszelkich starań, aby zminimalizować odchylenia zegara, ponieważ okno czasu rozdzielania jest ograniczone. Należy zastosować co najmniej jedną dodatkową metodę synchronizacji zegara (reklamowe niewykrywalne ramki Fast Pair lub wdrożenie strumienia wiadomości).
Wskazówki dotyczące implementacji Szybkiego parowania
W tej sekcji opisujemy szczególne aspekty implementacji Szybkiego parowania w przypadku dostawców, którzy obsługują FMDN.
Wytyczne dotyczące konkretnych tagów lokalizatora
- Jeśli dostawca został sparowany, ale FMDN nie został skonfigurowany w ciągu 5 minut (lub jeśli aktualizacja OTA została zastosowana, gdy urządzenie jest sparowane, ale nie zostało skonfigurowane do obsługi FMDN), dostawca powinien przywrócić konfigurację fabryczną i wyczyścić zapisane klucze konta.
- Po sparowaniu dostawca nie powinien zmieniać adresu MAC, dopóki nie zostanie skonfigurowany FMDN lub nie upłynie 5 minut.
- Jeśli tymczasowy klucz tożsamości zostanie wyczyszczony z urządzenia, urządzenie powinno przywrócić ustawienia fabryczne i wyczyścić również zapisane klucze kont.
- Dostawca powinien odrzucać normalne próby parowania przez Bluetooth i akceptować wyłącznie parowanie przez Szybkie parowanie.
- Dostawca musi uwzględnić mechanizm, który umożliwia użytkownikom tymczasowe wstrzymanie wyświetlania reklam bez przywracania urządzenia do ustawień fabrycznych (np. przez naciśnięcie kombinacji przycisków).
- Po utracie zasilania urządzenie powinno wyświetlać niewykrywalne ramki Szybkiego parowania do czasu następnego wywołania parametrów odczytu beacona. Dzięki temu wykrywacz może wykryć urządzenie i zsynchronizować zegar nawet wtedy, gdy wystąpiła znaczna zmiana zegara.
- W przypadku reklamowania niewykrywalnych ramek Szybkiego parowania nie należy włączać wskazań interfejsu.
- Ramki Szybkiego parowania, które można wykryć, nie powinny być reklamowane, gdy dostawca jest udostępniany w ramach FMDN.
- Dostawca nie może ujawniać żadnych informacji umożliwiających identyfikację w sposób niezaufamy (np. imion lub identyfikatorów).
Wskazówki dla konkretnych urządzeń Bluetooth
W tej sekcji opisano specjalne aspekty klasycznych urządzeń Bluetooth, które obsługują FMDN.
Wdrażanie FMDN na już sparowanych urządzeniach
Dostawca nie zawsze jest przygotowany do obsługi FMDN podczas parowania z poszukiwaczem, ale po chwili to nastąpi. W takim przypadku dostawca może nie mieć aktualnego adresu MAC BLE, który jest wymagany do nawiązania połączenia GATT. Dostawca musi obsługiwać co najmniej 1 z tych sposobów uzyskania adresu BLE przez poszukującego, gdy urządzenie jest już sparowane:
- Dostawca może okresowo reklamować dane konta Szybkiego parowania, które umożliwiają Poszukiwaczowi znalezienie adresu BLE za pomocą skanowania BLE.
To podejście jest odpowiednie dla dostawców, którzy nie wdrażają strumienia wiadomości. - Dostawca może udostępniać te dane za pomocą strumienia wiadomości Szybkiego parowania w ramach klasycznego Bluetootha.
To podejście sprawdzi się w przypadku dostawców, którzy nie reklamują ramek Szybkiego parowania, gdy są połączeni z urządzeniem Seeker przez Bluetooth.
Stosowanie obu tych metod zwiększa szanse na udostępnienie urządzenia przez użytkownika w ramach FMDN.
Strumień wiadomości przy użyciu Szybkiego parowania
Dostawca może stosować strumień wiadomości Szybkiego parowania, aby powiadamiać żądającego o informacje o urządzeniu. Zaimplementowanie strumienia wiadomości umożliwia korzystanie z pewnych funkcji opisanych w tej sekcji.
Dostawca powinien wysyłać wiadomości z informacjami o urządzeniu za każdym razem, gdy zostanie nawiązany kanał przesyłania strumieniowego RFCOMM.
Wersja oprogramowania (kod informacji o urządzeniu 0x09) i możliwość śledzenia
Gdy aktualizacja oprogramowania sprzętowego dodaje obsługę FMDN do dostawcy, połączony poszukiwacz może powiadomić użytkownika o tym i zaproponować wdrożenie. W przeciwnym razie użytkownik musi ręcznie przejść do listy urządzeń Bluetooth, aby rozpocząć konfigurowanie FMDN.
Aby to umożliwić, dostawca powinien użyć właściwości Wersja oprogramowania układowego (kod 0x09), aby przekazać wartość ciągu znaków reprezentującą wersję oprogramowania układowego. Dodatkowo dostawca powinien obsługiwać protokół, który informuje poszukującego o zmianach w możliwościach spowodowanych aktualizacjami oprogramowania.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Zdarzenie z informacjami o urządzeniu | 0x03 |
1 | uint8 | Wersja oprogramowania | 0x09 |
2–3 | uint16 | Długość dodatkowych danych | różni się |
var | tablica bajtów | Ciąg znaków wersji | zmienia się |
Tabela 11. Zdarzenie dotyczące informacji o urządzeniu: zaktualizowana wersja oprogramowania.
Po otrzymaniu żądania aktualizacji możliwości (0x0601) jeśli dostawca włączył obsługę śledzenia FMDN, powinien odpowiedzieć, jak pokazano w tabeli 12.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Zdarzenie synchronizacji funkcjonalności urządzenia | 0x06 |
1 | uint8 | Śledzenie FMDN | 0x03 |
2–3 | uint16 | Dodatkowa długość danych | 0x0007 |
4 | uint8 | Stan obsługi administracyjnej FMDN | 0x00, jeśli nie jest obsługiwany; 0x01, jeśli jest obsługiwany przez dowolne konto |
5–10 | tablica bajtów | Bieżący adres MAC urządzenia z BLE | zmienia się |
Tabela 12. Zdarzenie synchronizacji możliwości urządzenia – dodana funkcja śledzenia.
Obecny identyfikator efemeryczny (kod informacji o urządzeniu 0x0B)
Dostawca może używać bieżącego identyfikatora tymczasowego (kod 0x0B), aby zgłaszać bieżący identyfikator EID i wartość zegara, gdy dostawca jest skonfigurowany pod kątem FMDN, aby zsynchronizować Seekera w przypadku przesunięcia zegara (np. z powodu wyczerpania baterii). W przeciwnym razie w tym celu inicjuje droższe i mniej niezawodne połączenie.
Octet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Zdarzenie z informacjami o urządzeniu | 0x03 |
1 | uint8 | Bieżący identyfikator tymczasowy | 0x0B |
2–3 | uint16 | Długość dodatkowych danych | 0x0018 lub 0x0024 |
4–7 | tablica bajtów | Wartość zegara | Przykład: 0x13F9EA80 |
8–19 lub 31 | tablica bajtów | Bieżący identyfikator EID | Przykład: 0x1122334455667788990011223344556677889900 |
Tabela 13. Zdarzenie dotyczące informacji o urządzeniu: synchronizacja zegara
Przywrócono ustawienia fabryczne
W przypadku urządzeń, które obsługują przywracanie do ustawień fabrycznych: jeśli zostanie wykonane przywracanie do ustawień fabrycznych, dostawca musi zatrzymać beaconing i usunąć klucz tożsamości tymczasowej oraz wszystkie przechowywane klucze konta, w tym klucz konta właściciela.
Po przywróceniu ustawień fabrycznych (ręcznie lub programowo) dostawca nie powinien od razu reklamować funkcji Fast Pair, aby zapobiec uruchamianiu procesu parowania natychmiast po usunięciu urządzenia przez użytkownika.
Zapobieganie niechcianemu śledzeniu
Certyfikowane urządzenia FMDN muszą też spełniać wymagania określone w wersji implementacji specyfikacji międzyplatformowej Detecting Unwanted Location Trackers (DULT).
Odpowiednie wytyczne dotyczące FMDN, aby zachować zgodność ze specyfikacją DULT:
- Każde urządzenie zgodne z FMDN musi być zarejestrowane w Konsoli urządzeń w pobliżu i mieć włączoną funkcję „Znajdź moje urządzenie”.
- Urządzenie musi obsługiwać usługę niebędącą właścicielem akcesorium i charakter zdefiniowaną w wersji implementacji specyfikacji DULT, w tym w operacjach dotyczących informacji o akcesoriach i ustawieniach innych niż właściciel.
- W okresie zgodności wstecznej, zgodnie ze specyfikacją DULT, nie ma żadnych zmian w reklamowanym interfejsie, zgodnie z definicją w tym dokumencie.
- „Tryb ochrony przed niepożądanym śledzeniem” zdefiniowany w tym dokumencie odpowiada „oddzielnemu stanowi” zdefiniowanemu w specyfikacji DULT.
- Wytyczne dotyczące wdrażania kodów operacyjnych informacji o akcesoriach:
- Funkcja Get_Product_Data powinna zwracać identyfikator modelu podany przez konsolę bez dopełnienia, aby spełniał wymagania dotyczące 8 bajtów. Na przykład identyfikator modelu 0xFFFFFF jest zwracany jako 0x0000000000FFFFFF.
- Wartości Get_Manufacturer_Name i Get_Model_Name powinny być zgodne z wartościami podanymi w konsoli.
- Get_Accessory_Category może zwracać ogólną wartość „Tracker lokalizacji”, jeśli żadna inna kategoria nie pasuje do typu urządzenia.
- Wartość Get_Accessory_Capabilities musi wskazywać obsługę dzwonka oraz wyszukiwanie identyfikatora BLE.
- Wartość Get_Network_ID powinna zwracać identyfikator Google (0x02).
- Wskazówki dotyczące implementowania kodu operacji Get_Identifier:
- Operacja powinna zwracać prawidłową odpowiedź tylko przez 5 minut od momentu, gdy użytkownik aktywował tryb „identyfikacji”, który wymaga naciśnięcia kilku przycisków. Użytkownik powinien zostać poinformowany o wejściu dostawcy w ten tryb za pomocą sygnału wizualnego lub dźwiękowego. Instrukcje dotyczące aktywacji tego trybu, które są specyficzne dla danego modelu, muszą zostać przekazane Google jako wymagania certyfikacyjne co najmniej 10 dni przed aktualizacją lub zmianą instrukcji.
- Odpowiedź jest konstruowana w ten sposób: pierwsze 10 bajtów bieżącego tymczasowego identyfikatora, a następnie pierwsze 8 bajtów
HMAC-SHA256(recovery key, the truncated current ephemeral identifier)
.
- Wskazówki dotyczące wdrażania identyfikatora przez NFC:
- Jako adresu URL użyj
find-my.googleapis.com/lookup
. - Jako parametr
e
użyj tej samej odpowiedzi, która została utworzona w przypadku metody Get_Identifier, zakodowanej w szeszxie. - Jako parametr
pid
użyj tej samej odpowiedzi, która została utworzona dla Get_Product_Data, zakodowanej w systemie szesnastkowym.
- Jako adresu URL użyj
- Wskazówki dotyczące implementacji kodu operacji Sound_Start:
- Polecenie powinno wywołać dzwonienie we wszystkich dostępnych komponentach.
- Należy użyć maksymalnej obsługiwanej objętości.
- Zalecana długość dzwonienia to 12 sekund.
- Tagi lokalizatora muszą zawierać mechanizm, który umożliwia użytkownikom tymczasowe wstrzymanie wyświetlania reklam bez przywracania urządzenia do ustawień fabrycznych (np. przez naciśnięcie kombinacji przycisków).
- Instrukcje wyłączenia muszą być opisane w dostępnym publicznie adresie URL i przekazane Google jako wymagane do uzyskania certyfikatu co najmniej 10 dni przed aktualizacją lub modyfikacją instrukcji.
- Adres URL powinien obsługiwać lokalizację. W zależności od klienta język zostanie podany jako parametr zapytania („hl=pl”) lub za pomocą nagłówka HTTP „accept-language”.
Wytyczne dotyczące protokołów z możliwością przełączania
- Należy używać tylko jednego protokołu naraz. Upewnij się, że na urządzeniu może działać jednocześnie tylko jedna sieć. To wymaganie jest niezbędne, aby zapobiec łączeniu poufnych danych użytkownika między różnymi protokołami.
- Zaleca się wdrożenie na urządzeniu procesu twardego resetu, który pozwala użytkownikowi ponownie skonfigurować urządzenie przy użyciu innej sieci.
- Proces aktualizacji urządzenia do sieci powinien być przyjazny dla użytkownika i równy w różnych sieciach. Użytkownik musi mieć możliwość wyboru sieci, której chce używać, bez faworyzowania którejkolwiek z nich. Ten proces musi zostać zatwierdzony przez zespół Google.
Aktualizacje oprogramowania
Procesem i dystrybucją aktualizacji OTA powinien zarządzać partner, korzystając z własnego przepływu pracy w aplikacji mobilnej lub aplikacji internetowej.
Zgodność
Sieć usługi Znajdź moje urządzenie wymaga włączenia usług lokalizacyjnych i Bluetootha. Wymaga zasięgu sieci komórkowej lub połączenia z internetem. Usługa działa na urządzeniach z Androidem 9 lub nowszym oraz w niektórych krajach. Obowiązują ograniczenia wiekowe.
Historia zmian
Wersja FMDN | Data | Komentarz |
---|---|---|
v1 | Pierwsza wersja specyfikacji FMDN na potrzeby wcześniejszego dostępu. | |
v1.1 | luty 2023 r. |
|
1.2 | Kwiecień 2023 r. |
|
v1.3 | grudzień 2023 r. |
|