Cechy

Usługa szybkiego parowania

Dostawca szybkiego parowania będzie korzystał z poniższej usługi GATT.

Usługa UUID
Usługa szybkiego parowania 0xFE2C

Ta usługa powinna mieć następujące cechy.

Charakterystyka usługi szybkiego parowania Zaszyfrowano Uprawnienia UUID
Identyfikator modelu Nie Odczyt FE2C1233-8366-4814-8EB0-01DE32100BEA
Parowanie na podstawie klucza Nie Napisz i powiadom 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 z urządzenia

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

Usługa UUID
Usługa informacji z urządzenia 0x180A

Funkcja wyszukiwania szybkiego parowania używa poniższych cech.

Nazwa Zaszyfrowano Uprawnienia UUID
Wersja oprogramowania Nie Odczyt 0x2A26

Cecha: identyfikator modelu

Ta cecha umożliwia poszukiwającym odczytywanie identyfikatora modelu w razie potrzeby poza czasem, gdy urządzenie reklamuje się w trybie wykrywalnym. Powinien zawsze zwracać następujące dane:

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

Cecha: parowanie na podstawie klucza

Ta cecha steruje procedurą parowania na podstawie klucza. W ramach tej procedury ustanawia się pewien poziom zaufania poprzez sprawdzenie, czy poszukiwacz i dostawca mają odpowiedni klucz PSK. Klucz jest inny w każdym przypadku:

  • Przypadek 1: klucz wstępny opiera się na parze kluczy publiczny/prywatny służący do zapobiegania podszywaniu się oraz własnej pary kluczy (publicznego/prywatnego) osoby poszukiwającej, która zmienia się przy każdej próbie parowania.

    • Dostawca jest w trybie parowania.
    • Seeker sprawdza, czy dostawca jest w posiadaniu klucza prywatnego służącego do zapobiegania podszywaniu się.

    Pamiętaj, że w trybie parowania Dostawca może też oczywiście sparować się w zwykły sposób, na przykład, aby sparować z urządzeniem, które nie obsługuje parowania za pomocą Szybkiego parowania.

  • Przypadek 2: klucz PSK jest jednym z kluczy konta.

    • Dostawca zazwyczaj nie jest w trybie parowania. (Nie jest to jednak wymogiem – Dostawca powinien obsługiwać użycie klucza konta nawet w trybie parowania).
    • Poszukiwacz i dostawca sprawdzają, czy druga osoba ma klucz konta.

Oba przypadki są bardzo podobne z wyjątkiem użycia klucza wstępnego, dlatego są one łączone w procedurze.

Format danych

Sposób używania poszczególnych formatów znajdziesz w procedurze.

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

Tabela 1.1. Zaszyfrowane żądanie zapisane z charakterem przez Poszukiwacza.

Oktet Typ danych Opis Wartość Obowiązkowe?
0 uint8 Typ wiadomości 0x00 = prośba o sparowanie na podstawie klucza Obowiązkowe
1 uint8 Flagi
  • Bit 0 (MSB): wycofany i ignorowany przez Seeker.
  • Bit 1: 1, jeśli poszukiwacz żąda, aby dostawca zainicjował powiązanie, i to żądanie zawiera adres BR/EDR poszukiwacza. W przeciwnym razie ma wartość 0.
  • Bit 2: 1, jeśli poszukiwacz zażąda, aby Dostawca powiadomił istniejącą nazwę. W przeciwnym razie ma wartość 0.
  • Bit 3: 1, jeśli dotyczy wcześniejszego zapisywania klucza konta. W przeciwnym razie ma wartość 0.
  • Bity 4–7 są zarezerwowane do wykorzystania w przyszłości i będą ignorowane.
różni się Obowiązkowe
2–7 uint48 Wykonaj 1 z tych czynności:
  • Bieżący adres BLE dostawcy.
  • Adres publiczny dostawcy
różni się Obowiązkowe
8–13 uint48 Adres BR/EDR osoby szukającej różni się Widoczne tylko wtedy, gdy ustawiono bit 1 lub 3 flag
n – 15 Wartość losowa (sól) różni się Obowiązkowe

