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?

  1. K wird durch concat(Kontoschlüssel, 48-Byte-NULL-Werte) generiert.
  2. message sind die zusätzlichen Daten des Nachrichtenstreams.
  3. nonce wird generiert von concat(session_nonce, message_nonce); Sitzung Nonce- und Nachrichten-Nonce werden im folgenden Abschnitt definiert.
  4. opad entspricht 64 Byte des äußeren Paddings, bestehend aus wiederkehrenden Byte mit dem Wert 0x5C
  5. 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:

  1. K wird von concat(account key, 48-byte ZEROs) und dem Anbieter generiert alle gespeicherten Kontoschlüssel zur Verifizierung des MAC durchlaufen müssen.
  2. 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.