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 
 | varia | Obrigatório | 
| 2 a 7 | uint48 | Você pode: 
 | 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: 
 | 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: 
 | 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: 
 | 
| 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:
- 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.
 
- Para provedores que exigem vínculo (comum):
- Verifique se o valor descriptografado começa com 0x04. Caso contrário, ignore durante a gravação e saia.
- Verifique se a lista de chaves da conta mantida tem espaço para as novas .
- Caso contrário, exclua da lista o valor usado menos recentemente.
- 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:
- status-updates: se o provedor está atualizando para um novo firmware. Como alternativa, o provedor pode retornar a versão do firmware testado. 
- 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: 
 | 
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:
- Gera 8 bytes criptograficamente aleatórios para o valor de uso único.
- 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 - A chave AES é a senha secreta da etapa 4 do procedimento.
- ClearBlock[i] é um bloco de 16 bytes começando com data[i * 16]. A última pode ter menos de 16 bytes.
 
- Execute concat(encryptedBlock[0], encryptionBlock[1],...) para criar o Dados Criptografados. 
- Gerar HMAC-SHA256 por - sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))- onde - K é gerado por concat(shared_secret, ZEROs de 48 bytes), o shared_secret é da etapa 4 do procedimento.
- O opad é um preenchimento externo de 64 bytes, consistindo em bytes repetidos com valor
0x5C:
- O padding interno do ipad é de 64 bytes, consistindo em bytes repetidos com valor
0x36:
 
- 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:
- Verifique a integridade dos dados verificando os primeiros 8 bytes de HMAC-SHA256.
- Descriptografar os dados criptografados usando AES-CTR, onde cada bloco é gerado usando - clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))- onde - encryptionBlock[i] é um bloco de 16 bytes iniciado por encryption_data[i * 16]. O último bloco pode ter menos de 16 bytes.
- A chave AES é gerada ou identificada no handshake, por exemplo,
- 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.
- no fluxo de nomenclatura 2, é a chave da conta.
 
 
- Execute concat(clearBlock[0], ClearBlock[1],...) para criar os dados brutos.