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