Merkmale

Schnelles Pairing

Der Anbieter für Schnelles Pairing muss den folgenden GATT-Dienst haben.

Dienst UUID
Schnelles Pairing 0xFE2C

Dieser Dienst muss die folgenden Merkmale aufweisen.

Merkmal des Fast Pair Service Verschlüsselt Berechtigungen UUID
Modell-ID Nein Lesen FE2C1233-8366-4814-8EB0-01DE32100BEA
Schlüsselbasierte Kopplung Nein Schreiben und benachrichtigen FE2C1234-8366-4814-8EB0-01DE32100BEA
Passkey Nein Schreiben und benachrichtigen FE2C1235-8366-4814-8EB0-01DE32100BEA
Kontoschlüssel Nein Schreiben FE2C1236-8366-4814-8EB0-01DE32100BEA

Device Information Service

Der Fast Pair-Anbieter sollte auch den Device Information Service unterstützen.

Dienst UUID
Device Information Service 0x180A

Der Schnelles Pairing-Sucher verwendet die folgenden Merkmale.

Name Verschlüsselt Berechtigungen UUID
Firmware-Version Nein Lesen 0x2A26

Merkmal: Modell-ID

Mit diesem Merkmal kann der Seeker die Modell-ID bei Bedarf lesen, auch wenn das Gerät nicht im sichtbaren Modus wirbt. Es sollten immer die folgenden Daten zurückgegeben werden:

Oktett Datentyp Beschreibung Wert
0–2 uint24 Modell-ID variiert

Merkmal: Schlüsselbasierte Kopplung

Dieses Merkmal steuert das schlüsselbasierte Kopplungsverfahren. Bei diesem Verfahren wird ein gewisses Maß an Vertrauen aufgebaut, indem überprüft wird, ob sowohl der Seeker als auch der Provider im Besitz eines vorinstallierten Schlüssels sind. Der Schlüssel ist jeweils unterschiedlich:

  • Fall 1: Der vorinstallierte Schlüssel basiert auf dem öffentlichen/privaten Schlüsselpaar zur Fälschungssicherheit und dem eigenen öffentlichen/privaten Schlüsselpaar des Seeker, das sich bei jedem Pairing-Versuch ändert.

    • Der Anbieter befindet sich im Kopplungsmodus.
    • Der Seeker überprüft, ob der Provider im Besitz des privaten Anti-Spoofing-Schlüssels ist.

    Im Kopplungsmodus kann der Anbieter natürlich auch auf die übliche Weise koppeln, z. B. mit einem Gerät, das die schlüsselbasierte Kopplung von „Schnelles Pairing“ nicht unterstützt.

  • Fall 2: Der vorinstallierte Schlüssel ist einer der Kontoschlüssel.

    • Der Provider befindet sich normalerweise nicht im Kopplungsmodus. Dies ist jedoch keine Voraussetzung. Der Anbieter sollte die Verwendung eines Kontoschlüssels auch im Kopplungsmodus unterstützen.
    • Der Suchende und der Anbieter bestätigen jeweils, dass der andere den Kontoschlüssel besitzt.

Da sich beide Fälle nur darin unterscheiden, welcher vorinstallierte Schlüssel verwendet wird, werden sie in Verfahren zusammengefasst.

Datenformat

Informationen zur Verwendung der einzelnen Formate finden Sie in der Anleitung.

Oktett Datentyp Beschreibung Wert Obligatorisch?
0–15 uint128 Verschlüsselte Anfrage variiert Obligatorisch
16–79 Öffentlicher Schlüssel variiert Optional

Tabelle 1.1:Verschlüsselte Anfrage, die vom Seeker in das Merkmal geschrieben wird.

Oktett Datentyp Beschreibung Wert Obligatorisch?
0 uint8 Mitteilungsart 0x00 = Schlüsselbasierte Anfrage zur Kopplung Obligatorisch
1 uint8 Flags
  • Bit 0 (MSB): veraltet und von Seeker ignoriert.
  • Bit 1: 1, wenn der Sucher den Anbieter auffordert, die Kopplung zu initiieren, und diese Anfrage die BR/EDR-Adresse des Suchers enthält. Andernfalls 0.
  • Bit 2: 1, wenn der Sucher den Anbieter auffordert, den vorhandenen Namen zu melden. Andernfalls 0.
  • Bit 3: 1, wenn es sich um das nachträgliche Schreiben des Kontoschlüssels handelt. Andernfalls 0.
  • Die Bits 4 bis 7 sind für die zukünftige Verwendung reserviert und werden ignoriert.
