Kod uwierzytelniania wiadomości

Do skonfigurowania przełącznika dźwięku służą strumienie wiadomości – patrz Komunikaty o przełączeniu dźwięku. W przypadku tych ważnych konfiguracji dostawca musi zadbać o to, aby wiadomość została wysłana przez GMSCore (moduł szybkiego parowania), a nie przez jakąkolwiek inną aplikację w aplikacji Seeker.

Generowanie MAC (kodu uwierzytelniania wiadomości)

FP Seeker dodaje kod uwierzytelniania wiadomości do wiadomości związanych z konfiguracją urządzeń przy użyciu HMAC-SHA256. Adres MAC wiadomości składa się z pierwszych 8 bajtów:

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

gdzie

  1. K jest generowany przez concat(klucz konta, 48-bajtowy ciąg znaków ZERO).
  2. Parametr message zawiera dodatkowe dane strumienia wiadomości.
  3. Parametr nonce jest tworzony przez concat(session_nonce, message_nonce). Liczba jednorazowa sesji i liczba jednorazowa wiadomości są zdefiniowane w następnej sekcji.
  4. opad to 64 bajty zewnętrznego dopełnienia składającego się z powtarzających się bajtów o wartości 0x5C.
  5. ipad to 64 bajty wewnętrznego dopełnienia składającego się z powtarzających się bajtów o wartości 0x36.

Liczba jednorazowa sesji i jednorazowa wartość jednorazowa wiadomości

Aby zapobiec ponownemu atakowi, dostawca musi zadbać o to, aby liczba jednorazowa nie była powtarzana. Ponieważ utrzymanie synchronizacji zegara lub licznika u dostawcy i licznika czasu nie jest proste, dostawca generuje wartość jednorazową sesji (dla każdego połączenia), która jest udostępniana wszystkim wiadomościom w trakcie połączenia, a aukowiec generuje liczbę jednorazową (na wiadomość), która jest generowana losowo dla każdej wiadomości. Wartość jednorazowa służąca do generowania adresu MAC każdej wiadomości to połączenie liczby jednorazowej sesji i liczby jednorazowej wiadomości, tj. concat(session_nonce, message_nonce).

Do grupy zdarzeń Informacje o urządzeniu dodajemy wartość jednorazową sesji:

Nazwa grupy wiadomości Wartość
Zdarzenie dotyczące informacji o urządzeniu 0x03
Nazwa kodu wiadomości Wartość
Liczba jednorazowa sesji 0x0A

Wartość jednorazowa sesji powinna zostać wygenerowana i wysłana do poszukiwacza po nawiązaniu połączenia RFCOMM:

Oktet Typ danych Opis Wartość
0 uint8 Zdarzenie dotyczące informacji o urządzeniu 0x03
1 uint8 Liczba jednorazowa sesji 0x0A
2–3 uint16 Dodatkowa długość danych 0x0008
4–11 liczba jednorazowa sesji różni się

Aby wysłać wiadomość, gdy wymagany jest adres MAC, aplikacja Seeker wysyła wiadomość jednorazową i numer MAC wraz z wiadomością.

Oktet Typ danych Opis Wartość
0 uint8 Grupa wiadomości różni się
1 uint8 Kod wiadomości różni się
2–3 uint16 Dodatkowa długość danych(dodatkowa długość danych + 16) różni się
4 – n Dodatkowe dane różni się
N + 1 – n + 8 Liczba jednorazowa wiadomości różni się
N + 9 – n + 16 Kod uwierzytelniania wiadomości różni się

Zweryfikuj MAC (kod uwierzytelniania wiadomości)

Po otrzymaniu wiadomości z kodem uwierzytelniającym dostawca musi ją zweryfikować, korzystając z tej samej funkcji co funkcja generowania. Oznacza to, że otrzymany MAC powinno być równy pierwszych 8 bajtów

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

gdzie:

  1. Kod K jest generowany przez concat(account key, 48-byte ZEROs). Dostawca musi przeszukać wszystkie zapisane klucze konta w celu zweryfikowania adresu MAC.
  2. message to dodatkowe dane (niepowtarzalne i MAC) strumienia wiadomości.

Jeśli adres MAC jest prawidłowy, Dostawca powinien postępować zgodnie z instrukcjami podanymi w komunikacie. W przeciwnym razie Dostawca wyśle kod NAK z informacją o przyczynie błędu 0x3 – jest to niedozwolone z powodu nieprawidłowego kodu uwierzytelniania wiadomości.