Authentifizierungscode der Nachricht
Mit Nachrichtenstreams wird der Audio-Wechsel konfiguriert, siehe Nachrichten beim Audiowechsel: Für diese wichtigen Konfigurationen muss der Anbieter um sicherzustellen, dass die Nachricht über GMSCore (Modul für schnelles Pairing) und nicht über anderen App auf dem Seeker.
MAC (Nachrichtenauthentifizierungscode) generieren
FP Seeker fügt einen Nachrichtenauthentifizierungscode für Gerätekonfigurationsnachrichten hinzu mit HMAC-SHA256. Der MAC der Nachricht besteht aus den ersten 8 Byte der folgenden Elemente:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
Bitte wo?
- K wird durch concat(Kontoschlüssel, 48-Byte-NULL-Werte) generiert.
- message sind die zusätzlichen Daten des Nachrichtenstreams.
- nonce wird generiert von concat(session_nonce, message_nonce); Sitzung Nonce- und Nachrichten-Nonce werden im folgenden Abschnitt definiert.
- opad entspricht 64 Byte des äußeren Paddings, bestehend aus wiederkehrenden Byte mit dem Wert
0x5C
- ipad umfasst 64 Byte für das innere Padding, bestehend aus wiederholten, bewerteten Byte
0x36
Sitzungs-Nonce und -Nachrichten-Nonce
Um einen Replay-Angriff zu verhindern, muss der Provider dafür sorgen, dass eine Nonce nicht wiederholt. Da die Uhr- oder Zählersynchronisierung bei beiden Providern läuft, und Seeker nicht einfach ist, generiert der Anbieter die Sitzungs-Nonce. (pro Verbindung), die während der Verbindung mit allen Nachrichten geteilt wird, während der Seeker die Nonce (pro Nachricht) generiert. die für jede Nachricht generiert werden. Die Nonce zum Generieren der MAC-Adresse jeder Nachricht ist die Kombination aus Sitzungs-Nonce und Nachrichten-Nonce, d.h. concat(session_nonce; message_nonce).
Wir fügen der Ereignisgruppe „Geräteinformationen“ eine Sitzungs-Nonce hinzu:
Name der Nachrichtengruppe | Wert |
---|---|
Ereignis „Geräteinformationen“ | 0x03 |
Name des Nachrichtencodes | Wert |
---|---|
Sitzungs-Nonce | 0x0A |
Die Sitzungs-Nonce sollte generiert und an den Seeker gesendet werden, wenn RFCOMM verbindet:
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 | uint8 | Ereignis „Geräteinformationen“ | 0x03 |
1 | uint8 | Sitzungs-Nonce | 0x0A |
2–3 | uint16 | Zusätzliche Datenlänge | 0x0008 |
4–11 | Sitzungs-Nonce | variiert |
Zum Senden einer Nachricht, wenn ein MAC erforderlich ist, sendet der Seeker eine Nachrichten-Nonce und den MAC zusammen mit der Nachricht.
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 | uint8 | Nachrichtengruppe | variiert |
1 | uint8 | Nachrichtencode | variiert |
2–3 | uint16 | Zusätzliche Datenlänge(die zusätzliche Datenlänge + 16) | variiert |
4–n | Zusätzliche Daten | variiert | |
n + 1 – n + 8 | Nachrichten-Nonce | variiert | |
n + 9 – n + 16 | Authentifizierungscode der Nachricht | variiert |
MAC (Message Authentication Code) prüfen
Nach dem Empfang einer Nachricht mit dem Nachrichtenauthentifizierungscode soll es mit derselben Funktion wie die Generierungsfunktion überprüfen. Das heißt: muss der empfangene MAC den ersten 8 Bytes der
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
Dabei gilt:
- K wird von
concat(account key, 48-byte ZEROs)
und dem Anbieter generiert alle gespeicherten Kontoschlüssel zur Verifizierung des MAC durchlaufen müssen. - message sind die zusätzlichen Daten (ohne Nachrichten-Nonce und MAC) von Nachrichtenstreams an.
Wenn der MAC korrekt ist, folgt der Anbieter den Anweisungen der angezeigt. Andernfalls sendet der Anbieter ein NAK mit dem Fehlergrund, 0x3 - nicht zulässig aufgrund eines falschen Nachrichtenauthentifizierungscodes.