Kod uwierzytelniania wiadomości
Strumienie wiadomości służą do konfigurowania przełącznika dźwięku, patrz sekcja Komunikaty dotyczące przełączania dźwięku. W przypadku tych ważnych konfiguracji dostawca potrzebuje aby upewnić się, że wiadomość została wysłana przez GMSCore (moduł Szybkiego parowania), a nie przez innej aplikacji na stronie Seeker.
Wygeneruj MAC (kod uwierzytelniania wiadomości)
FP Seeker dodaje kod uwierzytelniania wiadomości do wiadomości o konfiguracji urządzenia z zastosowaniem algorytmu 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
- K jest generowany przez funkcję concat(klucz konta, 48-bajtowy ZERO).
- Atrybut message to dodatkowe dane strumienia wiadomości.
- Parametr nonce jest generowany przez parametr concat(session_nonce, message_nonce); sesja Liczba jednorazowa i liczba jednorazowa z wiadomością są zdefiniowane w następnej sekcji.
- opad to 64 bajty zewnętrznego dopełnienia, na które składają się powtórzone bajty o określonej wartości.
0x5C
- ipad to 64 bajty wewnętrznego dopełnienia, z którego powtórzono wartości w bajtach.
0x36
Liczba jednorazowa sesji i jednorazowa z wiadomością
Aby zapobiec ponownemu atakowi, Dostawca musi sprawdzić, czy liczba jednorazowa nie jest powtórzenia. Ponieważ synchronizacja zegara lub licznika odbywa się u obu dostawców a Poszukiwacz nie jest prosty, Dostawca generuje liczbę jednorazową sesji (na połączenie), która jest udostępniana wszystkim wiadomościom podczas połączenia, natomiast Searchker generuje liczbę jednorazową (dla każdej wiadomości), która jest losowa. generowanej dla każdej wiadomości. Liczba jednorazowa do wygenerowania MAC każdej wiadomości to kombinację liczby jednorazowej sesji i jednorazowej wiadomości, tj. concat(session_nonce, message_nonce).
Do grupy zdarzeń Informacje o urządzeniu dodajemy liczbę jednorazową sesji:
Nazwa grupy wiadomości | Wartość |
---|---|
Zdarzenie z informacjami o urządzeniu | 0x03 |
Nazwa kodu wiadomości | Wartość |
---|---|
Liczba jednorazowa sesji | 0x0A |
Jednorazowa sesja powinna zostać wygenerowana i wysłana do Seekera, gdy RFCOMM łączy:
Oktet | Typ danych | Opis | Wartość |
---|---|---|---|
0 | uint8 | Zdarzenie z informacjami o urządzeniu | 0x03 |
1 | uint8 | Liczba jednorazowa sesji | 0x0A |
2–3 | uint16 | Dodatkowa długość danych | 0x0008 |
4–11 | liczba jednorazowa w sesji | różni się |
Aby wysłać wiadomość, gdy wymagany jest adres MAC, Seeker wysyła wiadomość jednorazową i MAC oraz 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 z wiadomości | różni się | |
n + 9 – n + 16 | Kod uwierzytelniania wiadomości | różni się |
Weryfikacja MAC (kodu uwierzytelniania wiadomości)
Po otrzymaniu wiadomości z kodem uwierzytelniającym powinien ją zweryfikować za pomocą tej samej funkcji co funkcja generująca. To znaczy, odebrany adres MAC powinien być równy pierwszych 8 bajtach
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
gdzie:
- K jest generowane przez firmę
concat(account key, 48-byte ZEROs)
, a Dostawca powinno przejrzeć wszystkie przechowywane klucze konta, aby zweryfikować adres MAC. - Atrybut message to dodatkowe dane (z wyłączeniem liczby jednorazowej wiadomości i adresu MAC) w strumieniu wiadomości.
Jeśli adres MAC jest poprawny, Dostawca musi postępować zgodnie z instrukcjami . W przeciwnym razie Dostawca wyśle NAK z przyczyną błędu (0x3) – niedozwolone z powodu nieprawidłowego kodu uwierzytelniania wiadomości.