Caractéristiques

Service Association express

Le fournisseur d'Association express doit disposer du service GATT suivant.

Service UUID
Service d'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 Lecture FE2C1233-8366-4814-8EB0-01DE32100BEA
Association basée sur une clé Non Écrire et notifier FE2C1234-8366-4814-8EB0-01DE32100BEA
Clé d'accès Non Écrire et notifier FE2C1235-8366-4814-8EB0-01DE32100BEA
Clé de compte Non Écriture FE2C1236-8366-4814-8EB0-01DE32100BEA

Service d'informations sur l'appareil

Le fournisseur d'Association express doit également être compatible avec le service d'informations sur l'appareil.

Service UUID
Service d'informations sur l'appareil 0x180A

Fast Pair Seeker utilise les caractéristiques suivantes.

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

Caractéristique : ID du modèle

Cette caractéristique permet au Seeker de lire l'ID du modèle si nécessaire, en dehors du moment où l'appareil diffuse en mode détectable. 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 une clé

Cette caractéristique contrôle la procédure d'association basée sur une clé. Dans cette procédure, un certain niveau de confiance est établi en vérifiant que le demandeur et le fournisseur possèdent 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 paire de clés publique/privée anti-spoofing et sur la paire de clés publique/privée du Chercheur, qui change à chaque tentative d'association.

    • Le fournisseur est en mode association.
    • Le chercheur vérifie que le fournisseur est en possession de la clé privée anti-spoofing.

    Notez qu'en mode association, le fournisseur peut également s'associer de la manière habituelle, par exemple pour s'associer à un appareil qui n'est pas compatible avec l'association basée sur une clé de l'Association express.

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

    • Le fournisseur n'est généralement pas en mode association. (Toutefois, il ne s'agit pas d'une exigence. Le fournisseur doit accepter l'utilisation d'une clé de compte, même en mode association.)
    • Le demandeur et le fournisseur vérifient chacun que l'autre est en possession de la clé de compte.

Comme les deux cas sont extrêmement similaires, à l'exception de la clé pré-partagée utilisée, ils sont combinés dans la procédure.

Format des données

Consultez la procédure pour savoir comment utiliser chaque format.

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 chercheur.

Octet Type de données Description Valeur Obligatoire ?
0 uint8 Type de message 0x00 = demande d'association basée sur une clé Obligatoire
1 uint8 Flags
  • Bit 0 (MSB) : obsolète et ignoré par Seeker.
  • Bit 1 : 1 si le demandeur demande au fournisseur d'initier l'association et que cette demande contient l'adresse BR/EDR du demandeur. 0 sinon.
  • Bit 2 : 1 si le demandeur demande au fournisseur de notifier le nom existant. 0 dans le cas contraire.
  • Bit 3 : 1 s'il s'agit d'une écriture rétroactive de la clé de compte. 0 sinon.
  • Les bits 4 à 7 sont réservés pour une utilisation ultérieure et doivent être ignorés.
varies Obligatoire
2 - 7 uint48 Soit :
  • Adresse BLE actuelle du fournisseur
  • Adresse publique du fournisseur
varie Obligatoire
8 - 13 uint48 Adresse BR/EDR du chercheur varies Ne les présentez que si le bit 1 ou 3 des indicateurs est défini.
n – 15 Valeur aléatoire (salt) varie Obligatoire

Tableau 1.2.1 : requête brute (type 0x00). Déchiffré à partir de la requête chiffrée 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 Flags
  • Bit 0 (MSB) : 1 s'il s'agit d'une action sur l'appareil, 0 sinon.
  • Bit 1 : 1 si la caractéristique Données supplémentaires suit, 0 sinon.
  • Les bits 2 à 7 sont réservés à une utilisation ultérieure et doivent être ignorés.
varie Obligatoire
2 - 7 uint48 Soit :
  • Adresse BLE actuelle du fournisseur
  • Adresse publique du fournisseur
varie Obligatoire
8 uint8 Message de groupe varie Obligatoire si le bit 0 des indicateurs est défini
9 uint8 Code du message varie Obligatoire si le bit d'indicateur 0 est défini
10 uint8 Dépend des indicateurs :
  • Le bit 0 est défini : longueur des données supplémentaires, inférieure à 6
  • Le bit 1 est défini : ID de données
varie Obligatoire si le bit 0 ou 1 de l'indicateur est défini
11 - n Données supplémentaires varie Facultatif
n – 15 Valeur aléatoire (salt) varie Obligatoire

Tableau 1.2.2 : requête brute (type 0x10). Déchiffré à partir de la requête chiffrée dans le tableau 1.1.

Octet Type de données Description Valeur
0 uint8 Type de message 0x01 = réponse d'association basée sur une clé
1 - 6 uint48 Adresse publique (BR/EDR) du fournisseur varies
7 - 15 Valeur aléatoire (salage) varies

Tableau 1.3 : Réponse brute. Chiffré pour produire la réponse chiffrée dans le 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 chercheur via une notification.

Caractéristique : clé d'accès

Cette caractéristique est utilisée lors de la procédure d' association basée sur une clé.

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

Tableau 2.1 : Bloc de clé d'accès chiffré. Pour en savoir plus sur l'utilisation, consultez la procédure d'association basée sur une clé.

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 à six chiffres varie
4 à 15 Valeur aléatoire (salage) varie

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

Caractéristique : clé de compte

Après l'association, le chercheur d'Association express écrit une clé de compte dans le fournisseur d'Association express.

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

