Caractéristiques

Service Association express

Le Fournisseur d'association express doit disposer du service GATT suivant.

Service UUID
Service Association express 0xFE2C

Ce service doit présenter les caractéristiques suivantes.

Caractéristique du service d'association express Chiffré Autorisations UUID
ID du modèle Non Lire FE2C1233-8366-4814-8EB0-01DE32100BEA
Association basée sur des clés Non Écriture et notification FE2C1234-8366-4814-8EB0-01DE32100BEA
Clé d'accès Non Écriture et notification FE2C1235-8366-4814-8EB0-01DE32100BEA
Clé de compte Non Écriture FE2C1236-8366-4814-8EB0-01DE32100BEA

Service d'informations provenant des appareils

Le fournisseur d'association express doit également prendre en charge le service d'informations provenant des appareils.

Service UUID
Service d'informations provenant des appareils 0x180A

L'utilisateur qui cherche à faire l'association express utilise les caractéristiques suivantes.

Nom Chiffré Autorisations UUID
Révision du micrologiciel Non Lire 0x2A26

Caractéristique: ID du modèle

Cette caractéristique permet à l'utilisateur de lire l'ID du modèle si nécessaire, en dehors de Lorsque l'appareil diffuse des annonces en mode visible. Elle doit toujours renvoyer les données suivantes:

Octet Type de données Description Valeur
0 – 2 uint24 ID du modèle Variable

Caractéristique: association basée sur les clés

