Nachrichtenauthentifizierungscode

Nachrichtenstreams werden verwendet, um die Audio-Umschaltung zu konfigurieren. Weitere Informationen finden Sie unter Nachrichten zur Audio-Umschaltung. Bei diesen wichtigen Konfigurationen muss der Anbieter dafür sorgen, dass die Nachricht von GMSCore (Fast Pair-Modul) und nicht von einer anderen App auf dem Seeker gesendet wird.

MAC (Message Authentication Code) generieren

FP Seeker fügt für Gerätekonfigurationsnachrichten einen Message Authentication Code (MAC) mit HMAC-SHA256 hinzu. Der MAC der Nachricht besteht aus den ersten 8 Byte von:

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

Bitte wo?

  1. K wird durch concat(Kontoschlüssel, 48 Byte mit Nullen) generiert.
  2. message sind die zusätzlichen Daten des Nachrichtenstreams.
  3. nonce wird durch concat(session_nonce, message_nonce) generiert. „session nonce“ und „message nonce“ werden im folgenden Abschnitt definiert.
  4. opad besteht aus 64 Byte äußerer Auffüllung, die aus wiederholten Byte mit dem Wert 0x5C bestehen.
  5. ipad ist ein 64 Byte umfassendes inneres Padding, das aus wiederholten Bytes mit dem Wert 0x36 besteht.

Sitzungs-Nonce und Nachrichten-Nonce

Um einen Replay-Angriff zu verhindern, muss der Anbieter dafür sorgen, dass eine Nonce nicht wiederholt wird. Da die Aufrechterhaltung der Uhr- oder Zählersynchronisierung sowohl beim Anbieter als auch beim Suchenden nicht einfach ist, generiert der Anbieter die Sitzungs-Nonce (pro Verbindung), die während der Verbindung für alle Nachrichten freigegeben wird, während der Suchende 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-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
Geräteinformationen 0x03
Codename der Nachricht Wert
Sitzungs-Nonce 0x0A

Die Sitzungs-Nonce sollte generiert und an den Seeker gesendet werden, wenn Message Stream eine Verbindung herstellt:

Oktett Datentyp Beschreibung Wert
0 uint8 Geräteinformationen 0x03
1 uint8 Sitzungs-Nonce 0x0A
2–3 uint16 Zusätzliche Datenlänge 0x0008
4 – 11 Sitzungs-Nonce variiert

Wenn eine MAC erforderlich ist, sendet der Suchende zusammen mit der Nachricht eine Message-Nonce und die MAC.

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 Nachricht-Nonce variiert
n + 9 – n + 16 Nachrichtenauthentifizierungscode variiert

MAC (Message Authentication Code) prüfen

Nachdem der Anbieter eine Nachricht mit dem Nachrichtenauthentifizierungscode empfangen hat, muss er ihn mit derselben Funktion wie der Generierungsfunktion überprüfen. Das heißt, der empfangene MAC sollte den ersten 8 Byte von

 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 Bereitsteller muss alle gespeicherten Kontoschlüssel durchlaufen, um den Nachrichtenauthentifizierungscode zu überprüfen.
  2. message sind die zusätzlichen Daten (ohne Message-Nonce und MAC) des Message-Streams.

Wenn die MAC korrekt ist, muss der Anbieter der Anweisung in der Nachricht folgen. Andernfalls sendet der Anbieter ein NAK mit dem Fehlergrund 0x3 – „not allowed due to incorrect message authentication code“ (nicht zulässig aufgrund eines falschen Message Authentication Code).