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?
- K wird von concat(Kontoschlüssel, 48-Byte-NULL-Werte) generiert.
- message sind die zusätzlichen Daten des Nachrichtenstreams.
- nonce wird durch concat(session_nonce, message_nonce) generiert. Die Sitzungs- und Nachrichten-Nonce werden im folgenden Abschnitt definiert.
- opad hat einen äußeren Abstand von 64 Byte und besteht aus wiederholten Byte mit dem Wert
0x5C
. - 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:
- K wird von
concat(account key, 48-byte ZEROs)
generiert und der Anbieter durchsucht alle gespeicherten Kontoschlüssel, um den MAC zu verifizieren. - 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).