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
  • Bit 0 (MSB): wycofany i ignorowany przez Seeker.
  • Bit 1: 1, jeśli Poszukiwacz zażąda, aby dostawca zainicjował tworzenie powiązania, a to żądanie zawiera adres BR/EDR Poszukiwacza. W przeciwnym razie ma wartość 0.
  • Bit 2: 1, jeśli Poszukiwacz zażąda, by Dostawca powiadomił istniejącą nazwę. W przeciwnym razie ma wartość 0.
  • Bit 3: 1, jeśli wybrano tworzenie klucza konta wstecz. W przeciwnym razie ma wartość 0.
  • Bity 4–7 są zarezerwowane do użycia w przyszłości i będą ignorowane.
różni się Obowiązkowe
2–7 uint48 Wykonaj 1 z tych czynności:
  • Obecny adres BLE dostawcy
  • Adres publiczny dostawcy
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
  • Bit 0 (MSB): 1, jeśli jest to Działanie urządzenia, 0 w przeciwnym razie.
  • Bit 1: 1, jeśli po nim występuje Dane dodatkowe. W przeciwnym razie ma wartość 0.
  • Bity 2–7 są zarezerwowane do użycia w przyszłości i będą ignorowane.
różni się Obowiązkowe
2–7 uint48 Wykonaj 1 z tych czynności:
  • Obecny 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 flag 0
9 uint8 Kod wiadomości różni się Obowiązkowe, jeśli ustawiono bit flag 0
10 uint8 Zależnie od flag:
  • Ustawiono bit 0: dodatkowa długość danych, mniejsza niż 6
  • Bit 1 jest ustawiony: identyfikator danych
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:
  • 0x02 = klucz dostępu poszukiwacza
  • 0x03 = klucz dostępu dostawcy
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:

  1. 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.
  2. Sprawdź, czy odszyfrowana wartość zaczyna się od 0x04. Jeśli nie, zignoruj tę opcję. zapis i zakończenie tego procesu.
  3. Sprawdź, czy na trwałej liście kluczy konta jest miejsce na nowe .
  4. Jeśli nie, usuń z listy najmniej używaną ostatnio wartość.
  5. 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:

  1. status-updating: wskazuje, czy dostawca aktualizuje obecnie oprogramowanie do nowej wersji. Dostawca może też zwrócić wersję etapowego oprogramowania układowego.

  2. 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:
  • 0x01(nazwa własna): utf8s

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:

  1. Wygeneruj kryptograficznie losowe 8 bajtów dla liczby jednorazowej.
  2. 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

    1. Klucz AES jest udostępnianym tajnym kluczem z kroku 4 procedury.
    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 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. Wartość K jest wygenerowana przez concat(shared_secret, 48-bajtowy ZEROs), wartość Element shared_secret pochodzi z kroku 4 procedury.
    2. opad to 64-bajtowe dopełnienie zewnętrzne, które składa się z powtórzonych bajtów 0x5C
    3. ipad ma 64 bajty wewnętrzne dopełnienie składające się z powtórzonych bajtów 0x36
  5. Zapisz pierwsze 8 bajtów z kodu HMAC-SHA256 jako prefiksu danych .

Po otrzymaniu żądania zapisu Dostawca Szybkiego parowania wykona te czynności:

  1. Sprawdź integralność danych, sprawdzając pierwsze 8 bajtów HMAC-SHA256.
  2. 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

    1. SecureBlock[i] to 16-bajtowy blok z pola encrypted_data[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 będzie zostaną użyte ponownie do tego parowania. Wszystkie zaszyfrowane żądania za pomocą tego klucza bez ponownego uruchamiania procedury, należy odrzucono.
      2. w procesie nazewnictwa w kroku 2 jest to klucz do konta.
  3. Wykonaj polecenie concat(clearBlock[0], clearBlock[1],...), by utworzyć nieprzetworzone dane.