Cette caractéristique contrôle la procédure d'association basée sur les clés. Dans cette procédure, un certain niveau de confiance est établi en vérifiant que le demandeur et Le fournisseur possède tous deux une clé pré-partagée. La clé est différente dans chaque cas:

  • Cas 1: la clé pré-partagée est basée sur la clé publique/privée anti-spoofing et sa propre paire de clés publique/privée, qui changera tentative d'association.

    • L'opérateur est en mode association.
    • Le demandeur vérifie que le Fournisseur est en possession du de clé privée anti-spoofing.

    Notez qu'en mode association, l'opérateur peut aussi, bien sûr, procéder à l'association comme d'habitude (par exemple, pour associer un appareil qui n'est pas compatible avec Association basée sur les clés de la paire.

  • Cas 2: la clé pré-partagée est l'une des clés de compte.

    • L'opérateur n'est généralement pas en mode association. Il ne s'agit toutefois pas exigence : le fournisseur doit permettre l'utilisation d'une clé de compte, même mode association.)
    • Le demandeur et le fournisseur vérifient chacun que l'autre est en possession du clé de compte Google Cloud.

Étant donné que les deux cas sont extrêmement similaires, sauf pour quelle clé pré-partagée est utilisée, ils sont combinés dans une procédure.

Format des données

Consultez la procédure pour savoir comment chaque format est utilisé.

Octet Type de données Description Valeur Obligatoire ?
0 à 15 uint128 Requête chiffrée Variable Obligatoire
16 – 79 Clé publique Variable Facultatif

Tableau 1.1:Requête chiffrée, écrite dans la caractéristique par le demandeur.

Octet Type de données Description Valeur Obligatoire ?
0 uint8 Type de message 0x00 = requête d'association basée sur une clé Obligatoire
1 uint8 Indicateurs
  • Bit 0 (MSB): obsolète et ignoré par Seeker.
  • Bit 1: 1 si le demandeur demande au fournisseur d'initier la liaison, et que cette requête contient l'adresse BR/EDR du demandeur. 0 dans le cas contraire.
  • Bit 2: 1 si le demandeur demande au fournisseur de communiquer le nom existant. 0 dans le cas contraire.
  • Bit 3: 1 pour l'écriture rétroactive de la clé de compte. 0 dans le cas contraire.
  • Les bits 4 à 7 sont réservés pour une utilisation future et doivent être ignorés.
varie Obligatoire
2 – 7 uint48 Soit:
  • Adresse BLE actuelle du fournisseur
  • Adresse publique du fournisseur
varie Obligatoire
8 – 13 uint48 Adresse BR/EDR du demandeur varie Présent uniquement si le bit 1 ou 3 d'indicateurs est défini
n - 15 Valeur aléatoire (sel) varie Obligatoire

Tableau 1.2.1:requête brute (type 0x00). déchiffré à partir de la couche requête figurant dans le Tableau 1.1.

Octet Type de données Description Valeur Obligatoire ?
0 uint8 Type de message 0x10 = demande d'action Obligatoire
1 uint8 Indicateurs
  • Bit 0 (MSB): 1 s'il s'agit d'une action sur l'appareil, 0 dans le cas contraire.
  • Bit 1: 1 s'il est suivi de Additional Data feature et 0 dans le cas contraire.
  • Les bits 2 à 7 sont réservés pour une utilisation future et doivent être ignorés.
varie Obligatoire
2 – 7 uint48 Soit:
  • Adresse BLE actuelle du fournisseur
  • Adresse publique du fournisseur
varie Obligatoire
8 uint8 Groupe de messages varie Obligatoire si le bit 0 d'indicateurs est défini
9 uint8 Code du message varie Obligatoire si le bit 0 d'indicateurs est défini
10 uint8 Dépend des indicateurs:
  • Le bit 0 est défini: longueur de données supplémentaire, inférieure à 6
  • Le bit 1 est défini: ID de données
varie Obligatoire si le bit 0 ou 1 d'indicateurs est défini
11 - n Données supplémentaires varie Facultatif
n - 15 Valeur aléatoire (sel) varie Obligatoire

Tableau 1.2.2:requête brute (type 0x10). déchiffré à partir de la couche requête figurant dans le Tableau 1.1.

Octet Type de données Description Valeur
0 uint8 Type de message 0x01 = réponse de couplage basée sur des clés
1 – 6 uint48 Adresse publique (BR/EDR) du fournisseur varie
7 – 15 Valeur aléatoire (sel) varie

Tableau 1.3:réponse brute. Chiffré pour générer la réponse chiffrée dans Tableau 1.4.

Octet Type de données Description Valeur
0 à 15 uint128 Réponse chiffrée varie

Tableau 1.4: Réponse chiffrée envoyée par le Fournisseur au demandeur via un avertir.

Caractéristique: clé d'accès

Cette caractéristique est utilisée lors de l' association basée sur des clés procédure.

Octet Type de données Description Valeur
0 à 15 uint128 Blocage de clés d'accès chiffrées varie

Tableau 2.1:Bloc de clé d'accès chiffré Voir Procédure d'association basée sur des clés.

Octet Type de données Description Valeur
0 uint8 Type de message Au choix:
  • 0x02 = Clé d'accès du chercheur
  • 0x03 = Clé d'accès du fournisseur
1 – 3 unit32 Clé d'accès à 6 chiffres varie
4 – 15 Valeur aléatoire (sel) varie

Tableau 2.2:bloc de clé d'accès brute. Version déchiffrée du Tableau 2.1.

Caractéristique: clé de compte

Après l'association, l'utilisateur qui cherche à associer l'Association express écrit une clé de compte pour l'Association express Fournisseur.

Octet Type de données Description Valeur
0 à 15 uint128 Clé de compte (chiffrée) varie

À la réception d'une requête d'écriture, le fournisseur Fast Pair doit procéder comme suit:

  1. Déchiffrez la clé de compte à l'aide de la clé secrète partagée générée à l'étape 4 de la procédure.
    • Pour les fournisseurs nécessitant une liaison (courant): <ph type="x-smartling-placeholder">
        </ph>
      • Avant de procéder au déchiffrement, vérifiez que la clé secrète partagée a bien été utilisée pour déchiffrer la de clé d'accès de l'étape 12. Si vous n'avez pas réussi cette étape en utilisant vous pouvez ignorer cette étape d'écriture et quitter.
    • À ce stade, la clé secrète partagée (K dans la procédure) ne sera pas utilisée pour cette association. Toutes les requêtes qui sont chiffrées avec cette clé sans redémarrage, la procédure doit être refusée.
  2. Vérifiez que la valeur déchiffrée commence par 0x04. Si ce n'est pas le cas, ignorez effectuer cette écriture et quitter.
  3. Vérifiez si la liste de clés de compte persistante contient de l'espace pour les nouvelles .
  4. Si ce n'est pas le cas, supprimez de la liste la valeur utilisée le moins récemment.
  5. Ajoutez la nouvelle valeur à la liste.

Les clés de compte de la liste sont utilisées lors de l'association basée sur les clés.

Caractéristique: révision du micrologiciel

Cette caractéristique permet à l'utilisateur de ou au fournisseur de services, selon les besoins. Elle doit toujours renvoyer les données suivantes:

Octet Type de données Description Valeur
0 – var utf8s Code de révision du micrologiciel varie

Il doit être encapsulé dans une seule chaîne utf8, même s'il y en a plusieurs (par exemple, trois micrologiciels pour l'écouteur gauche, l'écouteur droit et l'étui) sur le fournisseur. Le fournisseur peut également renvoyer les chaînes spécifiques pour des cas particuliers:

  1. status-updates (mise à jour du statut) : si le fournisseur effectue actuellement une mise à jour vers un nouveau micrologiciel. Le fournisseur peut également renvoyer la version du micrologiciel en préproduction.

  2. status-anormal: si l'état du fournisseur est anormal. Par exemple, il peut a rencontré un dysfonctionnement suite à l'échec de la mise à jour du micrologiciel. Cette valeur entraîne l'utilisateur doit afficher un message pour indiquer à l'utilisateur qu'il doit être mis à jour maintenant.

