WebAuthn / FIDO2: Verificação do atestado anônimo da Apple

Observe que esta é uma postagem avançada e requer entendimento prévio dos atestados FIDO2. (Você pode ler mais sobre eles aqui.)

A maçã não fica longe do Empacotado… TPM…

https: // commons.wikimedia.org/wiki/File:Apple\_and\_Orange\_-\_they\_do\_not\_compare.jpg

Como diz o provérbio, é quase exatamente igual a Atestado empacotado, com o nonce no certificado de atestado … como TPM … Sem mais delongas, vamos verificá-lo, certo?

Se você verificar attStmt e contém “x5c”, é um atestado COMPLETO. FULL significa basicamente que é um atestado vinculado ao fabricante. Ele é assinado por uma chave privada de lote, cuja chave pública está em um certificado de lote, que é encadeado ao certificado raiz de atestado da Apple. Geralmente, os certificados têm a extensão authorityInfoAccess , que ajuda a localizar a raiz, mas a Apple decidiu não fazer isso. No entanto, uma busca rápida nos deu o certificado raiz necessário

https://www.apple.com/certificateauthority/Apple\_WebAuthn\_Root\_CA.pem

Verificando o atestado

  1. Concatenar authData com clientDataHash para criar nonceBase
  2. Hash nonceBase com SHA-256 para criar esperadoNunca
  3. Extraia o certificado folha (primeiro) de “x5c” como attCert e decodifique-o
  4. Verifique se attCert é da versão 3 (ASN1 INT 2)
  5. Verifique se attCert as restrições básicas para CA estão definidas como FALSO
  6. Verifique se certificado contém

AppleAnonymousAttestation OID 1.2.840.113635.100.8.2 extensão

  • Decodifique a extensão AppleAnonymousAttestation e verifique se nonce contém expectedNonce
  • A Apple ainda não publicou o esquema para a extensão (em JAN 2021. Sim, a espécie humana sobreviveu de alguma forma), então aqui estou eu publicando:

    NÃO É UM ESQUEMA OFICIAL DE APPLE
    Extensão decodificada

    8. Decodifique authData , extraia a chave pública e verifique se ela corresponde à chave pública em attCert .

    9. Anexe o certificado “Apple WebAuthn Root CA” ao x5c e valide o caminho do certificado

    10. Volte a beber e comer. É primeiro de janeiro. O Ano Novo ainda não acabou.

    Observações:

    • Em 01/05/2021 a Apple retornou AAGUID incorreto de 0x00 {16}. Isso foi corrigido no patch mais recente, mas não se propagou para as compilações do iOS. O novo AAGUID é f24a8e70d0d3f82c293732523cc4de5a

    Snippets

    Encontre todos os snippets em nosso novo repositório https://github.com / WebAuthnWorks / webauthn-snippets

    https://github.com/WebAuthnWorks /webauthn-snippets/blob/main/code-samples/verify.apple.attestation.js

    Licença

    Este artigo foi licenciado sob Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) . Portanto, você é livre para ler, compartilhar, etc. Se estiver interessado no uso comercial deste artigo, ou deseja traduzi-lo para um idioma diferente, entre em contato com yuriy (arroba) webauthn (ponto) works

    Os exemplos de código são licenciados sob Licença MIT .