Nachrichtenauthentifizierungscode

Nachrichtenstreams werden zum Konfigurieren der Funktion „Audio-Wechsel“ verwendet. Weitere Informationen finden Sie unter „Audio-Wechsel“-Nachrichten. Bei diesen wichtigen Konfigurationen muss der Anbieter dafür sorgen, dass die Nachricht über GMSCore (Modul für schnelles Pairing) und nicht über eine andere App auf dem Seeker gesendet wird.

MAC-Adresse (Message Authentication Code) erstellen

FP-Seeker fügt mithilfe von HMAC-SHA256 einen Nachrichtenauthentifizierungscode für Nachrichten zur Gerätekonfiguration hinzu. Der MAC der Nachricht besteht aus den ersten 8 Byte:

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

Bitte wo?

  1. K wird von concat(Kontoschlüssel, 48-Byte-NULL-Werte) generiert.
  2. message sind die zusätzlichen Daten des Nachrichtenstreams.
  3. nonce wird durch concat(session_nonce, message_nonce) generiert. Die Sitzungs- und Nachrichten-Nonce werden im folgenden Abschnitt definiert.
  4. opad hat einen äußeren Abstand von 64 Byte und besteht aus wiederholten Byte mit dem Wert 0x5C.
  5. ipad hat ein inneres Padding von 64 Byte, das aus wiederholten Byte mit dem Wert 0x36 besteht.

Sitzungs-Nonce und Nachrichten-Nonce

Der Anbieter muss dafür sorgen, dass keine Nonce wiederholt wird, um einen Replay-Angriff zu verhindern. Da das Aufrechterhalten der Uhr- oder Zählersynchronisierung sowohl beim Provider als auch beim Sucher nicht einfach ist, generiert der Provider die Sitzungs-Nonce (pro Verbindung), die während der Verbindung für alle Nachrichten freigegeben wird, während der Seeker die Nachrichten-Nonce (pro Nachricht) generiert, die für jede Nachricht zufällig generiert wird. Die Nonce zum Generieren des MAC jeder Nachricht ist die Kombination aus Sitzungs- und Nachrichten-Nonce, also 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 eine RFCOMM-Verbindung hergestellt wird:

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 Code zur Nachrichtenauthentifizierung variiert

MAC-Adresse überprüfen (Message Authentication Code)

Beim Empfang einer Nachricht mit dem Nachrichtenauthentifizierungscode überprüft der Anbieter diese mithilfe derselben Funktion wie bei der Generierungsfunktion. Das heißt, der empfangene MAC sollte den ersten 8 Byte des

 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) generiert und der Anbieter durchsucht alle gespeicherten Kontoschlüssel, um den MAC zu verifizieren.
  2. message ist die zusätzlichen Daten (ohne Nachrichten-Nonce und MAC-Adresse) des Nachrichtenstreams.

Wenn der MAC korrekt ist, folgt der Anbieter der Anweisung in der Nachricht. Andernfalls sendet der Anbieter eine NAK mit dem Fehlergrund „0x3 – not allowed“ (aufgrund eines falschen Nachrichtenauthentifizierungscodes).