Tabela 1.2.1: Nieprzetworzone żądanie (typ 0x00). Odszyfrowane z zaszyfrowanego żądania w tabeli 1.1.

Oktet Typ danych Opis Wartość Obowiązkowe?
0 uint8 Typ wiadomości 0x10 = prośba o działanie Obowiązkowe
1 uint8 Flagi różni się Obowiązkowe
2–7 uint48 Wykonaj 1 z tych czynności:
  • Bieżący adres BLE dostawcy.
  • Adres publiczny dostawcy
różni się Obowiązkowe
8 uint8 Grupa wiadomości różni się Obowiązkowe, jeśli ustawiono bit 0 flag
9 uint8 Kod wiadomości różni się Obowiązkowe, jeśli ustawiono bit 0 flag
10 uint8 Zależnie od flag:
  • Ustawiony bit 0: dodatkowa długość danych, mniejsza niż 6
  • Ustawiono bit 1: identyfikator danych
różni się Obowiązkowe, jeśli ustawiono bity 0 lub 1 flag
11 – n Dodatkowe dane różni się Opcjonalnie
n – 15 Wartość losowa (sól) różni się Obowiązkowe

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

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

Tabela 1.3: Nieprzetworzona odpowiedź. Zaszyfrowane w celu wygenerowania zaszyfrowanej odpowiedzi w tabeli 1.4.

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

Tabela 1.4. Zaszyfrowana odpowiedź wysyłana przez Dostawcę do Poszukiwacza w powiadomieniu.

Cecha: klucz dostępu

Ta cecha jest używana podczas procedury parowania na podstawie klucza.

Oktet Typ danych Opis Wartość
0–15 uint128 Blokada zaszyfrowanego klucza dostępu różni się

Tabela 2.1. Blokowanie zaszyfrowanego klucza dostępu. Zapoznaj się z procedurą parowania na podstawie klucza.

Oktet Typ danych Opis Wartość
0 uint8 Typ wiadomości Jedna z tych możliwości:
  • 0x02 = klucz poszukiwacza
  • 0x03 = klucz dostępu dostawcy
1–3 unit32 6-cyfrowy klucz różni się
4–15 Wartość losowa (sól) różni się

Tabela 2.2. Nieprzetworzony klucz dostępu. Odszyfrowana wersja tabeli 2.1.

Cecha: klucz konta

Po sparowaniu narzędzie do szybkiego parowania zapisze klucz konta do dostawcy szybkiego parowania.

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

Po otrzymaniu żądania zapisu Dostawca Szybkiego parowania wykona następujące czynności:

  1. Odszyfruj klucz konta przy użyciu udostępnionego obiektu tajnego wygenerowanego w kroku 4 procedury.
    • W przypadku usługodawców, którzy wymagają powiązania (zwykle):
      • Przed odszyfrowaniem sprawdź, czy do odszyfrowania żądania klucza dostępu z kroku 12 został użyty udostępniony tajny klucz. Jeśli ten krok nie został wykonany przy użyciu tego obiektu tajnego, zignoruj ten zapis i zakończ.
    • Na tym etapie wspólny klucz tajny (K w procedurze) nie zostanie ponownie użyty do tego parowania. Żądania zaszyfrowane tym kluczem bez ponownego uruchamiania tej procedury powinny zostać odrzucone.
  2. Sprawdź, czy odszyfrowana wartość zaczyna się od 0x04. Jeśli tak nie jest, zignoruj tę czynność.
  3. Sprawdź, czy na stałej liście kluczy konta jest miejsce na nową parę.
  4. Jeśli nie, usuń z listy ostatnio używaną wartość.
  5. Dodaj nową wartość do listy.

Klucze konta z listy są używane podczas parowania na podstawie klucza.

Charakterystyka: wersja oprogramowania

Ta cecha umożliwia poszukiwającym odczytywanie wersji oprogramowania Dostawcy w razie potrzeby. Powinna zawsze zwracać następujące dane:

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

