Código de autenticação da mensagem

Os streamings de mensagens são usados para configurar a seleção de áudio. Consulte Mensagens de seleção de áudio. Para essas configurações importantes, o provedor precisa garantir que a mensagem seja enviada pelo GMSCore (módulo de Pareamento rápido) e não por qualquer outro app no Seeker.

Gerar MAC (código de autenticação de mensagem)

O FP Seeker adiciona um código de autenticação para mensagens de configuração de dispositivos usando o HMAC-SHA256. O MAC da mensagem consiste nos primeiros 8 bytes de:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

onde

  1. K é gerado por concat(chave de conta, ZERO de 48 bytes).
  2. message são os dados adicionais do stream de mensagens.
  3. nonce é gerado por concat(session_nonce, message_nonce). O valor de uso único da sessão e o valor de uso único da mensagem são definidos na próxima seção.
  4. opad é de 64 bytes de preenchimento externo, consistindo em bytes repetidos com valor 0x5C.
  5. ipad é 64 bytes de preenchimento interno, consistindo em bytes repetidos com valor 0x36.

Valor de uso único da sessão e valor de uso único da mensagem

Para evitar um ataque de repetição, o provedor precisa garantir que um valor de uso único não seja repetido. Como manter a sincronização do relógio ou do contador no provedor e no buscador não é simples, o provedor gera o valor de uso único da sessão (por conexão), que é compartilhado com todas as mensagens durante a conexão, enquanto o Seeker gera o valor de uso único da mensagem (por mensagem), que é gerado aleatoriamente para cada mensagem. O valor de uso único para gerar o MAC de cada mensagem é a combinação de valor de uso único da sessão e valor de uso único da mensagem, ou seja, concat(session_nonce, message_nonce).

Adicionamos um valor de uso único da sessão ao grupo de eventos "Informações do dispositivo":

Nome do grupo de mensagens Valor
Evento de informações do dispositivo 0x03
Nome do código da mensagem Valor
Valor de uso único da sessão 0x0A

O valor de uso único da sessão precisa ser gerado e enviado ao Seeker quando o RFCOMM se conectar:

Octeto Tipo de dados Descrição Valor
0 uint8 Evento de informações do dispositivo 0x03
1 uint8 Valor de uso único da sessão 0x0A
2 a 3 uint16 Comprimento de dados adicional 0x0008
4 a 11 valor de uso único da sessão varia

Para enviar uma mensagem quando um MAC for necessário, o Seeker enviará um valor de uso único da mensagem e o MAC com a mensagem.

Octeto Tipo de dados Descrição Valor
0 uint8 Grupo de mensagens varia
1 uint8 Código da mensagem varia
2 a 3 uint16 Comprimento de dados adicionais(o comprimento de dados adicional + 16) varia
4 - n Dados extras varia
n + 1 - n + 8 Valor de uso único da mensagem varia
n + 9 - n + 16 Código de autenticação de mensagem varia

Verificar o MAC (código de autenticação de mensagem)

Ao receber uma mensagem com o código de autenticação da mensagem, o provedor precisa verificá-la usando a mesma função da função de geração. Ou seja, o MAC recebido deve ser igual aos primeiros 8 bytes do

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

onde:

  1. K é gerado por concat(account key, 48-byte ZEROs), e o provedor precisa percorrer todas as chaves de conta armazenadas para verificar o MAC.
  2. message são os dados adicionais (exceto o valor de uso único e o MAC da mensagem) do fluxo de mensagens.

Se o MAC estiver correto, o provedor deverá seguir as instruções da mensagem. Caso contrário, o Provedor enviará um NAK com o motivo do erro, 0x3 - não permitido devido a um código de autenticação de mensagem incorreto.