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
- K é gerado por concat(chave de conta, ZEROs de 48 bytes).
- message são os dados adicionais do fluxo de mensagens.
- 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.
- opad tem 64 bytes de preenchimento externo, consistindo em bytes repetidos com valor
0x5C
- 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:
- K é gerado por
concat(account key, 48-byte ZEROs)
, e o provedor deve transferir todas as chaves de conta armazenadas para verificar o MAC. - 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.