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

  1. K se genera mediante concat(clave de cuenta, 48-byte ZEROs).
  2. message son los datos adicionales del flujo de mensajes.
  3. 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.
  4. opad es de 64 bytes de relleno externo, compuesto por bytes repetidos con un valor de 0x5C.
  5. 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:

  1. concat(account key, 48-byte ZEROs) genera K, y el proveedor recorrerá todas las claves de cuenta almacenadas para verificar la MAC.
  2. 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).