Powinien on być zawarty w jednym ciągu znaków UTF-8, nawet jeśli dostawca udostępnia więcej niż 1 oprogramowanie układowe (np. 3 oprogramowanie dla lewej słuchawki, prawej słuchawki i etui). W szczególnych przypadkach dostawca może też zwrócić określone ciągi znaków:

  1. status-update: jeśli dostawca aktualizuje oprogramowanie do nowego oprogramowania. Dostawca może też zwrócić wersję oprogramowania etapowego.

  2. status-abnormal (stan-abnormal): jeśli dostawca znajduje się w nieprawidłowym stanie. Może na przykład działać nieprawidłowo, bo nie udało się zaktualizować oprogramowania. Ta wartość spowoduje, że osoba sprawdzająca wyświetli komunikat z informacją o konieczności aktualizacji.

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

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

Cecha: dane dodatkowe

Usługa ta ma następujące cechy.

Charakterystyka usługi szybkiego parowania Zaszyfrowano Uprawnienia UUID
Dane Nie Napisz i powiadom FE2C1237-8366-4814-8EB0-01DE32100BEA
Stara cecha usługi Szybkie parowanie (cel zostanie wycofany 1.01.2021 r.) Zaszyfrowano Uprawnienia UUID
Dane Nie Napisz i powiadom 0x1237

Zanim napiszesz lub wyślesz powiadomienie do tej cechy, musisz uzgadniać ją za pomocą funkcji FE2C1234-8366-4814-8EB0-01DE32100BEA, aby mieć wspólny tajny klucz. Do szyfrowania danych przechodzących przez tę cechę, której algorytm został zdefiniowany poniżej, używany jest AES-CTR. Ten tryb jest bezpieczniejszy w przypadku danych, które wykraczają poza pojedynczy 16-bajtowy blok. Do zapewniania integralności danych, która została również zdefiniowana poniżej, używany będzie HMAC-SHA256.

Oktet Opis Wartość
czasami Pierwsze 8 bajtów HMAC-SHA256. różni się
8–15 Identyfikator jednorazowy używany przy szyfrowaniu AES-CTR. różni się
16 – var Zaszyfrowane dane. różni się

Tabela 3.1. Pakiet danych wysyłany przez Dostawcę do Poszukiwacza za pomocą powiadomienia lub wysłany przez Poszukiwającego do dostawcy w ramach zapisu.

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

Tabela 3.2: Nieprzetworzone dane. Odszyfrowane z zaszyfrowanych danych Tabele 3.1.

Gdy wymagane jest powiadomienie (np. żądanie spersonalizowanej nazwy za pomocą Bitu 2 w tabeli 1.2.1), Dostawca szybkiego parowania wykona te czynności:

  1. Wygeneruj kryptograficznie losowe 8 bajtów dla identyfikatora Nonce.
  2. Szyfruj dane za pomocą AES-CTR, w którym każdy 16-bajtowy blok jest generowany za pomocą funkcji

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

    gdzie

    1. Klucz AES to udostępniony tajny klucz z kroku 4 procedury.
    2. ClearBlock[i] to 16-bajtowy blok zaczynający się od danych[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
  3. Wykonaj polecenie 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. Klucz K jest generowany przez metodę concat(shared_secret, 48-bajty ZERO), a obiektyshared_secret są pobierane z kroku 4 procedury.
    2. opad to zewnętrzne 64 bajty dopełnienia składające się z powtarzających się bajtów o wartości 0x5C.
    3. iPad ma wewnętrzne dopełnienie o 64 bajtach składające się z powtarzających się bajtów 0x36.
  5. Wybierz pierwsze 8 bajtów z HMAC-SHA256 jako prefiks pakietu danych.

Po otrzymaniu żądania zapisu Dostawca Szybkiego parowania wykona następujące czynności:

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

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

    gdzie

    1. EncryptBlock[i] to 16-bajtowy blok zaczynający się od zaszyfrowanego_danych[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
    2. Klucz AES jest generowany lub identyfikowany podczas uzgadniania połączenia, np.
      1. w procesie nazw 1, pochodzi z ECDH i nie zostanie ponownie użyty do tego parowania. Wszystkie żądania zaszyfrowane za pomocą tego klucza bez ponownego uruchamiania procedury powinny zostać odrzucone.
      2. w procesie nazewnictwa 2 jest to klucz konta.
  3. Wykonaj polecenie concat(clearBlock[0], clearBlock[1],...), aby utworzyć nieprzetworzone dane.