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
|
różni się | Obowiązkowe |
2–7 | uint48 |
Wykonaj 1 z tych czynności:
|
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:
|
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:
|
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:
|
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:
- 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.
- W przypadku usługodawców, którzy wymagają powiązania (zwykle):
- Sprawdź, czy odszyfrowana wartość zaczyna się od
0x04
. Jeśli tak nie jest, zignoruj tę czynność. - Sprawdź, czy na stałej liście kluczy konta jest miejsce na nową parę.
- Jeśli nie, usuń z listy ostatnio używaną wartość.
- 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:
status-update: jeśli dostawca aktualizuje oprogramowanie do nowego oprogramowania. Dostawca może też zwrócić wersję oprogramowania etapowego.
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:
|
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:
- Wygeneruj kryptograficznie losowe 8 bajtów dla identyfikatora Nonce.
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
- Klucz AES to udostępniony tajny klucz z kroku 4 procedury.
- ClearBlock[i] to 16-bajtowy blok zaczynający się od danych[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
Wykonaj polecenie concat(encryptedBlock[0],encryptedBlock[1],...), aby utworzyć zaszyfrowane dane.
Wygeneruj HMAC-SHA256 za pomocą
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
gdzie
- Klucz K jest generowany przez metodę concat(shared_secret, 48-bajty ZERO), a obiektyshared_secret są pobierane z kroku 4 procedury.
- opad to zewnętrzne 64 bajty dopełnienia składające się z powtarzających się bajtów o wartości
0x5C
. - iPad ma wewnętrzne dopełnienie o 64 bajtach składające się z powtarzających się bajtów
0x36
.
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:
- Sprawdź integralność danych, sprawdzając pierwsze 8 bajtów HMAC-SHA256.
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
- EncryptBlock[i] to 16-bajtowy blok zaczynający się od zaszyfrowanego_danych[i * 16]. Ostatni blok może mieć mniej niż 16 bajtów.
- Klucz AES jest generowany lub identyfikowany podczas uzgadniania połączenia, np.
- 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.
- w procesie nazewnictwa 2 jest to klucz konta.
Wykonaj polecenie concat(clearBlock[0], clearBlock[1],...), aby utworzyć nieprzetworzone dane.