Le Fournisseur doit limiter l'accès à la caractéristique Révision du micrologiciel à empêcher le suivi de l'appareil. Restrictions suggérées:

  • les appareils liés doivent pouvoir y accéder à tout moment
  • n'importe quel appareil doit avoir accès lorsque le fournisseur est visible

Caractéristique: données supplémentaires

Ce service doit présenter les caractéristiques suivantes :

Caractéristique du service d'association express Chiffré Autorisations UUID
Données Non Écriture et notification FE2C1237-8366-4814-8EB0-01DE32100BEA
Ancienne caractéristique du service de paire rapide (abandon prévu le 01/01/2021) Chiffré Autorisations UUID
Données Non Écriture et notification 0x1237

Avant d'écrire ou d'informer cette caractéristique, un handshake via la caractéristique FE2C1234-8366-4814-8EB0-01DE32100BEA pour un secret partagé. L'algorithme AES-CTR sera utilisé pour chiffrer les données qui transitent caractéristique, dont l'algorithme est défini ci-dessous. Ce mode est plus des données s'étendant au-delà d'un seul bloc de 16 octets. HMAC-SHA256 pour garantir l'intégrité des données, également définie ci-dessous.

Octet Description Valeur
0 - 7 Les huit premiers octets de HMAC-SHA256. varie
8 – 15 Nonce, utilisé par le chiffrement AES-CTR. varie
16 – var Données chiffrées varie

Tableau 3.1:Paquet de données envoyé par le Fournisseur au demandeur via un notifiées ou envoyées par le demandeur au Fournisseur par écriture.

Octet Type de données Description Valeur
0 – var byte array Données varie, vous devez le décoder en fonction de l'ID de données du Tableau 1.2.2:
  • 0x01(nom personnalisé): utf8s

Tableau 3.2:données brutes. Déchiffrement à partir des données chiffrées dans Tableau 3.1.

Lorsqu'une notification est demandée (par exemple, demande un nom personnalisé via Bit 2 dans Tableau 1.2.1), le Fournisseur de Association express doit procéder comme suit:

  1. Générer 8 octets aléatoires de manière cryptographique pour Nonce.
  2. Chiffrez les données à l'aide de l'algorithme AES-CTR, où chaque bloc de 16 octets est généré à l'aide de

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

    1. La clé AES correspond au secret partagé de l'étape 4 de la procédure.
    2. clearBlock[i] est un bloc de 16 octets commençant par data[i * 16]. Le dernier peut être inférieure à 16 octets.
  3. Exécutez concat(encryptedBlock[0], encryptedBlock[1],...) pour créer le Données chiffrées.

  4. Générer HMAC-SHA256 en

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

    1. K est généré par concat(shared_secret, zéros de 48 octets), le shared_secret provient de l'étape 4 de la procédure.
    2. opad correspond à une marge intérieure extérieure de 64 octets, composée d'octets répétés de valeur 0x5C
    3. La marge intérieure interne de l'ipad est de 64 octets, composée d'octets répétés de valeur 0x36
  5. Prenez les huit premiers octets du code HMAC-SHA256 en tant que préfixe du champ Data paquet.

À la réception d'une requête d'écriture, le fournisseur Fast Pair doit procéder comme suit:

  1. Vérifiez l'intégrité des données en vérifiant les 8 premiers octets des HMAC-SHA256
  2. Déchiffrer les données chiffrées à l'aide d'AES-CTR, où chaque bloc est généré à l'aide de

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

    1. chiffréeBloc[i] est un bloc de 16 octets commençant par chiffré_data[i * 16]. Le dernier bloc peut comporter moins de 16 octets.
    2. Une clé AES est générée ou identifiée à partir du handshake, par exemple <ph type="x-smartling-placeholder">
        </ph>
      1. dans le flux de nommage 1, elles proviennent d'ECDH et ne peuvent pas être utilisé à nouveau pour cette association. Toutes les requêtes qui sont chiffrées avec cette clé sans que la procédure soit redémarrée refusé.
      2. dans le flux de nommage 2, il s'agit de la clé de compte.
  3. Exécutez la commande concat(clearBlock[0], clearBlock[1],...) pour créer les données brutes.