Código de autenticación de mensajes
Las transmisiones de mensajes se usan para configurar el cambio de audio. Consulta Mensajes de cambio de audio: Para estas configuraciones importantes, el proveedor necesita asegurarte de que el mensaje lo envíe GMSCore (módulo de Vinculación rápida) y no cualquier otra app en Seeker.
Generar MAC (código de autenticación de mensajes)
FP Seeker agrega un código de autenticación de mensajes para los mensajes de configuración del dispositivo con HMAC-SHA256. El MAC del mensaje consta de los primeros 8 bytes de lo siguiente:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
en el que
- K es generado por concat(clave de la cuenta, ceros de 48 bytes).
- message son los datos adicionales de flujo de mensajes.
- nonce se genera por concat(session_nonce, message_nonce); sesión El nonce y el nonce del mensaje se definen en la siguiente sección.
- opad es un conjunto de 64 bytes de relleno externo, que consta de bytes repetidos valorados.
0x5C
- ipad es un conjunto de 64 bytes de padding interno, que consta de bytes repetidos valorados.
0x36
Nonce de sesión y nonce de mensaje
Para evitar un ataque de repetición, el proveedor debe asegurarse de que no se repetido. Ya que se mantiene la sincronización del reloj o del contador en ambos proveedores, y Seeker no es sencillo, el proveedor genera el nonce de sesión (por conexión), que se comparte con todos los mensajes durante la conexión mientras que el buscador genera el nonce de mensaje (por mensaje), que se genera de forma aleatoria que se genera para cada mensaje. El nonce para generar el MAC de cada mensaje se la combinación del nonce de sesión y el nonce del mensaje, p.ej., concat(nonce_sesión, nonce_mensaje).
Agregamos un nonce de sesión al grupo de eventos Información del dispositivo:
Nombre del grupo de mensajes | Valor |
---|---|
Evento de información del dispositivo | 0x03 |
Nombre del código del mensaje | Valor |
---|---|
Nonce de sesión | 0 × 0 A |
El nonce de sesión se debe generar y enviar al Seeker cuando se use el RFCOMM conecta:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Evento de información del dispositivo | 0x03 |
1 | uint8 | Nonce de sesión | 0 × 0 A |
2 - 3 | uint16 | Longitud de los datos adicionales | 0 × 0008 |
4 - 11 | nonce de sesión | varía |
Para enviar un mensaje cuando se requiere un MAC, el Buscador enviará un nonce de mensaje y el MAC junto con el mensaje.
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 | Grupo de mensajes | varía |
1 | uint8 | Código de mensaje | varía |
2 - 3 | uint16 | Longitud de los datos adicionales(la longitud de los datos adicionales + 16) | varía |
4: n | Datos adicionales | varía | |
n + 1 - n + 8 | Nonce del mensaje | varía | |
n + 9 - n + 16 | Código de autenticación de mensajes | varía |
Verificar MAC (código de autenticación de mensajes)
Cuando recibe un mensaje con el código de autenticación de mensajes, el Proveedor debes verificarlo con la misma función que la que genera. Es decir, el MAC recibido debe ser igual a los primeros 8 bytes de
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
Donde:
concat(account key, 48-byte ZEROs)
genera K, y el proveedor debe recorrer todas las claves de cuentas almacenadas para verificar la MAC.- message son los datos adicionales (excluidos el nonce del mensaje y el MAC) de el flujo de mensajes.
Si la MAC es correcta, el Proveedor seguirá las instrucciones del mensaje. De lo contrario, el Proveedor enviará una NAK con el motivo del error, 0x3: no se permite debido a un código de autenticación de mensajes incorrecto.