variiert Obligatorisch
2–7 uint48 Entweder:
  • Aktuelle BLE-Adresse des Anbieters
  • Öffentliche Adresse des Anbieters
variiert Obligatorisch
8–13 uint48 BR/EDR-Adresse des Suchenden variiert Nur präsentieren, wenn Bit 1 oder 3 der Flags festgelegt ist
n – 15 Zufälliger Wert (Salt) variiert Obligatorisch

Tabelle 1.2.1: Rohe Anfrage (Typ 0x00). Entschlüsselt aus der verschlüsselten Anfrage in Tabelle 1.1.

Oktett Datentyp Beschreibung Wert Obligatorisch?
0 uint8 Mitteilungsart 0x10 = Aktionsanfrage Obligatorisch
1 uint8 Flags
  • Bit 0 (MSB): 1, wenn es sich um eine Geräteaktion handelt, andernfalls 0.
  • Bit 1: 1, wenn das Merkmal „Zusätzliche Daten“ folgt, andernfalls 0.
  • Die Bits 2 bis 7 sind für die zukünftige Verwendung reserviert und müssen ignoriert werden.
variiert Obligatorisch
2–7 uint48 Entweder:
  • Aktuelle BLE-Adresse des Anbieters
  • Öffentliche Adresse des Anbieters
variiert Obligatorisch
8 uint8 Nachricht an die Gruppe schicken variiert Erforderlich, wenn Flags Bit 0 festgelegt ist
9 uint8 Nachrichtencode variiert Erforderlich, wenn Flags Bit 0 festgelegt ist
10 uint8 Abhängig von Flags:
  • Bit 0 ist gesetzt: Zusätzliche Datenlänge, weniger als 6
  • Bit 1 ist festgelegt: Daten-ID
variiert Erforderlich, wenn Flags-Bit 0 oder 1 festgelegt ist
11 – n Zusätzliche Daten variiert Optional
n – 15 Zufälliger Wert (Salt) variiert Obligatorisch

Tabelle 1.2.2:Rohdatenanfrage (Typ 0x10). Entschlüsselt aus der verschlüsselten Anfrage in Tabelle 1.1.

Oktett Datentyp Beschreibung Wert
0 uint8 Mitteilungsart 0x01 = Antwort auf schlüsselbasierte Kopplung
1–6 uint48 Öffentliche (BR/EDR-)Adresse des Anbieters variiert
7–15 Zufälliger Wert (Salt) variiert

Tabelle 1.3:Rohantwort. Verschlüsselt, um die verschlüsselte Antwort in Tabelle 1.4 zu erzeugen.

Oktett Datentyp Beschreibung Wert
0–15 uint128 Verschlüsselte Antwort variiert

Tabelle 1.4:Verschlüsselte Antwort, die vom Anbieter über eine Benachrichtigung an den Suchenden gesendet wird.

Merkmal: Passkey

Diese Eigenschaft wird während des schlüsselbasierten Pairing verwendet.

Oktett Datentyp Beschreibung Wert
0–15 uint128 Verschlüsselter Passkey-Block variiert

Tabelle 2.1: Verschlüsselter Passkey-Block. Weitere Informationen finden Sie unter „Schlüsselbasierte Kopplung“.

Oktett Datentyp Beschreibung Wert
0 uint8 Mitteilungsart Eine der Folgenden:
  • 0x02 = Passkey des Suchenden
  • 0x03 = Passkey des Anbieters
1–3 unit32 6‑stelliger Passkey variiert
4–15 Zufälliger Wert (Salt) variiert

Tabelle 2.2: Rohblock für Passkeys. Entschlüsselte Version von Tabelle 2.1.

Merkmal: Kontoschlüssel

Nach dem schnellen Pairing schreibt der Fast Pair Seeker einen Kontoschlüssel in den Fast Pair Provider.

Oktett Datentyp Beschreibung Wert
0–15 uint128 Kontoschlüssel (verschlüsselt) variiert

