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

  1. K es generado por concat(clave de la cuenta, ceros de 48 bytes).
  2. message son los datos adicionales de flujo de mensajes.
  3. 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.
  4. opad es un conjunto de 64 bytes de relleno externo, que consta de bytes repetidos valorados. 0x5C
  5. 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:

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