Características

Serviço de pareamento rápido

O Provedor de Pareamento rápido precisa ter o seguinte serviço GATT.

Serviço UUID
Serviço de pareamento rápido 0xFE2C

Esse serviço terá as características a seguir.

Característica do serviço de Pareamento rápido Criptografado Permissões UUID
ID do modelo Não Ler FE2C1233-8366-4814-8EB0-01DE32100BEA
Pareamento baseado em chaves Não Escrever e notificar FE2C1234-8366-4814-8EB0-01DE32100BEA
Chave de acesso Não Escrever e notificar FE2C1235-8366-4814-8EB0-01DE32100BEA
Chave da conta Não Gravar FE2C1236-8366-4814-8EB0-01DE32100BEA

Serviço de informações do dispositivo

O provedor de Pareamento rápido também precisa oferecer suporte ao Serviço de informações do dispositivo.

Serviço UUID
Serviço de informações do dispositivo 0x180A

A busca de pareamento rápido usa as características a seguir.

Nome Criptografado Permissões UUID
Revisão do firmware Não Ler 0x2A26

Característica: ID do modelo

Essa característica permite que o usuário leia o ID do modelo conforme necessário, fora do momento em que o dispositivo está anunciando no modo detectável. Ela precisa sempre retornar os seguintes dados:

Octeto Tipo de dados Descrição Valor
0 – 2 uint24 ID do modelo varia

Característica: pareamento baseado em chaves

Essa característica controla o procedimento de pareamento baseado em chave. Neste procedimento, um certo nível de confiança é estabelecido ao verificar se o Buscador e o Provedor têm uma chave pré-compartilhada. O segredo é diferente em cada caso:

  • Caso 1: a chave pré-compartilhada é baseada no par de chaves pública/privada antispoofing e no próprio par de chaves pública/privada do Seeker, que será alterado a cada tentativa de pareamento.

    • O provedor está no modo de pareamento.
    • O Seeker verifica se o provedor tem a chave privada antispoofing.

    No modo de pareamento, o provedor também pode, naturalmente, fazer o pareamento da maneira normal, por exemplo, com um dispositivo que não oferece suporte ao Pareamento rápido baseado em chaves.

  • Caso 2: a chave pré-compartilhada é uma das chaves de conta.

    • O provedor geralmente não está no modo de pareamento. No entanto, isso não é um requisito: o provedor precisa oferecer suporte ao uso de uma chave de conta mesmo no modo de pareamento.
    • Tanto o buscador quanto o provedor verificam se o outro está de posse da chave da conta.

Como os dois casos são extremamente semelhantes, exceto a chave pré-compartilhada que é usada, eles são combinados em procedimento.

Formato de dados

Consulte o procedimento para saber como cada formato é usado.

Octeto Tipo de dados Descrição Valor Obrigatório?
0 a 15 uint128 Solicitação criptografada varia Obrigatório
16 a 79 Chave pública varia Opcional

Tabela 1.1:solicitação criptografada, gravada de acordo com a característica do buscador.

Octeto Tipo de dados Descrição Valor Obrigatório?
0 uint8 Tipo de mensagem 0x00 = solicitação de pareamento baseado em chaves Obrigatório
1 uint8 Sinalizações
  • Bit 0 (MSB): descontinuado e ignorado pelo Seeker.
  • Bit 1: 1 se o Buscador solicitar que o Provedor inicie o vínculo e essa solicitação contiver o endereço BR/EDR do buscador. 0 caso contrário.
  • Bit 2: 1 se o Buscador solicitar que o Provedor notifique o nome existente. 0 caso contrário.
  • Bit 3: 1 se for para Gravar a chave da conta de forma retroativa. 0 caso contrário.
  • Os bits 4 a 7 são reservados para uso futuro e devem ser ignorados.
varia Obrigatório
2 a 7 uint48 Ter um dos seguintes:
  • Endereço BLE atual do provedor
  • Endereço público do provedor
varia Obrigatório
8 a 13 uint48 Endereço BR/EDR do buscador varia Presente apenas se as flags 1 ou 3 estiverem definidas
n - 15 Valor aleatório (sal) varia Obrigatório

Tabela 1.2.1:solicitação bruta (tipo 0x00). Descriptografado da solicitação criptografada na Tabela 1.1.