Wenn der Schnelles Pairing-Anbieter eine Schreibanfrage erhält, muss er Folgendes tun:

  1. Entschlüsseln Sie den Kontoschlüssel mit dem gemeinsamen Secret, das in Schritt 4 des Verfahrens generiert wurde.
    • Für Dienstleister, die eine Kautionsversicherung benötigen (häufig):
      • Prüfen Sie vor dem Entschlüsseln, ob das gemeinsame Secret zum Entschlüsseln der Passkey-Anfrage aus Schritt 12 verwendet wurde. Wenn dieser Schritt mit diesem Secret nicht erfolgreich war, ignorieren Sie diesen Schreibvorgang und beenden Sie den Vorgang.
    • An diesem Punkt wird das gemeinsame Secret (K im Verfahren) für diese Kopplung nicht mehr verwendet. Alle Anfragen, die mit diesem Schlüssel verschlüsselt sind, sollten abgelehnt werden, ohne dass das Verfahren neu gestartet wird.
  2. Prüfen Sie, ob der entschlüsselte Wert mit 0x04 oder 0xFF beginnt. Wenn nicht, ignoriere diesen Schreibvorgang und beende den Vorgang.
    • Wenn der Wert 0x04 ist:
      • Prüfen Sie, ob in der persistenten Kontoschlüsselliste Platz für den neuen Wert ist.
      • Wenn nicht, löschen Sie den Wert, der am längsten nicht verwendet wurde, aus der Liste.
      • Fügen Sie den neuen Wert der Liste hinzu.
    • Wenn der Wert 0xFF ist:
      • Behandle dies als temporäre Kopplungssitzung und führe keinen Vorgang aus.
      • Das kann beim Ablauf Kontoschlüssel rückwirkend schreiben passieren.
      • Speichern Sie den Schlüssel nicht und verwenden Sie ihn nicht in der Kontoschlüsselliste, bei der Verschlüsselung oder bei MAC-Berechnungen.
      • Das Entfernen der Bindung wird durch ein funktionsspezifisches Ereignis oder eine Zeitüberschreitung ausgelöst. Für die LE-Audiofreigabe wird dringend empfohlen, die BLE-Bindung und den Verknüpfungsschlüssel 10 Minuten nach dem Trennen der temporären Sitzung zu entfernen.

Kontoschlüssel in der Liste werden während der schlüsselbasierten Kopplung verwendet.

Merkmal: Firmware-Version

So kann der Seeker die Firmware-Revision des Providers nach Bedarf lesen. Es sollten immer die folgenden Daten zurückgegeben werden:

Oktett Datentyp Beschreibung Wert
0 – var utf8s Firmware-Revisionscode variiert

Sie sollte in einem einzelnen UTF-8-String gekapselt sein, auch wenn es mehr als eine Firmware (z. B. 3 Firmwares für den linken Kopfhörer, den rechten Kopfhörer und das Case) auf dem Anbieter gibt. Der Anbieter kann auch die spezifischen Strings für Sonderfälle zurückgeben:

  1. status-updating: wenn der Anbieter gerade auf eine neue Firmware aktualisiert wird. Alternativ kann der Anbieter die Version der bereitgestellten Firmware zurückgeben.

  2. status-abnormal: wenn der Anbieter in einem abnormalen Zustand ist. Das Gerät hat beispielsweise nicht richtig funktioniert, weil das Firmware-Update fehlgeschlagen ist. Dieser Wert bewirkt, dass dem Nutzer eine Meldung angezeigt wird, dass der Seeker jetzt aktualisiert werden muss.

Der Anbieter sollte den Zugriff auf das Merkmal „Firmware Revision“ einschränken, um das Tracking von Geräten zu verhindern. Vorgeschlagene Einschränkungen:

  • Verbundene Geräte sollten jederzeit Zugriff haben
  • jedes Gerät sollte Zugriff haben, wenn der Anbieter sichtbar ist

Wenn der Anbieter Find Hub unterstützt, ist eine zusätzliche Implementierung erforderlich. Weitere Informationen finden Sie unter Firmware-Updates für „Mein Gerät finden“.

Merkmal: Zusätzliche Daten

Dieser Dienst muss die folgende Eigenschaft haben.

