Características

Serviço de Pareamento Rápido

O provedor do 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 seguintes características.

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 chave 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 ser compatível com o serviço de informações do dispositivo.

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

O buscador do Pareamento rápido usa as seguintes características.

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

Característica: ID do modelo

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

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

Característica: pareamento baseado em chave

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

  • Caso 1: a chave pré-compartilhada é baseada no par de chaves pública/privada anti-spoofing e no 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 está em posse da chave privada anti-spoofing.

    No modo de pareamento, o Provedor também pode fazer o pareamento da maneira usual, por exemplo, com um dispositivo que não é compatível com o pareamento baseado em chave do Pareamento rápido.

  • 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 aceitar o uso de uma chave de conta mesmo no modo de pareamento.
    • O buscador e o provedor verificam se o outro tem a chave da conta.

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

Formato de dados

Consulte o procedimento para saber como cada formato é usado.

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

Tabela 1.1:solicitação criptografada, gravada na característica pelo Seeker.

Octeto Tipo de dado Descrição Valor Obrigatório?
0 uint8 Tipo de mensagem 0x00 = Solicitação de pareamento com base em chave Obrigatório
1 uint8 Flags
  • Bit 0 (MSB): descontinuado e ignorado pelo Seeker.
  • Bit 1: 1 se o Seeker solicitar que o Provider inicie a vinculação, e essa solicitação contiver o endereço BR/EDR do Seeker. Caso contrário, 0.
  • Bit 2: 1 se o Buscador solicitar que o Provedor notifique o nome atual. Caso contrário, 0.
  • Bit 3: 1 se for para gravar retroativamente a chave da conta. Caso contrário, 0.
  • Os bits de 4 a 7 são reservados para uso futuro e serão ignorados.
varia Obrigatório
2 a 7 uint48 Uma das seguintes opções:
  • 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 o bit 1 ou 3 das sinalizações estiver definido
n - 15 Valor aleatório (salt) varia Obrigatório

Tabela 1.2.1:solicitação bruta (tipo 0x00). Descriptografado da solicitação criptografada 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 Flags varia Obrigatório
2 a 7 uint48 Uma das seguintes opções:
  • 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 de flags estiver definido
10 uint8 Depende das flags:
  • O bit 0 está definido: tamanho 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 Outros dados varia Opcional
n - 15 Valor aleatório (salt) varia Obrigatório

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

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

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

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

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

Característica: chave de acesso

Essa característica é usada durante o procedimento de pareamento baseado em chave (em inglês).

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

Tabela 2.1:bloco de chave de acesso criptografado. Consulte o procedimento de pareamento baseado em chave 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 - 3 unit32 Chave de acesso de seis dígitos varia
4 a 15 Valor aleatório (salt) varia

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

Característica: chave da conta

Depois do pareamento rápido, o Fast Pair Seeker vai gravar uma chave de conta no Fast Pair Provider.

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 fiança (comum):
      • Antes de descriptografar, verifique se a senha secreta foi usada para descriptografar a solicitação de chave de acesso da etapa 12. Se essa etapa não tiver sido aprovada usando esse secret, ignore essa gravação e saia.
    • Nesse ponto, a senha secreta (K no procedimento) não será mais usada para esse pareamento. Todas as solicitações criptografadas com essa chave sem reiniciar o procedimento precisam ser rejeitadas.
  2. Verifique se o valor descriptografado começa com 0x04 ou 0xFF. Se não for, ignore essa gravação e saia.
    • Se o valor for 0x04:
      • Verifique se a lista de chaves da conta persistente tem espaço para o novo valor.
      • Se não estiver, exclua da lista o valor menos usado recentemente.
      • Adicione o novo valor à lista.
    • Se o valor for 0xFF:
      • Trate isso como uma sessão de pareamento temporária e não realize nenhuma operação.
      • Isso pode acontecer com o fluxo de gravação retroativa da chave de conta.
      • Não armazene nem use a chave na lista de chaves da conta, na criptografia ou nos cálculos de MAC.
      • A remoção da vinculação é acionada por um evento ou tempo limite específico do recurso. Para o compartilhamento de áudio LE, é altamente recomendável remover a chave de vínculo e link BLE 10 minutos após a desconexão da sessão temporária.

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

Característica: revisão de firmware

Essa característica permite que o Buscador leia a revisão de firmware do Provedor conforme necessário. Ele sempre vai retornar os seguintes dados:

Octeto Tipo de dado 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-updating: se o provedor estiver atualizando para um novo firmware. Como alternativa, o provedor pode retornar a versão do firmware em fase de teste.

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

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

  • dispositivos pareados devem ter acesso a qualquer momento
  • qualquer dispositivo deve ter acesso quando o provedor estiver detectável

Se o provedor for compatível com o Hub de descoberta, será necessário fazer uma implementação adicional. Consulte Atualizações de firmware do Localizador para mais detalhes.

Característica: dados adicionais

Este serviço terá as seguintes características.

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

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

Octeto Descrição Valor
0 - 7 Os primeiros 8 bytes do HMAC-SHA256. varia
8 - 15 Nonce, 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 dado Descrição Valor
0 - var byte array Dados varia. Faça a decodificaçã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 na Tabela 3.1.

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

  1. Gere 8 bytes criptograficamente aleatórios para o valor de uso único.
  2. Criptografe os dados usando 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 é o segredo compartilhado da etapa 4 do procedimento.
    2. clearBlock[i] é um bloco de 16 bytes que começa em data[i * 16]. O último bloco pode ter menos de 16 bytes.
  3. Execute concat(encryptedBlock[0], encryptedBlock[1],...) para criar os dados criptografados.

  4. Gere HMAC-SHA256

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

    onde

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

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

  1. Verifique a integridade dos dados conferindo os primeiros 8 bytes de HMAC-SHA256.
  2. Descriptografe os dados criptografados usando AES-CTR, em que cada bloco é gerado usando

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

    onde

    1. encryptedBlock[i] é um bloco de 16 bytes que começa em encrypted_data[i * 16]. O último bloco pode ter menos de 16 bytes.
    2. A chave AES é gerada ou identificada pelo handshake, por exemplo,
      1. No fluxo de nomenclatura 1, ela é do ECDH e não será usada novamente para esse pareamento. Todas as solicitações criptografadas com essa chave sem reiniciar o procedimento precisam ser rejeitadas.
      2. No fluxo de nomenclatura 2, é a chave da conta.
  3. Execute concat(clearBlock[0], clearBlock[1],...) para criar os dados brutos.