WebAuthn / FIDO2: verificación de la atestación anónima de Apple

Tenga en cuenta que esta es una publicación avanzada y requiere una comprensión previa de las atestaciones FIDO2. (Puede leer más sobre ellos aquí.)

La manzana no cae lejos del Empacado… TPM…

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

Como dice el proverbio, todo es casi exactamente lo mismo que Certificación empaquetada, con el nonce en el certificado de certificación … como TPM … Sin más preámbulos, verifiquémoslo, ¿de acuerdo?

Si marca attStmt y contiene “x5c” es una atestación COMPLETA. FULL básicamente significa que es una certificación que encadena al fabricante. Está firmado por una clave privada por lotes, cuya clave pública está en un certificado por lotes, que está encadenado al certificado raíz de atestación de Apple. Generalmente los certificados tienen la extensión AuthorityInfoAccess , que ayuda a localizar la raíz, pero Apple decidió no hacerlo. Sin embargo, la búsqueda rápida en Google nos dio el certificado raíz necesario

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

Verificación de la atestación

  1. Concatenar authData con clientDataHash para crear nonceBase
  2. Hash nonceBase con SHA-256 para crear pressedNonce
  3. Extraiga el certificado de hoja (primer) de «x5c» como attCert y decodificarlo
  4. Verifique que attCert sea de la versión 3 (ASN1 INT 2)
  5. Verifique que attCert restricciones básicas para CA estén configuradas en FALSO
  6. Verifique que el certificado contiene

AppleAnonymousAttestation OID 1.2.840.113635.100.8.2 extensión

  • Decodifique la extensión AppleAnonymousAttestation y verifique que nonce contenga esperabaNonce
  • Apple aún no ha publicado el esquema para la extensión (a partir de ENE 2021. Sí, la humanidad sobrevivió de alguna manera), así que aquí estoy yo publicándolo:

    NO ES UN ESQUEMA OFICIAL DE APPLE
    Extensión decodificada

    8. Decodifica authData , extrae la clave pública y verifica que la clave pública coincida con la attCert .

    9. Agregue el certificado “Apple WebAuthn Root CA” al x5c y valide la ruta del certificado

    10. Vuelva a beber y comer. Es el primero de enero. El año nuevo aún no ha terminado.

    Notas:

    • A partir del 01/05/2021, Apple devuelve un AAGUID incorrecto de 0x00 {16}. Esto se solucionó en el último parche, pero no se ha propagado a las versiones de iOS. El nuevo AAGUID es f24a8e70d0d3f82c293732523cc4de5a

    Snippets

    Encuentre todos los snippets en nuestro nuevo repositorio https://github.com / WebAuthnWorks / webauthn-snippets

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

    Licencia

    Este artículo tiene la licencia Creative Commons Attribution-NonCommercial-SinDerivatives 4.0 International (CC BY-NC-ND 4.0) . Por lo tanto, puede leer, compartir, etc. Si está interesado en el uso comercial de este artículo o desea traducirlo a un idioma diferente, comuníquese con yuriy (at) webauthn (dot) works

    Los ejemplos de código tienen licencia de Licencia MIT .