Código de autenticação da mensagem

Fluxos 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 para garantir que a mensagem seja enviada pelo GMSCore (módulo de Pareamento rápido) e não por nenhum outro aplicativo no Seeker.

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

O FP Seeker adiciona um código de autenticação de mensagem para mensagens de configuração do dispositivo usando 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, ZEROs de 48 bytes).
  2. message são os dados adicionais do fluxo de mensagens.
  3. nonce é gerado por concat(session_nonce, message_nonce); sessão os valores de uso único e de valor de uso único da mensagem são definidos na seção a seguir.
  4. opad tem 64 bytes de preenchimento externo, consistindo em bytes repetidos com valor 0x5C
  5. ipad tem 64 bytes de preenchimento interno, consistindo em bytes repetidos com valor 0x36

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

Para evitar um ataque de repetição, o provedor precisa garantir que um valor de uso único não seja repetido. Como a sincronização do relógio ou do contador é mantida e o Seeker não for simples, o provedor gera o valor de uso único da sessão (por conexão), que é compartilhada com todas as mensagens durante a conexão, enquanto o buscador gera o valor de uso único da mensagem (por mensagem), que é gerado 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 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 nonce da sessão deve ser gerado e enviado ao buscador quando RFCOMM conecta:

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 Tamanho dos dados adicionais 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á uma mensagem de valor de uso único e o MAC junto 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 adicional(o tamanho dos dados adicionais + 16) varia
4 – N Outros dados varia
n + 1 - n + 8 Valor de uso único da mensagem varia
n + 9 - n + 16 Código de autenticação de mensagens varia

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

Ao receber uma mensagem com o código de autenticação, o provedor deve verificá-lo usando a mesma função que a função geradora. 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)))))

em que:

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

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