Cechy
Szybkie parowanie
Dostawca Szybkiego parowania ma poniższe usługi GATT.
Usługa | UUID |
---|---|
Szybkie parowanie | 0xFE2C |
Ta usługa powinna mieć następujące cechy.
Charakterystyka usługi Szybkie parowanie | Zaszyfrowane | Uprawnienia | UUID |
---|---|---|---|
Identyfikator modelu | Nie | Odczyt | FE2C1233-8366-4814-8EB0-01DE32100BEA |
Parowanie za pomocą klucza | Nie | Pisz i powiadamiaj | FE2C1234-8366-4814-8EB0-01DE32100BEA |
Klucz dostępu | Nie | Pisz i powiadamiaj | FE2C1235-8366-4814-8EB0-01DE32100BEA |
Klucz konta | Nie | Napisz | FE2C1236-8366-4814-8EB0-01DE32100BEA |
Usługa informacji z urządzenia
Dostawca Szybkiego parowania powinien też obsługiwać usługę informacji z urządzenia.
Usługa | UUID |
---|---|
Usługa informacji z urządzenia | 0x180A |
Szybkie parowanie korzysta z następujących cech.
Nazwa | Zaszyfrowane | Uprawnienia | UUID |
---|---|---|---|
Wersja oprogramowania układowego | Nie | Odczyt | 0x2A26 |
Cecha: identyfikator modelu
Ta cecha pozwala Poszukiwaczowi odczytać identyfikator modelu odpowiednio do potrzeb, poza gdy urządzenie wyświetla reklamy w trybie wykrywalności. Powinien zawsze zwracać następujące dane:
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0–2 | uint24 |
Identyfikator modelu | różni się |
Cecha: parowanie przy użyciu klawiszy
Ta cecha kontroluje procedurę parowania przy użyciu klucza. W ramach tej procedury Pewny poziom zaufania powstaje, sprawdzając, czy Poszukiwacz Obaj mają dostęp do klucza PSK. Klucz jest inny w w każdym przypadku:
Przypadek 1: klucz PSK jest oparty na kluczu publicznym/prywatnym służącym do zapobiegania podszywaniu się oraz para kluczy publiczny/prywatny Seekera, która zmieni się i spróbuj sparować urządzenia.
- Dostawca jest w trybie parowania.
- Poszukiwacz sprawdza, czy Dostawca jest w posiadaniu klucz prywatny do zapobiegania podszywaniu się.
Należy pamiętać, że w trybie parowania Dostawca może także oczywiście sparować się w zwykły sposób, na przykład w celu parowania z urządzeniem, które nie obsługuje Szybkiej Parowanie za pomocą klucza pary klucz-wartość.
Przypadek 2. Klucz PSK jest jednym z kluczy konta.
- Dostawca zazwyczaj nie jest w trybie parowania. (Nie jest to jednak wymaganie – dostawca powinien obsługiwać użycie klucza konta nawet w w trybie parowania).
- Zarówno Poszukiwacz, jak i Dostawca sprawdzają, czy druga osoba jest w posiadaniu klucz konta.
Ponieważ w obu przypadkach są one bardzo podobne – z wyjątkiem użycia klucza PSK, są łączone w procedurze.
Format danych
Informacje o sposobie 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 zgodnie z cechą 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 szukającego | różni się | Widoczne tylko wtedy, gdy ustawiony jest bit 1 lub 3 flagi |
n – 15 | Wartość losowa (sól) | różni się | Obowiązkowe |
Tabela 1.2.1: Nieprzetworzone żądanie (typ 0x00). Odszyfrowane z Prośba została przedstawiona 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 flag 0 |
9 | uint8 |
Kod wiadomości | różni się | Obowiązkowe, jeśli ustawiono bit flag 0 |
10 | uint8 |
Zależnie od flag:
|
różni się | Wymagane, jeśli ustawiono bit flag 0 lub 1. |
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 Prośba została przedstawiona 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ź. Zaszyfrowano w celu utworzenia zaszyfrowanej odpowiedzi w Tabela 1.4.
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0–15 | uint128 |
Zaszyfrowana odpowiedź | różni się |
Tabela 1.4. Zaszyfrowana odpowiedź wysłana przez Dostawcę do Szukającego powiadamiać.
Cecha: klucz dostępu
Ta cecha jest używana podczas parowania za pomocą klawiszy .
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0–15 | uint128 |
Blokada zaszyfrowanego klucza dostępu | różni się |
Tabela 2.1. Szyfrowanie bloku klucza dostępu. Zobacz Procedura parowania opartego na kluczach w przypadku użycia.
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 |
Typ wiadomości | Jedna z poniższych możliwości:
|
1–3 | unit32 |
6-cyfrowy klucz dostępu | różni się |
4–15 | Wartość losowa (sól) | różni się |
Tabela 2.2. Nieprzetworzony blok klucza dostępu. Odszyfrowana wersja tabeli 2.1.
Cecha: klucz konta
Po sparowaniu Poszukiwacz Szybkiego parowania zapisze klucz konta do Szybkiego parowania Dostawca.
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0–15 | uint128 |
Klucz konta (zaszyfrowany) | różni się |
Po otrzymaniu żądania zapisu Dostawca Szybkiego parowania wykona te czynności:
- Odszyfruj klucz konta, korzystając z udostępnionego tajnego klucza wygenerowanego w kroku 4 na stronie
procedurę.
- Usługodawcy, którzy wymagają wiązania (często):
- Przed odszyfrowaniem sprawdź, czy udostępniony klucz tajny został użyty do odszyfrowania prośbę o klucz dostępu z kroku 12. Jeśli ten krok nie został ukończony przy użyciu tej metody , zignoruj ten zapis i zamknij.
- W tym momencie udostępniony obiekt tajny (K w procedurze) nie będzie używany dla tej pary. Wszystkie żądania zaszyfrowane za pomocą tego klucza bez ponownego uruchamiania procedury powinny zostać odrzucone.
- Usługodawcy, którzy wymagają wiązania (często):
- Sprawdź, czy odszyfrowana wartość zaczyna się od
0x04
. Jeśli nie, zignoruj tę opcję. zapis i zakończenie tego procesu. - Sprawdź, czy na trwałej liście kluczy konta jest miejsce na nowe .
- Jeśli nie, usuń z listy najmniej używaną ostatnio wartość.
- Dodaj nową wartość do listy.
Klucze konta z listy są używane podczas parowania za pomocą kluczy.
Charakterystyka: wersja oprogramowania
Ta cecha pozwala Poszukiwaczowi odczytać wersję oprogramowania układowego Usługodawcy w razie potrzeby. Powinna zawsze zwracać te dane:
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0 – var | utf8s |
Kod wersji oprogramowania | różni się |
Powinien on być ograniczony do pojedynczego ciągu UTF-8, nawet jeśli istnieje więcej niż 1 ciąg znaków u dostawcy. Dostawca może także zwracać określone ciągi znaków w szczególnych przypadkach:
status-updating: wskazuje, czy dostawca aktualizuje obecnie oprogramowanie do nowej wersji. Dostawca może też zwrócić wersję etapowego oprogramowania układowego.
status-abnormal (nieprawidłowy stan dostawcy): Na przykład: Urządzenie działa nieprawidłowo z powodu niepowodzenia aktualizacji oprogramowania. Ta wartość sprawi, że widzi komunikat informujący użytkownika, że musi teraz zostać zaktualizowana.
Dostawca powinien ograniczyć dostęp do cech wersji oprogramowania układowego do zapobiegać śledzeniu urządzenia. Sugerowane ograniczenia:
- powiązane urządzenia powinny mieć dostęp w dowolnym momencie
- dowolne urządzenie powinno mieć dostęp, gdy dostawca jest wykrywalny
Cecha: dane dodatkowe
Usługa ta powinna mieć następujące cechy.
Charakterystyka usługi Szybkie parowanie | Zaszyfrowane | Uprawnienia | UUID |
---|---|---|---|
Dane | Nie | Pisz i powiadamiaj | FE2C1237-8366-4814-8EB0-01DE32100BEA |
Stara cecha usługi Szybkie parowanie (cel zostanie wycofany 1.01.2021) | Zaszyfrowane | Uprawnienia | UUID |
---|---|---|---|
Dane | Nie | Pisz i powiadamiaj | 0x1237 |
Przed napisaniem lub powiadomieniem o tych cechach należy
uzgadniania połączenia przez cechę FE2C1234-8366-4814-8EB0-01DE32100BEA
, aby
do wspólnego sekretu. Do szyfrowania przesyłanych danych będzie używany protokół AES-CTR
cechę, której algorytm został zdefiniowany poniżej. Ten tryb jest bardziej
są bezpieczne w przypadku danych wykraczających poza pojedynczy 16-bajtowy blok. HMAC-SHA256
jest używana do zapewnienia integralności danych, która została również zdefiniowana poniżej.
Oktet | Opis | Wartość |
---|---|---|
czasami | Pierwsze 8 bajtów algorytmu HMAC-SHA256. | różni się |
8–15 | Liczba jednorazowa używana przez szyfrowanie AES-CTR. | różni się |
16 – var | Zaszyfrowane dane. | różni się |
Tabela 3.1. Pakiet danych wysłany przez Dostawcę do Poszukiwacza za pomocą powiadomić lub wysłać do Dostawcy za pomocą zapisu.
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0 – var | byte array |
Dane | różni się, zdekoduj go zgodnie z identyfikatorem danych w tabeli 1.2.2:
|
Tabela 3.2. Nieprzetworzone dane. Odszyfrowano od zaszyfrowanych danych w Tabela 3.1.
Kiedy wymagane jest powiadomienie (np. prośba o spersonalizowaną nazwę za pomocą Bit 2 in tabeli 1.2.1), Dostawca Szybkiego parowania powinien:
- Wygeneruj kryptograficznie losowe 8 bajtów dla liczby jednorazowej.
szyfrować dane za pomocą AES-CTR, gdzie każdy 16-bajtowy blok jest generowany za pomocą algorytmu
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
gdzie
- Klucz AES jest udostępnianym tajnym kluczem z kroku 4 procedury.
- ClearBlock[i] to 16-bajtowy blok zaczynający się od data[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
- Wartość K jest wygenerowana przez concat(shared_secret, 48-bajtowy ZEROs), wartość Element shared_secret pochodzi z kroku 4 procedury.
- opad to 64-bajtowe dopełnienie zewnętrzne, które składa się z powtórzonych bajtów
0x5C
- ipad ma 64 bajty wewnętrzne dopełnienie składające się z powtórzonych bajtów
0x36
Zapisz pierwsze 8 bajtów z kodu HMAC-SHA256 jako prefiksu danych .
Po otrzymaniu żądania zapisu Dostawca Szybkiego parowania wykona te czynności:
- Sprawdź integralność danych, sprawdzając pierwsze 8 bajtów HMAC-SHA256.
Odszyfrowywanie zaszyfrowanych danych za pomocą AES-CTR, gdzie każdy blok jest generowany za pomocą
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
gdzie
- SecureBlock[i] to 16-bajtowy blok z pola encrypted_data[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 będzie zostaną użyte ponownie do tego parowania. Wszystkie zaszyfrowane żądania za pomocą tego klucza bez ponownego uruchamiania procedury, należy odrzucono.
- w procesie nazewnictwa w kroku 2 jest to klucz do konta.
Wykonaj polecenie concat(clearBlock[0], clearBlock[1],...), by utworzyć nieprzetworzone dane.