Cechy

Usługa Szybkie parowanie

Dostawca szybkiego parowania musi mieć następującą usługę GATT.

Usługa UUID
Usługa Szybkie parowanie 0xFE2C

Usługa ta powinna mieć następujące cechy:

Charakterystyka usługi Szybkiego parowania Zaszyfrowane Uprawnienia UUID
Identyfikator modelu Nie Odczyt FE2C1233-8366-4814-8EB0-01DE32100BEA
Parowanie na podstawie klucza Nie Pisanie i powiadamianie FE2C1234-8366-4814-8EB0-01DE32100BEA
Klucz dostępu Nie Napisz i powiadom FE2C1235-8366-4814-8EB0-01DE32100BEA
Klucz konta Nie Zapis FE2C1236-8366-4814-8EB0-01DE32100BEA

Usługa informacji o urządzeniu

Dostawca szybkiego parowania powinien też obsługiwać usługę informacji o urządzeniu.

Usługa UUID
Usługa informacji o urządzeniu 0x180A

Poszukiwacz Szybkiego parowania używa tych cech.

Nazwa Zaszyfrowane Uprawnienia UUID
Wersja oprogramowania Nie Odczyt 0x2A26

Cecha: identyfikator modelu

Ta cecha umożliwia Poszukującemu odczytanie identyfikatora modelu w razie potrzeby, poza sytuacjami, gdy urządzenie rozgłasza się w trybie wykrywalnym. Powinien zawsze zwracać te dane:

Oktet Typ danych Opis Wartość
0–2 uint24 Identyfikator modelu różne

Charakterystyka: parowanie oparte na kluczach

Ta charakterystyka kontroluje procedurę parowania opartego na kluczu. W tej procedurze określony poziom zaufania jest ustalany przez sprawdzenie, czy Poszukujący i Dostawca mają klucz PSK. W każdym przypadku klucz jest inny:

  • Przypadek 1. Klucz PSK jest oparty na parze kluczy publiczny/prywatny zapobiegającej podszywaniu się oraz na parze kluczy publiczny/prywatny urządzenia poszukującego, która zmienia się przy każdej próbie sparowania.

    • Urządzenie jest w trybie parowania.
    • Poszukiwacz sprawdza, czy Dostawca posiada klucz prywatny zapobiegający spoofingowi.

    Pamiętaj, że w trybie parowania dostawca może też oczywiście parować urządzenia w zwykły sposób, na przykład w celu sparowania z urządzeniem, które nie obsługuje parowania opartego na kluczach w ramach Szybkiego parowania.

  • Przypadek 2. Klucz PSK jest jednym z kluczy konta.

    • Dostawca zwykle nie jest w trybie parowania. (Nie jest to jednak wymagane – dostawca powinien obsługiwać klucz konta nawet w trybie parowania).
    • Poszukiwacz i Dostawca sprawdzają, czy druga strona ma klucz konta.

Oba przypadki są bardzo podobne, z wyjątkiem używanego klucza PSK, dlatego zostały połączone w procedurze.

Format danych

Zobacz procedurę, aby dowiedzieć się, jak używać poszczególnych formatów.

Oktet Typ danych Opis Wartość Obowiązkowe?
0–15 uint128 Zaszyfrowane żądanie różne Obowiązkowe
16–79 Klucz publiczny różne Opcjonalny

Tabela 1.1: zaszyfrowane żądanie zapisane w charakterystyce przez urządzenie wyszukujące.

Oktet Typ danych Opis Wartość Obowiązkowe?
0 uint8 Typ komunikatu 0x00 = prośba o parowanie na podstawie klucza Obowiązkowe
1 uint8 Flagi
  • Bit 0 (MSB): wycofany i ignorowany przez Seeker.
  • Bit 1: 1, jeśli poszukujący prosi dostawcę o rozpoczęcie wiązania, a to żądanie zawiera adres BR/EDR poszukującego. W przeciwnym razie zwraca 0.
  • Bit 2: 1, jeśli urządzenie poszukujące prosi, aby dostawca powiadomił o istniejącej nazwie. W przeciwnym razie zwraca 0.
  • Bit 3: 1, jeśli dotyczy to wstecznego zapisu klucza konta. W przeciwnym razie zwraca 0.
  • Bity 4–7 są zarezerwowane do wykorzystania w przyszłości i należy je ignorować.
