Code d'authentification de message
Les flux de messages permettent de configurer le switch audio. Consultez la section Messages de switch audio. Pour ces configurations importantes, le fournisseur doit s'assurer que le message est envoyé par GMSCore (module Association express) et non par une autre application du Seeker.
Générer un MAC (code d'authentification de message)
FP Seeker ajoute un code d'authentification pour les messages de configuration d'appareil à l'aide de HMAC-SHA256. Le MAC du message est composé des 8 premiers octets:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
où
- K est généré par concat(clé de compte, zéros de 48 octets).
- message est les données supplémentaires du flux de messages.
- nonce est généré par concat(session_nonce, message_nonce). Le nonce de session et le nonce de message sont définis dans la section suivante.
- opad correspond à une marge intérieure extérieure de 64 octets, composée d'octets répétés dont la valeur est
0x5C
. - L'ipad a 64 octets de marge intérieure interne, composé d'octets répétés de valeur
0x36
.
Nonce de session et nonce de message
Pour empêcher une attaque par rejeu, le fournisseur doit s'assurer qu'un nonce n'est pas répété. Étant donné que la gestion de la synchronisation de l'horloge ou du compteur n'est pas simple à la fois pour le fournisseur et pour le demandeur, le fournisseur génère le nonce de session (par connexion), qui est partagé avec tous les messages pendant la connexion, tandis que le chercheur génère le nonce de message (par message), qui est généré de manière aléatoire pour chaque message. Le nonce de génération du MAC de chaque message est la combinaison du nonce de session et du nonce du message, c'est-à-dire concat(session_nonce, message_nonce).
Nous ajoutons un nonce de session au groupe d'événements "Informations sur l'appareil" :
Nom du groupe de messages | Valeur |
---|---|
Événement d'informations sur l'appareil | 0x03 |
Nom du code du message | Valeur |
---|---|
Nonce de session | 0x0A |
Le nonce de session doit être généré et envoyé au demandeur lorsque RFCOMM se connecte:
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 | Événement d'informations sur l'appareil | 0x03 |
1 | uint8 | Nonce de session | 0x0A |
2 – 3 | uint16 | Longueur de données supplémentaire | 0x0008 |
4 – 11 | Nonce de session | varie |
Pour envoyer un message lorsqu'un MAC est requis, le Seeker envoie un nonce de message et le MAC avec le message.
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 | Envoyer un message au groupe | varie |
1 | uint8 | Code du message | varie |
2 – 3 | uint16 | Longueur de données supplémentaire(longueur supplémentaire + 16) | varie |
4 - n | Données supplémentaires | varie | |
n + 1 - n + 8 | Nonce du message | varie | |
n + 9 - n + 16 | Code d'authentification du message | varie |
Vérifier l'adresse MAC (code d'authentification des messages)
Lors de la réception d'un message avec le code d'authentification du message, le fournisseur doit le vérifier en utilisant la même fonction que la fonction de génération. C'est-à-dire que le MAC reçu doit être égal aux 8 premiers octets de
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
où :
- La clé K est générée par
concat(account key, 48-byte ZEROs)
, et le fournisseur doit balayer toutes les clés de compte stockées pour vérifier l'adresse MAC. - message est les données supplémentaires (à l'exclusion du nonce et de l'adresse MAC des messages) du flux de messages.
Si l'adresse MAC est correcte, le fournisseur doit suivre les instructions du message. Sinon, le fournisseur enverra une NAK avec le motif d'erreur "0x3 - non autorisé" en raison d'un code d'authentification de message incorrect.