Merkmal des Fast Pair Service Verschlüsselt Berechtigungen UUID
Daten Nein Schreiben und benachrichtigen FE2C1237-8366-4814-8EB0-01DE32100BEA
Altes Merkmal des Dienstes „Schnelles Pairing“ (wird am 01.01.2021 eingestellt) Verschlüsselt Berechtigungen UUID
Daten Nein Schreiben und benachrichtigen 0x1237

Bevor du in dieses Merkmal schreibst oder darüber benachrichtigst, muss ein Handshake über das Merkmal FE2C1234-8366-4814-8EB0-01DE32100BEA erfolgen, um ein gemeinsames Secret zu erhalten. AES-CTR wird verwendet, um Daten zu verschlüsseln, die über dieses Merkmal übertragen werden. Der Algorithmus ist unten definiert. Dieser Modus ist sicherer für Daten, die über einen einzelnen 16-Byte-Block hinausgehen. Zur Gewährleistung der Datenintegrität wird HMAC-SHA256 verwendet, was ebenfalls unten definiert ist.

Oktett Beschreibung Wert
0–7 Die ersten 8 Byte von HMAC-SHA256. variiert
8–15 Nonce, die von der AES-CTR-Verschlüsselung verwendet wird. variiert
16 – var Verschlüsselte Daten. variiert

Tabelle 3.1: Datenpaket, das vom Anbieter über eine Benachrichtigung an den Suchenden oder vom Suchenden über einen Schreibvorgang an den Anbieter gesendet wird.

Oktett Datentyp Beschreibung Wert
0 – var byte array Daten variiert, decodieren Sie sie gemäß der Daten-ID in Tabelle 1.2.2:
  • 0x01(personalisierter Name): utf8s

Tabelle 3.2:Rohdaten. Entschlüsselt aus den verschlüsselten Daten in Tabelle 3.1.

Wenn eine Benachrichtigung angefordert wird (z.B. Anforderung eines personalisierten Namens über Bit 2 in Tabelle 1.2.1), muss der Schnelles Pairing-Anbieter Folgendes tun:

  1. Generieren Sie kryptografisch zufällige 8 Byte für die Nonce.
  2. Verschlüsseln Sie die Daten mit AES-CTR, wobei jeder 16‑Byte-Block mit

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    Bitte wo?

    1. Der AES-Schlüssel ist das gemeinsame Secret aus Schritt 4 des Verfahrens.
    2. clearBlock[i] ist ein 16-Byte-Block, der bei data[i * 16] beginnt. Der letzte Block kann kleiner als 16 Byte sein.
  3. Führen Sie „concat(encryptedBlock[0], encryptedBlock[1],…)“ aus, um die verschlüsselten Daten zu erstellen.

  4. HMAC-SHA256 generieren durch

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

    Bitte wo?

    1. K wird durch concat(shared_secret, 48-byte ZEROs) generiert. Das shared_secret stammt aus Schritt 4 des Verfahrens.
    2. opad ist ein äußeres Padding von 64 Byte, das aus wiederholten Byte mit dem Wert 0x5C besteht.
    3. ipad ist ein 64-Byte-Inner-Padding, das aus wiederholten Bytes mit dem Wert 0x36 besteht.
  5. Nehmen Sie die ersten 8 Byte aus dem HMAC-SHA256 als Präfix des Datenpakets.

Wenn der Schnelles Pairing-Anbieter eine Schreibanfrage erhält, muss er Folgendes tun:

  1. Prüfen Sie die Integrität der Daten, indem Sie die ersten 8 Byte von HMAC-SHA256 untersuchen.
  2. Entschlüsseln Sie die verschlüsselten Daten mit AES-CTR, wobei jeder Block mit

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    Bitte wo?

    1. encryptedBlock[i] ist ein 16‑Byte-Block, der mit encrypted_data[i * 16] beginnt. Der letzte Block kann weniger als 16 Bytes umfassen.
    2. Der AES-Schlüssel wird aus dem Handshake generiert oder identifiziert, z.B.
      1. Im Namensfluss 1 stammt er von ECDH und wird für diese Kopplung nicht noch einmal verwendet. Alle Anfragen, die mit diesem Schlüssel verschlüsselt eingehen, ohne dass das Verfahren neu gestartet wurde, sollten abgelehnt werden.
      2. In Benennungsablauf 2 ist es der Kontoschlüssel.
  3. Führen Sie concat(clearBlock[0], clearBlock[1],...) aus, um die Rohdaten zu erstellen.