różni się Obowiązkowe
2–7 uint48 Jeden z tych warunków:
  • Obecny adres BLE dostawcy
  • Adres publiczny dostawcy
różni się Obowiązkowe
8–13 uint48 Adres BR/EDR urządzenia wyszukującego różne Występuje tylko wtedy, gdy ustawiony jest bit 1 lub 3 flag
n - 15 losowa wartość (ciąg zaburzający), różne Obowiązkowe

Tabela 1.2.1. Surowe żądanie (typ 0x00). odszyfrowane z zaszyfrowanego żądania w tabeli 1.1.

Oktet Typ danych Opis Wartość Obowiązkowe?
0 uint8 Typ komunikatu 0x10 = prośba o działanie Obowiązkowe
1 uint8 Flagi różne Obowiązkowe
2–7 uint48 Jeden z tych warunków:
  • Obecny adres BLE dostawcy
  • Adres publiczny dostawcy
różni się Obowiązkowe
8 uint8 Wyślij wiadomość do grupy różne Wymagane, jeśli ustawiono bit 0 flagi
9 uint8 Kod wiadomości różne Wymagane, jeśli ustawiono bit 0 flagi
10 uint8 Zależy od flag:
  • Bit 0 jest ustawiony: długość danych dodatkowych jest mniejsza niż 6
  • Bit 1 jest ustawiony: identyfikator danych
różne Wymagane, jeśli ustawiono bit flagi 0 lub 1
11 - n Dodatkowe dane różne Opcjonalny
n – 15 losowa wartość (ciąg zaburzający), różne Obowiązkowe

Tabela 1.2.2. Żądanie nieprzetworzone (typ 0x10). Odszyfrowane z zaszyfrowanego żądania w tabeli 1.1.

Oktet Typ danych Opis Wartość
0 uint8 Typ komunikatu 0x01 = odpowiedź dotycząca parowania na podstawie klucza
1–6 uint48 Publiczny adres (BR/EDR) dostawcy różne
7–15 Wartość losowa (sól) różni się

Tabela 1.3. Odpowiedź nieprzetworzona. Zaszyfrowane w celu wygenerowania zaszyfrowanej odpowiedzi w tabeli 1.4.

Oktet Typ danych Opis Wartość
0–15 uint128 Zaszyfrowana odpowiedź różne

Tabela 1.4. Zaszyfrowana odpowiedź wysłana przez dostawcę do osoby poszukującej za pomocą powiadomienia.

Cechy: klucz dostępu

Ta charakterystyka jest używana podczas procedury parowania opartego na kluczach.

Oktet Typ danych Opis Wartość
0–15 uint128 Zaszyfrowany blok klucza dostępu różne

Tabela 2.1. Blok zaszyfrowanego klucza dostępu. See Key-based Pairing procedure for usage.

Oktet Typ danych Opis Wartość
0 uint8 Typ komunikatu Jedna z tych wartości:
  • 0x02 = klucz dostępu poszukiwacza
  • 0x03 = klucz dostępu dostawcy,
1–3 unit32 6-cyfrowy klucz dostępu różni się
4–15 Losowa wartość (salt) różni się

Tabela 2.2. Nieprzetworzony blok klucza dostępu. Odszyfrowana wersja Tabeli 2.1.

Cecha: klucz konta

Po sparowaniu Szybkie parowanie (urządzenie poszukujące) zapisze klucz konta na urządzeniu udostępniającym Szybkie parowanie.

Oktet Typ danych Opis Wartość
0–15 uint128 Klucz konta (zaszyfrowany) różni się

