Code d'authentification de message
Les flux de messages sont utilisés pour configurer le switch audio. Consultez Messages de switch audio : Pour ces configurations importantes, le fournisseur a besoin pour s'assurer que le message est envoyé par GMSCore (module Association express) et non par une autre application sur Seeker.
Générer un code d'authentification de message (MAC)
FP Seeker ajoute un code d'authentification de message pour les messages de configuration de l'appareil à l'aide de HMAC-SHA256. Le MAC du message comprend les huit premiers octets de:
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 correspond aux données supplémentaires du flux de messages.
- nonce est généré par concat(session_nonce, message_nonce); séance Le nonce et le nonce du message sont définis dans la section suivante.
- opad correspond à 64 octets de marge intérieure extérieure, composée d'octets répétés de valeur
0x5C
- ipad correspond à 64 octets de marge intérieure interne, composée 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 le maintien de la synchronisation de l'horloge ou du compteur sur les deux fournisseurs et qu'il ne soit pas simple, le fournisseur génère le nonce de session (par connexion), qui est partagé avec tous les messages durant la connexion, tandis qu'il génère le nonce du message (par message), qui est aléatoire générées pour chaque message. Le nonce permettant de générer l'adresse MAC de chaque message est la combinaison du nonce de session et du nonce de message, 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 lié aux 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 Seeker lorsque RFCOMM connecte:
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 | Événement lié aux 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 enverra un nonce de message et le MAC avec le message.
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 | Groupe de messages | varie |
1 | uint8 | Code du message | varie |
2 à 3 | uint16 | Longueur de données supplémentaire(longueur des données supplémentaires + 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 |
Valider l'adresse MAC (code d'authentification des messages)
À la réception d'un message contenant ce code, le fournisseur doit la vérifier en utilisant la même fonction que la fonction génératrice. En d'autres termes, 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ù :
- K est généré par
concat(account key, 48-byte ZEROs)
, et le fournisseur doit balayer toutes les clés de compte stockées pour vérifier le MAC. - message est les données supplémentaires (à l'exclusion du nonce et de l'adresse MAC du message) de le flux de messages.
Si le MAC est correct, le Fournisseur doit suivre les instructions du . Sinon, le fournisseur enverra une NAK avec le motif de l'erreur, 0x3 - non autorisée en raison d'un code d'authentification de message incorrect.