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.