Po otrzymaniu żądania zapisu dostawca Szybkiego parowania powinien wykonać te czynności:

  1. Odszyfruj klucz konta za pomocą udostępnionego hasła wygenerowanego w kroku 4 w procedurze.
    • W przypadku dostawców, którzy wymagają kaucji (często):
      • Przed odszyfrowaniem sprawdź, czy do odszyfrowania żądania klucza dostępu z kroku 12 użyto tajnego klucza. Jeśli ten krok nie został wykonany przy użyciu tego klucza tajnego, zignoruj ten zapis i zakończ działanie.
    • Na tym etapie klucz tajny (K w procedurze) nie będzie już używany w przypadku tego parowania. Wszelkie żądania, które zostaną zaszyfrowane tym kluczem bez ponownego uruchomienia procedury, powinny zostać odrzucone.
  2. Sprawdź, czy odszyfrowana wartość zaczyna się od 0x04 lub 0xFF. Jeśli nie, zignoruj ten zapis i zamknij.
    • Jeśli wartością jest 0x04:
      • Sprawdź, czy w utrwalonej liście kluczy konta jest miejsce na nową wartość.
      • Jeśli nie, usuń z listy najmniej używaną wartość.
      • Dodaj nową wartość do listy.
    • Jeśli wartością jest 0xFF:
      • Traktuj to jako tymczasową sesję parowania i nie wykonuj żadnych działań.
      • Może się to zdarzyć w przypadku procesu Zapisywanie klucza konta z mocą wsteczną.
      • Nie przechowuj klucza i nie używaj go na liście kluczy konta, do szyfrowania ani do obliczeń MAC.
      • Usunięcie powiązania jest wywoływane przez zdarzenie specyficzne dla funkcji lub przekroczenie limitu czasu. W przypadku udostępniania dźwięku LE zdecydowanie zalecamy usunięcie powiązania BLE i klucza połączenia po 10 minutach od rozłączenia sesji tymczasowej.

Klucze konta na liście są używane podczas parowania opartego na kluczach.

Cecha: wersja oprogramowania układowego

Ta charakterystyka umożliwia Poszukującemu odczytywanie wersji oprogramowania układowego Dostawcy w razie potrzeby. Powinien zawsze zwracać te dane:

Oktet Typ danych Opis Wartość
0 – var utf8s Kod wersji oprogramowania układowego różni się

Powinno być ono zawarte w jednym ciągu znaków UTF-8, nawet jeśli dostawca ma więcej niż 1 oprogramowanie układowe (np. 3 oprogramowania układowe dla lewej słuchawki, prawej słuchawki i etui). Dostawca może też zwracać określone ciągi znaków w przypadkach specjalnych:

  1. status-updating: jeśli dostawca aktualizuje obecnie oprogramowanie układowe do nowej wersji. Dostawca może też zwrócić wersję przygotowanego oprogramowania.

  2. status-abnormal: jeśli dostawca jest w stanie nieprawidłowym. Na przykład nie działa prawidłowo, ponieważ nie udało się zaktualizować oprogramowania. Ta wartość spowoduje wyświetlenie przez wyszukiwarkę komunikatu informującego użytkownika o konieczności natychmiastowej aktualizacji.

Dostawca powinien ograniczyć dostęp do charakterystyki wersji oprogramowania układowego, aby zapobiec śledzeniu urządzenia. Sugerowane ograniczenia:

  • sparowane urządzenia powinny mieć dostęp w dowolnym momencie;
  • każde urządzenie powinno mieć dostęp, gdy dostawca jest wykrywalny;

Jeśli dostawca obsługuje Centrum lokalizacji, wymagane jest dodatkowe wdrożenie. Więcej informacji znajdziesz w artykule Aktualizacje oprogramowania Centrum lokalizacji.

Cechy: dane dodatkowe

Ta usługa ma następujące cechy:

Charakterystyka usługi Szybkiego parowania Zaszyfrowane Uprawnienia UUID
Dane Nie Napisz i powiadom FE2C1237-8366-4814-8EB0-01DE32100BEA
Stara charakterystyka usługi Szybkie parowanie (wycofana 1 stycznia 2021 r.) Zaszyfrowane Uprawnienia UUID
Dane Nie Pisanie i powiadamianie 0x1237

