Code d'authentification de message
Les flux de messages sont utilisés pour configurer le switch audio. Pour en savoir plus, consultez Messages du 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 sur le Seeker.
Générer un MAC (code d'authentification de message)
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 se compose des 8 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, 48 octets de ZÉROS).
- message correspond aux données supplémentaires du flux de messages.
- nonce est généré par concat(session_nonce, message_nonce). Les valeurs session_nonce et message_nonce sont définies dans la section suivante.
- opad correspond à 64 octets de remplissage externe, composés d'octets répétés dont la valeur est
0x5C. - ipad correspond à 64 octets de remplissage interne, composés d'octets répétés dont la valeur est
0x36.
Nonce de session et nonce de message
Pour éviter une attaque par relecture, le fournisseur doit s'assurer qu'un nonce n'est pas répété. Étant donné qu'il n'est pas simple de maintenir la synchronisation de l'horloge ou du compteur sur le fournisseur et 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 demandeur génère le nonce de message (par message), qui est généré de manière aléatoire pour chaque message. Le nonce permettant de générer le MAC de chaque message est la combinaison du nonce de session et du nonce de 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 de code du message | Valeur |
|---|---|
| Nonce de session | 0x0A |
Le nonce de session doit être généré et envoyé au demandeur lorsque le flux de messages 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 des données supplémentaires | 0x0008 |
| 4 - 11 | nonce de session | varies |
Pour envoyer un message lorsqu'un MAC est requis, le demandeur envoie un nonce de message et le MAC avec le message.
| Octet | Type de données | Description | Valeur |
|---|---|---|---|
| 0 | uint8 | Groupe de messages | varies |
| 1 | uint8 | Code du message | varies |
| 2 - 3 | uint16 | Longueur des données supplémentaires(longueur des données supplémentaires + 16) | varies |
| 4 - n | Données supplémentaires | varies | |
| n+1 à n+8 | Nonce du message | varies | |
| n + 9 – n + 16 | Code d'authentification de message | varies |
Valider le MAC (code d'authentification de message)
Lorsqu'il reçoit un message avec le code d'authentification du message, le fournisseur doit le valider à l'aide de la même fonction que la fonction de génération. Autrement dit, l'adresse MAC reçue doit être égale aux huit 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 parcourir toutes les clés de compte stockées pour vérifier le MAC. - message correspond aux données supplémentaires (à l'exclusion du nonce et du MAC du message) du flux de messages.
Si le MAC est correct, le fournisseur doit suivre les instructions du message. Sinon, il doit envoyer un NAK avec le motif d'erreur 0x3 (non autorisé en raison d'un code d'authentification de message incorrect).