Merkmale
Dienst für schnelles Pairing
Der Anbieter für schnelles Pairing hat den folgenden GATT-Dienst.
Dienst | UUID |
---|---|
Dienst für schnelles Pairing | 0xFE2C |
Diese Dienstleistung sollte die folgenden Merkmale aufweisen.
Merkmal des Dienstes für schnelles Pairing | Verschlüsselt | Berechtigungen | UUID |
---|---|---|---|
Modell-ID | Nein | Lesen | FE2C1233-8366-4814-8EB0-01DE32100BEA |
Schlüsselbasiertes Pairing | 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 |
Geräteinformationsdienst
Der Anbieter für schnelles Pairing sollte auch den Geräteinformationsdienst unterstützen.
Dienst | UUID |
---|---|
Geräteinformationsdienst | 0x180A |
Der Seeker für die Funktion „Schnelles Pairing“ verwendet die folgenden Merkmale.
Name | Verschlüsselt | Berechtigungen | UUID |
---|---|---|---|
Firmware-Version | Nein | Lesen | 0x2A26 |
Merkmal: Modell-ID
Dieses Merkmal ermöglicht es dem Seeker, die Modell-ID nach Bedarf außerhalb von Auf dem Gerät wird im sichtbaren Modus Werbung geschaltet. Es sollte immer eine folgende Daten:
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0–2 | uint24 |
Modell-ID | variiert |
Merkmal: schlüsselbasiertes Koppeln
Dieses Merkmal steuert die schlüsselbasierte Kopplung. Bei diesem Verfahren wird ein gewisses Maß an Vertrauen geschaffen, indem überprüft wird, Die Anbieter haben beide einen vorinstallierten Schlüssel. Der Schlüssel unterscheidet sich in für jeden Fall:
Fall 1: Der vorinstallierte Schlüssel basiert auf dem öffentlichen/privaten Anti-Spoofing-Schlüssel und das eigene öffentliche/private Schlüsselpaar des Seekers, das sich für jedes Kopplungsversuch.
- Der Anbieter befindet sich im Kopplungsmodus.
- Der Seeker überprüft, ob der Anbieter im Besitz des für den privaten Schlüssel gegen Spoofing.
Im Kopplungsmodus kann der Provider auch im Kopplungsmodus beispielsweise zur Kopplung mit einem Gerät, das die Schlüsselbasiertes Pairing des Paars.
Fall 2: Der vorinstallierte Schlüssel ist einer der Kontoschlüssel.
- Der Anbieter befindet sich normalerweise nicht im Kopplungsmodus. (Aber dies ist kein Voraussetzung: Der Anbieter sollte die Verwendung eines Kontoschlüssels unterstützen, auch wenn Kopplungsmodus.)
- Der Sucher und der Anbieter stellen jeweils sicher, dass die jeweils andere Person im Besitz der des Kontoschlüssels.
Da sich beide Fälle sehr ähnlich sind, außer dass ein vorinstallierter Schlüssel verwendet wird, Diese werden im Verfahren kombiniert.
Datenformat
Informationen zur Verwendung der einzelnen Formate finden Sie hier.
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 |
Nachrichtentyp | 0x00 = Schlüsselbasierte Anfrage zur Kopplung |
Obligatorisch |
1 | uint8 |
Markierungen
|
variiert | Obligatorisch |
2–7 | uint48 |
Sie haben folgende Möglichkeiten:
|
variiert | Obligatorisch |
8–13 | uint48 |
BR/EDR-Adresse des Suchers | variiert | Nur vorhanden, wenn Flags Bit 1 oder 3 festgelegt sind |
n: 15 | Zufälliger Wert (Salt) | variiert | Obligatorisch |
Tabelle 1.2.1:Rohanfrage (Typ 0x00). Entschlüsselt aus dem verschlüsselten Anfrage in Tabelle 1.1
Oktett | Datentyp | Beschreibung | Wert | Obligatorisch? |
---|---|---|---|---|
0 | uint8 |
Nachrichtentyp | 0x10 = Aktionsanfrage |
Obligatorisch |
1 | uint8 |
Markierungen
|
variiert | Obligatorisch |
2–7 | uint48 |
Sie haben folgende Möglichkeiten:
|
variiert | Obligatorisch |
8 | uint8 |
Nachrichtengruppe | variiert | Obligatorisch, wenn Flags Bit 0 festgelegt sind |
9 | uint8 |
Nachrichtencode | variiert | Obligatorisch, wenn Flags Bit 0 festgelegt sind |
10 | uint8 |
Von Flags abhängig:
|
variiert | Obligatorisch, wenn Flags Bit 0 oder 1 festgelegt sind |
11–n | Zusätzliche Daten | variiert | Optional | |
n: 15 | Zufälliger Wert (Salt) | variiert | Obligatorisch |
Tabelle 1.2.2:Rohanfrage (Typ 0x10). Entschlüsselt aus dem verschlüsselten Anfrage in Tabelle 1.1
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 | uint8 |
Nachrichtentyp | 0x01 = Schlüsselbasierte Kopplungsantwort |
1–6 | uint48 |
Öffentliche Adresse des Dienstleisters (BR/EDR) | variiert |
7–15 | Zufälliger Wert (Salt) | variiert |
Tabelle 1.3:Rohantwort. Verschlüsselt, um die verschlüsselte Antwort zu erzeugen in Tabelle 1.4.
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0–15 | uint128 |
Verschlüsselte Antwort | variiert |
Tabelle 1.4:Verschlüsselte Antwort, die vom Anbieter über eine zu benachrichtigen.
Merkmal: Passkey
Diese Eigenschaft wird während der schlüsselbasierten Kopplung verwendet. Verfahren.
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üsselbasiertes Kopplungsverfahren für die Nutzung.
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 | uint8 |
Nachrichtentyp | Eine der folgenden Möglichkeiten:
|
1–3 | unit32 |
6-stelliger Passkey | variiert |
4–15 | Zufälliger Wert (Salt) | variiert |
Tabelle 2.2:Roh-Passkey-Block. Entschlüsselte Version von Tabelle 2.1.
Merkmal: Kontoschlüssel
Nach der Kopplung schreibt der Suchende, der schnelles Pairing durchführt, einen Kontoschlüssel für das schnelle Pairing. Anbieter.
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0–15 | uint128 |
Kontoschlüssel (verschlüsselt) | variiert |
Nach Erhalt einer Schreibanfrage muss der Anbieter für schnelles Pairing Folgendes tun:
- Entschlüsseln Sie den Kontoschlüssel mit dem gemeinsamen Secret, das in Schritt 4 im
Vorgehensweise.
- Für Anbieter, die Bindungen erfordern (üblich):
<ph type="x-smartling-placeholder">
- </ph>
- Prüfen Sie vor der Entschlüsselung, ob das gemeinsame Secret zum Entschlüsseln des Passkey-Anforderung aus Schritt 12. Wenn dieser Schritt mit dieser Secret ignorieren, diesen Schreibvorgang ignorieren und beenden.
- Zu diesem Zeitpunkt wird das gemeinsame Secret (K in der Prozedur) nicht verwendet noch einmal für diese Kopplung. Alle Anfragen, die mit diesem Schlüssel verschlüsselt sind ohne einen Neustart des Verfahrens.
- Für Anbieter, die Bindungen erfordern (üblich):
<ph type="x-smartling-placeholder">
- Prüfen Sie, ob der entschlüsselte Wert mit
0x04
beginnt. Ist dies nicht der Fall, ignorieren und aufhören. - Prüfen Sie, ob in der beibehaltenen Liste der Kontoschlüssel Platz für das neue Wert.
- Löschen Sie andernfalls den zuletzt verwendeten Wert aus der Liste.
- Fügen Sie den neuen Wert der Liste hinzu.
Kontoschlüssel in der Liste werden bei der schlüsselbasierten Kopplung verwendet.
Merkmal: Firmware-Version
Mit diesem Merkmal kann der Seeker die Firmwareversion der Anbieter, falls erforderlich. Es sollten immer die folgenden Daten zurückgegeben werden:
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 – var | utf8s |
Firmware-Versionscode | variiert |
Er sollte in einen einzelnen utf8-String gekapselt werden, auch wenn mehr als ein String vorhanden ist Firmware (z. B. drei Firmwares für linken und rechten Kopfhörer und Lade-Case) beim Anbieter. In Sonderfällen kann der Provider die spezifischen Strings auch zurückgeben:
status-refresh: wenn der Anbieter derzeit auf eine neue Firmware aktualisiert. Alternativ könnte der Provider die Version der bereitgestellten Firmware zurückgeben.
status-abnormal: wenn sich der Anbieter in einem ungewöhnlichen Zustand befindet. Zum Beispiel funktioniert nicht, da das Firmware-Update fehlgeschlagen ist. Dieser Wert führt dazu, dass um dem Nutzer mitzuteilen, dass er jetzt aktualisiert werden muss.
Der Anbieter sollte den Zugriff auf das Merkmal der Firmware-Version auf das Tracking von Geräten verhindern. Empfohlene Einschränkungen:
- gebundene Geräte sollten jederzeit Zugriff haben
- Jedes Gerät sollte Zugriff haben, wenn der Anbieter sichtbar ist
Merkmal: Zusätzliche Daten
Dieser Service weist folgendes Merkmal auf.
Merkmal des Dienstes für schnelles Pairing | Verschlüsselt | Berechtigungen | UUID |
---|---|---|---|
Daten | Nein | Schreiben und benachrichtigen | FE2C1237-8366-4814-8EB0-01DE32100BEA |
Altes Merkmal des Dienstes für schnelles Pairing (wird ab 01.01.2021 eingestellt) | Verschlüsselt | Berechtigungen | UUID |
---|---|---|---|
Daten | Nein | Schreiben und benachrichtigen | 0x1237 |
Vor der schriftlichen Benachrichtigung oder der Benachrichtigung zu diesem Merkmal muss eine
Handshake über die Eigenschaft FE2C1234-8366-4814-8EB0-01DE32100BEA
, um
ein gemeinsames Secret. AES-CTR wird zur Verschlüsselung von durch diese
Eigenschaft, deren Algorithmus unten definiert ist. Dieser Modus bietet mehr
für Daten, die über einen einzigen 16-Byte-Block hinausgehen. HMAC-SHA256
zur Sicherstellung der Datenintegrität, die ebenfalls unten definiert ist.
Oktett | Beschreibung | Wert |
---|---|---|
0–7 | Die ersten 8 Byte von HMAC-SHA256. | variiert |
8–15 | Nonce, verwendet von der AES-CTR-Verschlüsselung. | variiert |
16 – var | Verschlüsselte Daten. | variiert |
Tabelle 3.1:Datenpaket, das vom Anbieter über eine benachrichtigt oder vom Suchenden schriftlich an den Anbieter gesendet werden.
Oktett | Datentyp | Beschreibung | Wert |
---|---|---|---|
0 – var | byte array |
Daten | variiert, decodieren Sie ihn entsprechend der Daten-ID in Tabelle 1.2.2:
|
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 Anbieter für schnelles Pairing Folgendes tun:
- Kryptografisch zufällige 8 Byte für Nonce generieren.
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?
- Der AES-Schlüssel ist das gemeinsame Secret aus Schritt 4 des Verfahrens.
- ClearBlock[i] ist ein 16-Byte-Block ab data[i * 16]. Die letzte Block kann kleiner als 16 Byte sein.
Führen Sie concat(encryptedBlock[0],encryptedBlock[1],...) aus, um die Verschlüsselte Daten.
HMAC-SHA256 generieren durch
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
Bitte wo?
- K wird durch concat(shared_secret, 48-byte ZEROs) generiert, der „shared_secret“ stammt aus Schritt 4 des Verfahrens.
- opad entspricht dem äußeren Padding von 64 Byte und besteht aus wiederholten, mit einem Wert bewerteten Byte.
0x5C
- Das innere Padding besteht aus 64 Bytes, das aus wiederkehrenden Bytes besteht und bewertet wurde.
0x36
Nehmen Sie die ersten 8 Bytes aus HMAC-SHA256 als Präfix der Data Paket.
Nach Erhalt einer Schreibanfrage muss der Anbieter für schnelles Pairing Folgendes tun:
- Überprüfen Sie die Integrität der Daten, indem Sie die ersten 8 Bytes HMAC-SHA256.
Entschlüsseln Sie die verschlüsselten Daten mit AES-CTR, wobei jeder Block mithilfe von
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
Bitte wo?
- Verschlüsselter Block[i] ist ein 16-Byte-Block vonencrypted_data[i * 16]. Der letzte Block kann kleiner als 16 Byte sein.
- Der AES-Schlüssel wird durch den Handshake generiert oder identifiziert, z.B.
<ph type="x-smartling-placeholder">
- </ph>
- in Benennungsablauf 1, stammt er von ECDH und wird nicht erneut für diese Kopplung verwendet werden. Alle Anfragen, die verschlüsselt eingehen mit diesem Schlüssel verwenden, ohne den Vorgang neu zu starten abgelehnt.
- in Benennungsablauf 2 ist es der Kontoschlüssel.
Führen Sie concat(clearBlock[0], ClearBlock[1],...) aus, um die Rohdaten zu erstellen.