Octeto Tipo de dados Descrição Valor Obrigatório?
0 uint8 Tipo de mensagem 0x10 = Solicitação de ação Obrigatório
1 uint8 Sinalizações varia Obrigatório
2 a 7 uint48 Ter um dos seguintes:
  • Endereço BLE atual do provedor
  • Endereço público do provedor
varia Obrigatório
8 uint8 Grupo de mensagens varia Obrigatório se o Bit 0 das flags estiver definido
9 uint8 Código da mensagem varia Obrigatório se o Bit 0 das flags estiver definido
10 uint8 Depende das flags:
  • O bit 0 está definido: comprimento de dados adicionais, menor que 6
  • O bit 1 está definido: ID de dados
varia Obrigatório se o Bit 0 ou 1 das flags estiver definido
11 – n Dados extras varia Opcional
n - 15 Valor aleatório (sal) varia Obrigatório

Tabela 1.2.2:solicitação bruta (tipo 0x10). Descriptografado da solicitação criptografada na Tabela 1.1.

Octeto Tipo de dados Descrição Valor
0 uint8 Tipo de mensagem 0x01 = resposta de pareamento baseada em teclas
1 a 6 uint48 Endereço público do provedor (BR/EDR) varia
7 a 15 Valor aleatório (sal) varia

Tabela 1.3:Resposta bruta. Criptografado para produzir a Resposta criptografada na Tabela 1.4.

Octeto Tipo de dados Descrição Valor
0 a 15 uint128 Resposta criptografada varia

Tabela 1.4:resposta criptografada, enviada pelo provedor ao buscador por uma notificação.

Característica: chave de acesso

Essa característica é usada durante o procedimento de pareamento baseado em chaves.

Octeto Tipo de dados Descrição Valor
0 a 15 uint128 Bloco de chaves de acesso criptografado varia

Tabela 2.1:bloco de chave de acesso criptografada. Consulte o procedimento de pareamento baseado em chaves para conferir o uso.

Octeto Tipo de dados Descrição Valor
0 uint8 Tipo de mensagem Um de:
  • 0x02 = chave de acesso do buscador
  • 0x03 = Chave de acesso do provedor
1 a 3 unit32 Chave de acesso de 6 dígitos varia
4 a 15 Valor aleatório (sal) varia

Tabela 2.2:bloco bruto de chave de acesso. Versão descriptografada da Tabela 2.1.

Característica: chave da conta

Após o pareamento, o Buscador de pareamento rápido grava uma chave da conta no provedor de pareamento rápido.

Octeto Tipo de dados Descrição Valor
0 a 15 uint128 Chave da conta (criptografada) varia

Ao receber uma solicitação de gravação, o provedor de Pareamento rápido deve fazer o seguinte:

  1. Descriptografe a chave da conta usando a senha secreta gerada na etapa 4 do procedimento.
    • Para provedores que exigem vinculação (comum):
      • Antes de descriptografar, verifique se a chave secreta compartilhada foi usada para descriptografar a solicitação da chave de acesso da etapa 12. Se esta etapa não foi transmitida usando esse secret, ignore esta gravação e saia.
    • A partir desse momento, a senha secreta (K no procedimento) não será usada novamente para este pareamento. Todas as solicitações criptografadas com essa chave sem reiniciar o procedimento serão rejeitadas.
  2. Verifique se o valor descriptografado começa com 0x04. Caso contrário, ignore essa gravação e saia.
  3. Verifique se a lista de chaves da conta mantida tem espaço para o novo valor.
  4. Caso contrário, exclua da lista o valor usado menos recentemente.
  5. Adicione o novo valor à lista.

As chaves de conta na lista são usadas durante o pareamento baseado em chaves.

Característica: revisão do firmware

Essa característica permite que o Seeker leia a revisão de firmware do provedor conforme necessário. Ela deve sempre retornar os seguintes dados:

Octeto Tipo de dados Descrição Valor
0 - var utf8s Código de revisão do firmware varia

Ele precisa ser encapsulado em uma única string utf8, mesmo que haja mais de um firmware (por exemplo, três firmwares para o fone esquerdo, o direito e o estojo) no provedor. O provedor também pode retornar as strings específicas para casos especiais:

  1. status-refresh: se o provedor está atualizando para um novo firmware. Como alternativa, o provedor pode retornar a versão do firmware preparado.

  2. status-abnormal: se o provedor estiver em um estado anormal. Por exemplo, ele fez com defeito porque a atualização do firmware falhou. Esse valor fará com que o Seeker mostre uma mensagem para informar ao usuário que precisa ser atualizado agora.

