Características

Serviço de pareamento rápido

O Provedor de Pareamento rápido terá o serviço GATT a seguir.

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

Esse serviço deve 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 Gravação 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

O buscador 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 quando o dispositivo está anunciando no modo detectável. Deve sempre retornar os seguintes dados:

Octeto Tipo de dado Descrição Valor
0 a 2 vezes uint24 ID do modelo varia

Característica: pareamento baseado em chaves

Essa característica controla o procedimento de pareamento baseado em chaves. Neste procedimento, um certo nível de confiança é estabelecido ao verificar se as pessoas O provedor tem uma chave pré-compartilhada. A chave é diferente cada caso:

  • Caso 1: a chave pré-compartilhada é baseada na chave pública/privada antispoofing e o próprio par de chaves pública/privada do buscador, que muda a cada tentativa de pareamento.

    • O provedor está no modo de pareamento.
    • O Buscador verifica se o Provedor detém os chave privada antispoofing.

    Observe que, no modo de pareamento, o provedor também pode, é claro, parear na maneira mais comum, por exemplo, parear com um dispositivo que não ofereça suporte ao Pareamento baseado em chaves do par.

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

    • O provedor geralmente não está no modo de pareamento. (Mas esta não é uma requisito: o Provedor deve permitir o uso de uma chave de conta, mesmo quando em modo de pareamento.
    • O Buscador e o Provedor verificam, cada um, se o outro está de posse da chave de conta de serviço.

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

Formato de dados

Consulte o procedimento para saber como cada formato é usado.

Octeto Tipo de dado 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 na característica pelo buscador.

Octeto Tipo de dado 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 solicitante 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 solicitante solicitar que o Provedor notifique o nome atual. 0 caso contrário.
  • Bit 3: 1, se for para Gravar a chave da conta retroativamente. 0 caso contrário.
  • Os bits 4 a 7 são reservados para uso futuro e serão ignorados.
varia Obrigatório
2 a 7 uint48 Você pode:
  • Endereço BLE atual do provedor
  • Endereço público do provedor
varia Obrigatório
8 a 13 uint48 Endereço BR/EDR do usuário que fez a busca varia Presente apenas se as flags 1 ou 3 estiverem definidas
n a 15 Valor aleatório (sal) varia Obrigatório

Tabela 1.2.1: Solicitação bruta (tipo 0x00). O código é descriptografado solicitação na Tabela 1.1.

Octeto Tipo de dado 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 Você pode:
  • 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 de sinalizações:
  • O bit 0 está definido: tamanho de dados adicional, menor que 6
  • O bit 1 está definido: ID dos dados
varia Obrigatório se o Bit 0 ou 1 das flags estiver definido
11 – n Outros dados varia Opcional
n a 15 Valor aleatório (sal) varia Obrigatório

Tabela 1.2.2: Solicitação bruta (tipo 0x10). O código é descriptografado solicitação na Tabela 1.1.

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

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

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

Tabela 1.4:resposta criptografada, enviada pelo Provedor ao buscador por meio de um notificar.

Característica: chave de acesso

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

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

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

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

Tabela 2.2:bloco de chave de acesso bruto. 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 de conta no Pareamento rápido Provedor.

Octeto Tipo de dado 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 precisa fazer o seguinte:

  1. Descriptografe a chave da conta usando a senha secreta gerada na etapa 4 do procedimento.
    • Para provedores que exigem vínculo (comum):
      • Antes de descriptografar, verifique se a chave secreta compartilhada foi usada para descriptografar solicitação de chave de acesso da etapa 12. Se esta etapa não foi aprovada usando este secreta, ignore esta gravação e saia.
    • Neste momento, a senha secreta (K no procedimento) não será usada novamente para este pareamento. Todas as solicitações que chegarem criptografadas com esta chave sem reiniciar o procedimento serão rejeitadas.
  2. Verifique se o valor descriptografado começa com 0x04. Caso contrário, ignore durante a gravação e saia.
  3. Verifique se a lista de chaves da conta mantida tem espaço para as novas .
  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 conforme necessário. Ela sempre retornará os seguintes dados:

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

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

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

  2. status-abnormal: se o provedor está em um estado anormal. Por exemplo, ela não funcionou porque a atualização de firmware falhou. Esse valor fará com que ao usuário que está buscando mostrar uma mensagem para que o usuário saiba que ela precisa ser atualizada agora.

O provedor deve limitar o acesso à característica Revisão do firmware para impedem o rastreamento de dispositivos. Restrições sugeridas:

  • os dispositivos vinculados devem 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 a seguinte característica.

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 (data de descontinuação: 01/01/2021) Criptografado Permissões UUID
Dados Não Escrever e notificar 0x1237

Antes de escrever ou notificar essa característica, é preciso que haja um de handshake pela característica FE2C1234-8366-4814-8EB0-01DE32100BEA para ter um secret compartilhado. O AES-CTR será usado para criptografar os dados que fluem por esse característica, cujo algoritmo é definido abaixo. Este modo é mais proteger dados que se estendem além de um único bloco de 16 bytes. O HMAC-SHA256 vai ser usado para garantir a integridade dos dados, que também é 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 meio de um notificar ou enviar pelo buscador ao Provedor por meio de gravação.

Octeto Tipo de dado 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. Descriptografado dos dados criptografados em Tabela 3.1.

Quando uma notificação é solicitada (por exemplo, solicite o nome personalizado pelo Bit 2 na Tabela 1.2.1), o Provedor de Pareamento rápido vai fazer o seguinte:

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

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

    onde

    1. A chave AES é a senha secreta da etapa 4 do procedimento.
    2. ClearBlock[i] é um bloco de 16 bytes começando com data[i * 16]. A última pode ter menos de 16 bytes.
  3. Execute concat(encryptedBlock[0], encryptionBlock[1],...) para criar o 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 é da etapa 4 do procedimento.
    2. O opad é um preenchimento externo de 64 bytes, consistindo em bytes repetidos com valor 0x5C:
    3. O padding interno do ipad é de 64 bytes, consistindo em bytes repetidos com valor 0x36:
  5. Tomar os primeiros 8 bytes do HMAC-SHA256 como o prefixo da classe Data pacote.

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

  1. Verifique a integridade dos dados verificando os primeiros 8 bytes de HMAC-SHA256.
  2. Descriptografar os dados criptografados usando 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 16 bytes iniciado por 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, ele é de ECDH e não vai ser usado novamente para este pareamento. Todas as solicitações que chegam criptografadas com essa chave sem reiniciar o procedimento recusados.
      2. no fluxo de nomenclatura 2, é a chave da conta.
  3. Execute concat(clearBlock[0], ClearBlock[1],...) para criar os dados brutos.