Lorsqu'il reçoit une requête d'écriture, le fournisseur Fast Pair doit effectuer les opérations suivantes :

  1. Déchiffrez la clé de compte à l'aide du secret partagé généré à l'étape 4 de la procédure.
    • Pour les fournisseurs qui exigent une caution (courant) :
      • Avant de déchiffrer, vérifiez que le secret partagé a été utilisé pour déchiffrer la demande de clé d'accès de l'étape 12. Si cette étape n'a pas été effectuée à l'aide de ce secret, ignorez cette écriture et quittez.
    • À ce stade, le secret partagé (K dans la procédure) ne sera plus utilisé pour cette association. Toute requête chiffrée avec cette clé qui arrive sans redémarrage de la procédure doit être rejetée.
  2. Vérifiez que la valeur déchiffrée commence par 0x04 ou 0xFF. Si ce n'est pas le cas, ignorez cette écriture et quittez.
    • Si la valeur est 0x04 :
      • Vérifiez si la liste des clés de compte persistantes dispose d'espace pour la nouvelle valeur.
      • Si ce n'est pas le cas, supprimez de la liste la valeur la moins récemment utilisée.
      • Ajoutez la nouvelle valeur à la liste.
    • Si la valeur est 0xFF :
      • Considérez cela comme une session d'association temporaire et n'effectuez aucune opération.
      • Cela peut se produire avec le flux Écrire la clé de compte de manière rétroactive.
      • Ne stockez pas la clé et ne l'utilisez pas dans la liste des clés de compte, pour le chiffrement ni pour les calculs MAC.
      • La suppression d'un lien est déclenchée par un événement ou un délai d'inactivité spécifique à une fonctionnalité. Pour le partage audio LE, il est fortement recommandé de supprimer l'association BLE et la clé de liaison 10 minutes après la déconnexion de la session temporaire.

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

Caractéristique : révision du micrologiciel

Cette caractéristique permet au demandeur de lire la révision du micrologiciel du fournisseur si nécessaire. Il doit toujours renvoyer les données suivantes :

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

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

  1. status-updating : si le fournisseur est en train de mettre à jour un nouveau micrologiciel. Le fournisseur peut également renvoyer la version du micrologiciel préparé.

  2. status-abnormal : si le fournisseur est dans un état anormal. Par exemple, il ne fonctionne pas correctement, car la mise à jour du micrologiciel a échoué. Cette valeur entraîne l'affichage d'un message par le Seeker pour informer l'utilisateur qu'il doit être mis à jour maintenant.

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

  • les appareils associés doivent avoir accès à tout moment
  • tout appareil doit avoir accès lorsque le fournisseur est visible.

Si le fournisseur est compatible avec la fonctionnalité Localiser mon hub, une implémentation supplémentaire est requise. Pour en savoir plus, consultez Mises à jour du micrologiciel Localiser.

Caractéristique : Données supplémentaires

Ce service doit présenter la caractéristique suivante.

Caractéristique du service d'Association express Chiffré Autorisations UUID
Données Non Écrire et notifier FE2C1237-8366-4814-8EB0-01DE32100BEA
Ancienne caractéristique du service Association express (sera obsolète le 01/01/2021) Chiffré Autorisations UUID
Données Non Écrire et notifier 0x1237

Avant d'écrire ou d'envoyer une notification à cette caractéristique, un handshake doit être effectué via la caractéristique FE2C1234-8366-4814-8EB0-01DE32100BEA pour obtenir un secret partagé. AES-CTR sera utilisé pour chiffrer les données transitant par cette caractéristique, dont l'algorithme est défini ci-dessous. Ce mode est plus sécurisé pour les données qui s'étendent au-delà d'un seul bloc de 16 octets. HMAC-SHA256 sera utilisé pour garantir l'intégrité des données, qui est é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. varies
16 - var Données chiffrées. varies

Tableau 3.1 : Paquet de données envoyé par le fournisseur au demandeur via une notification ou envoyé par le demandeur au fournisseur via une écriture.

Octet Type de données Description Valeur
0 - var byte array Données varies, décodez-le en fonction de l'ID de données du tableau 1.2.2 :
  • 0x01(personalized name): utf8s

Tableau 3.2 : données brutes. Déchiffré à partir des données chiffrées du tableau 3.1.

Lorsqu'une notification est demandée (par exemple, demander un nom personnalisé via le bit 2 du tableau 1.2.1), le fournisseur d'Association express doit procéder comme suit :

  1. Générez 8 octets aléatoires de manière cryptographique pour le nonce.
  2. Chiffrez les données à l'aide d'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))
    

    où

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

  4. Générez un HMAC-SHA256 en

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

    où

    1. K est généré par concat(shared_secret, 48-byte ZEROs). shared_secret provient de l'étape 4 de la procédure.
    2. opad est un remplissage externe de 64 octets, composé d'octets répétés d'une valeur de 0x5C.
    3. ipad est un remplissage interne de 64 octets, composé d'octets répétés dont la valeur est 0x36.
  5. Prenez les huit premiers octets du HMAC-SHA256 comme préfixe du paquet de données.

Lorsqu'il reçoit une requête d'écriture, le fournisseur Association express doit effectuer les opérations suivantes :

  1. Vérifiez l'intégrité des données en contrôlant les huit premiers octets de HMAC-SHA256.
  2. Déchiffrez 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))
    

    où

    1. encryptedBlock[i] est un bloc de 16 octets commençant à encrypted_data[i * 16]. Le dernier bloc peut être inférieur à 16 octets.
    2. La clé AES est générée ou identifiée à partir du handshake, par exemple :
      1. Dans le flux de dénomination 1, il provient d'ECDH et ne sera plus utilisé pour cette association. Toute requête chiffrée avec cette clé sans redémarrage de la procédure doit être rejetée.
      2. Dans le flux d'attribution de nom 2, il s'agit de la clé de compte.
  3. Exécutez concat(clearBlock[0], clearBlock[1],...) pour créer les données brutes.