Caractéristiques

Service Association express

Le fournisseur 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 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 envoyer une notification FE2C1234-8366-4814-8EB0-01DE32100BEA
Clé d'accès Non Écrire et envoyer une notification 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. Il 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-usurpation et sur la propre paire de clés publique/privée du demandeur, qui change à chaque tentative d'association.

    • Le fournisseur est en mode association.
    • Le demandeur vérifie que le fournisseur possède la clé privée anti-usurpation.

    Notez que, en mode association, le fournisseur peut également s'associer de la manière habituelle, par exemple à un appareil qui ne prend pas en charge l'association basée sur une clé de l'Association express.

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

    • Le fournisseur n'est généralement pas en mode association. (Mais ce n'est pas une exigence : le fournisseur doit permettre 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 demandeur.

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 Indicateurs
  • 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 dans le cas contraire.
  • Bit 2 : 1 si le demandeur demande au fournisseur de notifier le nom existant. 0 dans le cas contraire.
  • Bit 3 : 1 si la clé de compte est écrite rétroactivement. 0 dans le cas contraire.
  • Les bits 4 à 7 sont réservés pour une utilisation ultérieure et doivent être ignorés.
variable Obligatoire
2 - 7 uint48 Soit :
  • Adresse BLE actuelle du fournisseur
  • Adresse publique du fournisseur
variable Obligatoire
8 - 13 uint48 Adresse BR/EDR du demandeur variable Ne les présentez que si le bit 1 ou 3 des indicateurs est défini.
n – 15 Valeur aléatoire (salt) variable Obligatoire

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

Tableau 1.2.2 : requête brute (type 0x10). Déchiffré à partir de la demande chiffrée dans 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 du fournisseur (BR/EDR) variable
7 à 15 Valeur aléatoire (salt) variable

Tableau 1.3 : réponse brute. chiffrée 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 variable

Tableau 1.4 : Réponse chiffrée, envoyée par le fournisseur au demandeur 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é variable

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

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 variable
4 à 15 Valeur aléatoire (salt) variable

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

Caractéristique : clé de compte

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

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

Lorsqu'il reçoit une requête d'écriture, le fournisseur Association express 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 nécessitent l'association (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é validée avec ce code secret, ignorez cette écriture et quittez.
    • À ce stade, le secret partagé (K dans la procédure) ne sera plus utilisé pour cette association. Toutes les demandes chiffrées avec cette clé qui arrivent sans redémarrage de la procédure doivent être refusées.
  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 la valeur la moins récemment utilisée de la liste.
      • 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 une clé.

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 variable

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

  1. status-updating : si le fournisseur est en train de passer à un nouveau micrologiciel. Le fournisseur peut également renvoyer la version du micrologiciel intermédiaire.

  2. status-abnormal : si le fournisseur est dans un état anormal. Par exemple, il a mal fonctionné parce que la mise à jour du micrologiciel a échoué. Cette valeur entraînera l'affichage d'un message dans Seeker pour informer l'utilisateur qu'il doit effectuer la mise à 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 pouvoir y accéder à tout moment.
  • tout appareil devrait y avoir accès lorsque le fournisseur est détectable.

Caractéristique : données supplémentaires

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

Caractéristique du service Association express Chiffré Autorisations UUID
Données Non Écrire et envoyer une notification FE2C1237-8366-4814-8EB0-01DE32100BEA
Ancienne caractéristique du service Association express (sera obsolète le 1er janvier 2021) Chiffré Autorisations UUID
Données Non Écrire et envoyer une notification 0x1237

Avant d'écrire ou d'envoyer une notification à cette caractéristique, une prise de contact doit avoir lieu 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. variable
8 - 15 Nonce utilisé par le chiffrement AES-CTR. variable
16 – var Données chiffrées. variable

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 dans 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 Association express doit effectuer les opérations suivantes :

  1. Générez 8 octets aléatoires générés par chiffrement 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. Effectuez concat(encryptedBlock[0], encryptedBlock[1],...) pour créer les données chiffrées.

  4. Générer HMAC-SHA256 par

    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), où 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 dont la valeur est 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 8 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 examinant 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 de l'établissement de liaison, par exemple :
      1. Dans le flux de dénomination 1, il provient d'ECDH et ne sera plus utilisé pour cette association. Toutes les demandes chiffrées avec cette clé qui arrivent sans redémarrage de la procédure doivent être refusées.
      2. Dans le flux de dénomination 2, il s'agit de la clé de compte.
  3. Effectuez concat(clearBlock[0], clearBlock[1],...) pour créer les données brutes.