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 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 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 mediante 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

  1. K se genera mediante concat(clave de cuenta, ceros de 48 bytes).
  2. message son los datos adicionales del flujo de mensajes.
  3. nonce se genera mediante concat(session_nonce, message_nonce); nonce de sesión y nonce de mensaje se definen en la siguiente sección.
  4. opad tiene 64 bytes de relleno externo, que constan de bytes repetidos con valor 0x5C.
  5. ipad tiene 64 bytes de relleno interno, que constan de bytes repetidos con el valor 0x36.

Nonce de sesión y nonce de mensaje

Para evitar un ataque de repetición, el proveedor debe asegurarse de que no se repita un nonce. Dado que mantener la sincronización del reloj o del contador en el proveedor y en el buscador 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 (por mensaje), que se genera de forma aleatoria para cada mensaje. El nonce para generar el MAC de cada mensaje es la combinación del nonce de sesión y del nonce del 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 0x03
Nombre código del mensaje Valor
Nonce de sesión 0x0A

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 0x03
1 uint8 Nonce de sesión 0x0A
2 - 3 uint16 Longitud de datos adicional 0x0008
4 - 11 nonce de sesión varía

Para enviar un mensaje cuando se requiere un MAC, Seeker 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 del 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 recibas 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, 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:

  1. concat(account key, 48-byte ZEROs) genera K, y el proveedor atravesará todas las claves de cuenta almacenadas para verificar el MAC.
  2. message son los datos adicionales (sin incluir el nonce de mensaje ni el MAC) del flujo de mensajes.

Si el MAC es correcto, el proveedor debe seguir las instrucciones del mensaje. De lo contrario, el proveedor enviará un NAK con el motivo del error, 0x3; no se permite debido a un código de autenticación del mensaje incorrecto.