O provedor precisa limitar o acesso à característica de revisão do firmware para impedir o rastreamento do dispositivo. Restrições sugeridas:

  • os dispositivos vinculados precisam ter acesso a qualquer momento
  • qualquer dispositivo deve ter acesso quando o provedor for detectável

Característica: dados adicionais

Esse serviço deve ter as características a seguir.

Característica do serviço de Pareamento rápido Criptografado Permissões UUID
Dados Não Escrever e notificar FE2C1237-8366-4814-8EB0-01DE32100BEA
Característica antiga do serviço de Pareamento rápido (a previsão será descontinuada em 01/01/2021) Criptografado Permissões UUID
Dados Não Escrever e notificar 0x1237

Antes de gravar ou notificar essa característica, é necessário que haja um handshake pela característica FE2C1234-8366-4814-8EB0-01DE32100BEA para ter uma chave secreta compartilhada. O AES-CTR será usado para criptografar dados que fluem por essa característica, cujo algoritmo é definido abaixo. Esse modo é mais seguro em dados que se estendem além de um único bloco de 16 bytes. O HMAC-SHA256 será usado para garantir a integridade dos dados, que também está definida abaixo.

Octeto Descrição Valor
0 - 7 Os primeiros 8 bytes do HMAC-SHA256. varia
8 a 15 Valor de uso único, usado pela criptografia AES-CTR. varia
16 - var Dados criptografados. varia

Tabela 3.1:Pacote de dados, enviado pelo Provedor ao Buscador por uma notificação, ou enviado pelo Buscador ao Provedor por uma gravação.

Octeto Tipo de dados Descrição Valor
0 - var byte array Dados varia, decodifique-o de acordo com o ID de dados da Tabela 1.2.2:
  • 0x01(nome personalizado): utf8s

Tabela 3.2:Dados brutos. Descriptografados dos dados criptografados na Tabela 3.1.

Quando uma notificação é solicitada, por exemplo, para solicitar um nome personalizado usando o Bit 2 na Tabela 1.2.1, o provedor de Pareamento rápido precisa fazer o seguinte:

  1. Gera 8 bytes criptograficamente aleatórios para o valor de uso único.
  2. Criptografar os dados usando AES-CTR, no qual cada bloco de 16 bytes é gerado usando

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    onde

    1. A chave AES é a chave secreta compartilhada da etapa 4 do procedimento.
    2. clearBlock[i] é um bloco de 16 bytes a partir de data[i * 16]. O último bloco pode ter menos de 16 bytes.
  3. Execute o comando concat(encryptedBlock[0], encryptionBlock[1],...) para criar os dados criptografados.

  4. Gerar HMAC-SHA256 por

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

    onde

    1. K é gerado por concat(shared_secret, ZEROs de 48 bytes). O shared_secret vem da etapa 4 do procedimento.
    2. opad tem um preenchimento externo de 64 bytes, composto de bytes repetidos com valor 0x5C.
    3. O ipad tem preenchimento interno de 64 bytes, composto de bytes repetidos, valorizados como 0x36.
  5. Use os primeiros 8 bytes do HMAC-SHA256 como o prefixo do pacote de dados.

Ao receber uma solicitação de gravação, o provedor de Pareamento rápido deve fazer o seguinte:

  1. Verifique a integridade dos dados conferindo os primeiros 8 bytes do HMAC-SHA256.
  2. Descriptografar os dados criptografados usando o AES-CTR, onde cada bloco é gerado usando

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    onde

    1. encryptionBlock[i] é um bloco de início de 16 bytes de encryption_data[i * 16]. O último bloco pode ter menos de 16 bytes.
    2. A chave AES é gerada ou identificada no handshake, por exemplo:
      1. no fluxo de nomenclatura 1, a origem é ECDH e não será usada novamente para este pareamento. Todas as solicitações criptografadas com essa chave sem reiniciar o procedimento serão rejeitadas.
      2. no fluxo de nomenclatura 2, é a chave da conta.
  3. Execute o comando concat(clearBlock[0], clearBlock[1],...) para criar os dados brutos.