Código de autenticación de mensajes
Las transmisiones de mensajes se usan para configurar el cambio de audio. Consulta Mensajes sobre el cambio de audio. Para estas configuraciones importantes, el proveedor debe asegurarse de que el mensaje se envíe a través de GMSCore (módulo de Vinculación rápida) y no de ninguna otra app del 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 mediante HMAC-SHA256. La 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 se genera mediante concat(clave de cuenta, 48-byte ZEROs).
- message son los datos adicionales del flujo de mensajes.
- nonce se genera mediante concat(session_nonce, message_nonce); el nonce de sesión y el nonce de mensaje se definen en la siguiente sección.
- opad es de 64 bytes de relleno externo, compuesto por bytes repetidos con un valor de
0x5C
. - ipad tiene 64 bytes de relleno interno, que consta de bytes repetidos con un valor de
0x36
.
Nonce de sesión y nonce de mensaje
Para evitar un ataque de repetición, el proveedor debe asegurarse de que un nonce no se repita. Dado que mantener la sincronización del reloj o del contador tanto en el proveedor como en el 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 Seeker genera el nonce del mensaje (por mensaje), que se genera de forma aleatoria para cada mensaje. El nonce para generar la MAC de cada mensaje es la combinación del nonce de sesión y el nonce de mensaje, es decir, concat(session_nonce, message_nonce).
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 | 0 × 03 |
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 conecta RFCOMM:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | Uint8 | Evento de información del dispositivo | 0 × 03 |
1 | Uint8 | Nonce de sesión | 0 × 0 A |
Entre 2 y 3 | Uint16 | Longitud adicional de los datos | 0x0008 |
4 - 11 | nonce de sesión | varía |
Para enviar un mensaje cuando se requiera una MAC, el buscador enviará un nonce de mensaje y la 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 |
Entre 2 y 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 reciba un mensaje con el código de autenticación del mensaje, el proveedor lo verificará con la misma función que la de generación. Es decir, la dirección MAC recibida 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 recorrerá todas las claves de cuenta almacenadas para verificar la MAC.- message son los datos adicionales (excepto el nonce de mensajes y MAC) del flujo de mensajes.
Si la MAC es correcta, el proveedor debe seguir las instrucciones del mensaje. De lo contrario, el proveedor enviará un NAK con el motivo del error 0x3 (no permitido debido a un código incorrecto de autenticación del mensaje).