Procedimento de pareamento rápido

Procedimento

Em vez de invocar imediatamente qualquer um dos procedimentos normais de vinculação BR/EDR ou BLE, o Seeker primeiro ativa notificações na característica de pareamento baseado em chaves e, em seguida, grava os dados da Tabela 1.1 nela.

Ao processar uma solicitação de gravação de um Buscador de pareamento rápido, o provedor de pareamento rápido vai fazer o seguinte:

  1. Se o campo opcional "Chave pública" estiver presente:
    1. Se o dispositivo não estiver no modo de pareamento, ignore a gravação e saia.
    2. Caso contrário:
      1. Use a chave pública recebida (um ponto de 64 bytes na curva elíptica secp256r1), a chave privada antispoofing pré-instalada, também secp256r1, e o algoritmo de curva elíptica Diffie-Hellman para gerar uma chave AES de 256 bits.
      2. Use SHA-256 para gerar hash da chave AES de 256 bits.
      3. Pegue os primeiros 128 bits do resultado. Essa é a chave AES antispoofing usada na próxima etapa.
  2. Usando o AES-128, tente descriptografar o valor. Como o valor é um único bloco AES de 16 bytes, não é necessário nenhum modo de criptografia de IV ou de vários blocos.

    1. Qual chave usar:
      1. Se uma chave AES antispoofing tiver sido gerada na etapa 1, use essa chave.
      2. Caso contrário, tente cada chave na lista de chaves da conta mantida.
    2. Se uma chave descriptografar o valor com êxito, será necessário fazer uma interrupção e prosseguir para a próxima etapa.
    3. O valor será descriptografado se a saída corresponder ao formato da Tabela 1.2.1 ou da Tabela 1.2.2, ou seja, se ele contiver o endereço BLE atual do provedor de pareamento rápido ou o endereço público do provedor de Pareamento rápido.

      OBSERVAÇÃO: no final do pacote, há um sal anexado. Quando possível, esses sais precisam ser rastreados e, se o provedor receber uma solicitação com um sal já usado, ela precisará ser ignorada para evitar ataques de repetição.

    4. Como alternativa ao rastreamento de sais, se a gravação incluir o endereço particular do provedor, outra maneira de evitar ataques de repetição é adiar o tempo da próxima rotação de endereço particular resolvível para que a rotação ocorra antes que a próxima gravação do pareamento baseado em chaves seja aceita.

  3. Se nenhuma chave conseguir descriptografar o valor, ignore a gravação e saia.

    1. Mantenha uma contagem dessas falhas. Quando a contagem de falhas atingir 10, todas as novas solicitações serão reprovadas imediatamente. Redefina a contagem de falhas após cinco minutos, após a ligação ou após uma conclusão.
  4. Caso contrário, salve a chave de sucesso como K. Marque esse K como utilizável para descriptografar gravações de chave de acesso e de nome personalizadas recebidas neste link de LE, mas não em outras gravações nem em qualquer outro link. Inicie um timer para descartar K após 10 segundos se o pareamento não tiver sido iniciado. Descarte também K se esse link LE for desconectado.

  5. Produza a resposta bruta de 16 bytes mostrada na Tabela 1.3, concatenando o tipo e o endereço BR/EDR do provedor e preenchendo o restante do pacote com um bloco de bytes aleatórios (ou seja, um sal).

  6. Criptografe a resposta bruta com K para produzir a Resposta criptografada de 16 bytes mostrada na Tabela 1.4. Envie essa mensagem por uma notificação sobre a característica do pareamento baseado em chaves.

  7. Leia a sinalização da solicitação:

    1. Se o byte de flags da solicitação tiver o bit 2 definido como 1, notifique a Característica de dados adicionais com um nome personalizado.
    2. Se o byte de flags da solicitação tiver o bit 1 definido como 1:
      1. Isso indica que o Seeker está solicitando que o provedor inicie a vinculação com o endereço BR/EDR do Seeker, que está presente nos bytes 8 a 13.
      2. Envie um pedido de pareamento ao endereço BR/EDR da pessoa. A solicitação de pareamento precisa ser a descrita abaixo (etapa "Durante o pareamento").
      3. Motivo necessário: pedir para o provedor iniciar resolve um problema em alguns dispositivos.
    3. Se o byte de flags da solicitação tiver o bit 1 definido como 0:
      1. Aguarde até 10 segundos por uma solicitação de pareamento. Se nenhum for recebido, saia.
      2. Pode ser uma solicitação BR/EDR de um endereço diferente (o endereço público do Seeker, em vez do endereço particular resolvível). Durante o pareamento, vamos verificar novamente se o dispositivo solicitante está em posse de K.
  8. Durante o pareamento:

    1. Quando um pacote de solicitação/resposta de pareamento for recebido do Seeker: se os recursos do dispositivo na solicitação forem NoInput/NoOutput, encerre o pareamento para evitar o uso do método de pareamento Just Works.
    2. Para o pacote de solicitação/resposta de pareamento enviado pelo provedor: defina o campo "Device Capabilities" como Display/YesNo e defina os requisitos de autenticação como MITM Protection necessária. Isso aciona o método de pareamento de comparação numérica, também conhecido como Confirmação da chave de acesso no Android. Dependemos disso para confirmar se o dispositivo solicitante é de fato a pessoa que busca pare rápido e que não há interceptação. Confira exemplos.
    3. O motivo é necessário: o método de pareamento fora de banda seria mais adequado, mas a plataforma não o expõe em todas as versões desejadas do Android.
  9. Quando a confirmação da chave de acesso for necessária, aguarde até 10 segundos para uma gravação da característica da chave de acesso.

    1. Normalmente, com esse método de pareamento, o usuário confirmaria que as chaves de acesso exibidas na tela de cada dispositivo são idênticas. Em vez disso, apenas para esse pareamento, transferimos por BLE, criptografados com a chave pré-compartilhada confiável.
    2. Observe que essa abordagem não deve ser adotada para dispositivos que têm uma tela ou um teclado, porque isso compromete um pouco a proteção MITM. No momento, o Pareamento rápido ainda não oferece suporte a esses tipos de dispositivos por esse motivo.
    3. Se o timer de 10 segundos expirar sem uma chave de acesso ser gravada, descarte K.
  10. Quando um valor é gravado na característica da chave de acesso, esse é o bloco de chave de acesso criptografada. Descriptografe com K para gerar um bloco de chave de acesso bruta, com o formato mostrado em Característica: chave de acesso > Tabela 2.2 - (tipo = Chave de acesso do Seeker).

  11. Se a descriptografia falhar, ignore a gravação e descarte K.

  12. Caso contrário, o bloco de chave de acesso bruta vai conter uma chave de acesso PSeeker de seis dígitos, que é esperada pelo usuário.

  13. Compare o PSeeker com nossa chave de acesso esperada, PProvider.

    1. Se os valores forem iguais, responda "sim" à confirmação.
    2. Caso contrário, responda "não" à confirmação, fazendo com que o pareamento falhe.
  14. Mesmo que o pareamento falhe, produza outro bloco de chave de acesso bruta, com o formato mostrado em Característica: chave de acesso > Tabela 2.2, contendo nossa própria chave de acesso esperada, PProvider.

    1. Verifique se o bloco tem o tipo correto (chave de acesso do provedor; consulte a tabela). OBSERVAÇÃO: não reutilize o sal do bloco de chave de acesso recebido do buscador. Gere um novo valor aleatório.
  15. Criptografe o bloco de chave de acesso bruta com K e envie o bloco de chave de acesso criptografado resultante com uma notificação na característica da chave de acesso.

  16. Se o pesquisador receber e descriptografar a chave de acesso P correta, ele também vai responder "sim" à confirmação e o pareamento será bem-sucedido.

    1. Se o pareamento for bem-sucedido, marque K como utilizável para descriptografar as gravações de chave de conta nesse link LE, mas não para gravações de chave de acesso subsequentes nem gravações em qualquer outro link. Inicie um timer para descartar K após 10 segundos. Descarte também K após qualquer tentativa de gravar uma chave de conta e, conforme a etapa 4, se o link LE for desconectado.
    2. Se o pareamento falhar, descarte K.
  17. Mude o campo de recursos do dispositivo de volta para os recursos padrão de E/S e os requisitos de autenticação para o padrão para que os novos pares continuem conforme o esperado.

Para provedores que não exigem vinculação, o buscador não envia uma solicitação de pareamento ao provedor. As etapas 8 e 17 são ignoradas. Além disso, "K" é usado em Características da chave da conta.

Exemplos
Exemplo 1:tentativa de pareamento bem-sucedida (sem "man-in-the-middle").
Exemplo 2:falha na tentativa de pareamento, com um man-in-the-middle.