Przed zapisaniem lub powiadomieniem o tej charakterystyce musi nastąpić uzgadnianie połączenia za pomocą charakterystyki FE2C1234-8366-4814-8EB0-01DE32100BEA, aby uzyskać udostępnione hasło. Do szyfrowania danych przepływających przez tę charakterystykę będzie używany algorytm AES-CTR, który został zdefiniowany poniżej. Ten tryb jest bezpieczniejszy w przypadku danych, które wykraczają poza pojedynczy blok 16-bajtowy. Do zapewnienia integralności danych będzie używany algorytm HMAC-SHA256, który również jest zdefiniowany poniżej.

Oktet Opis Wartość
czasami Pierwsze 8 bajtów HMAC-SHA256. różne
8–15 Wartość nonce używana przez szyfrowanie AES-CTR. różne
16 - var Zaszyfrowane dane. różni się

Tabela 3.1. Pakiet danych wysyłany przez dostawcę do poszukującego za pomocą powiadomienia lub przez poszukującego do dostawcy za pomocą zapisu.

Oktet Typ danych Opis Wartość
0 – var byte array Dane różni się, zdekoduj go zgodnie z identyfikatorem danych tabeli 1.2.2:
  • 0x01(spersonalizowana nazwa): utf8s

Tabela 3.2. Nieprzetworzone dane. Odszyfrowane z zaszyfrowanych danych w tabeli 3.1.

Gdy zostanie wysłana prośba o powiadomienie (np. prośba o spersonalizowaną nazwę za pomocą bitu 2 w tabeli 1.2.1), dostawca Szybkiego parowania musi wykonać te czynności:

  1. Wygeneruj kryptograficznie losowe 8 bajtów dla liczby jednorazowej.
  2. Zaszyfruj dane za pomocą AES-CTR, gdzie każdy 16-bajtowy blok jest generowany przy użyciu

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    gdzie

    1. Klucz AES to udostępnione hasło z kroku 4 w procedurze.
    2. clearBlock[i] to 16-bajtowy blok zaczynający się od data[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
  3. Wykonaj funkcję concat(encryptedBlock[0], encryptedBlock[1],...), aby utworzyć zaszyfrowane dane.

  4. Wygeneruj HMAC-SHA256 za pomocą

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    gdzie

    1. K jest generowane przez concat(shared_secret, 48-byte ZEROs), gdzie shared_secret pochodzi z kroku 4 procedury.
    2. opad to 64-bajtowe zewnętrzne dopełnienie składające się z powtarzających się bajtów o wartości 0x5C.
    3. ipad to 64-bajtowe dopełnienie wewnętrzne, składające się z powtarzających się bajtów o wartości 0x36.
  5. Pierwsze 8 bajtów z HMAC-SHA256 traktuj jako prefiks pakietu danych.

Po otrzymaniu żądania zapisu dostawca Szybkiego parowania powinien wykonać te czynności:

  1. Sprawdź integralność danych, weryfikując pierwsze 8 bajtów HMAC-SHA256.
  2. Odszyfruj zaszyfrowane dane za pomocą AES-CTR, gdzie każdy blok jest generowany przy użyciu

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    gdzie

    1. encryptedBlock[i] to 16-bajtowy blok rozpoczynający się od encrypted_data[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
    2. Klucz AES jest generowany lub identyfikowany na podstawie uzgadniania, np.
      1. w przepływie nazewnictwa 1 pochodzi z ECDH i nie będzie ponownie używana w tym parowaniu. Wszelkie żądania, które zostaną zaszyfrowane tym kluczem bez ponownego uruchomienia procedury, powinny zostać odrzucone.
      2. w procesie nadawania nazw 2 jest to klucz konta.
  3. Wykonaj concat(clearBlock[0], clearBlock[1],...), aby utworzyć nieprzetworzone dane.