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
- K jest generowany przez concat(klucz konta, 48-bajtowy ciąg znaków ZERO).
- Parametr message zawiera dodatkowe dane strumienia wiadomości.
- Parametr nonce jest tworzony przez concat(session_nonce, message_nonce). Liczba jednorazowa sesji i liczba jednorazowa wiadomości są zdefiniowane w następnej sekcji.
- opad to 64 bajty zewnętrznego dopełnienia składającego się z powtarzających się bajtów o wartości
0x5C
. - 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:
- Kod K jest generowany przez
concat(account key, 48-byte ZEROs)
. Dostawca musi przeszukać wszystkie zapisane klucze konta w celu zweryfikowania adresu MAC. - 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.