WebAuthn / FIDO2: verificarea atestării anonime Apple

Vă rugăm să rețineți că acesta este un mesaj avansat și necesită înțelegerea prealabilă a atestatelor FIDO2. (Puteți citi mai multe despre ele aici.)

Mărul nu cade departe de pachet … TPM …

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

După cum spune proverbul, totul este aproape exact la fel ca Atestare ambalată, cu nonce în certificatul de atestare … cum ar fi TPM … Fără alte întrebări, să verificăm, nu-i așa?

Dacă bifați attStmt și conține „x5c” este o atestare FULL. FULL înseamnă practic că este o atestare care se leagă de producător. Este semnat de cheia privată de lot, care este cheia publică într-un certificat de lot, care este înlănțuit cu certificatul rădăcină de atestare a mărului. În general, certificatele au extensia AuthorityInfoAccess , care ajută la localizarea rădăcinii, dar Apple a decis să nu facă asta. Cu toate acestea, googlingul rapid ne-a oferit certificatul rădăcină necesar

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

Verificarea atestării

  1. Concatenează authData cu clientDataHash pentru a crea nonceBase
  2. Hash nonceBase cu SHA-256 pentru a crea expectedNonce
  3. Extrageți frunza (prima) cert din „x5c” ca attCert și decodificați-l
  4. Verificați dacă attCert este din versiunea 3 (ASN1 INT 2)
  5. Verificați dacă attCert constrângerile de bază pentru CA este setată la FALS
  6. Verificați că certificatul conține

AppleAnonymousAttestation OID 1.2.840.113635.100.8.2 extensie

  • Decodează extensia AppleAnonymousAttestation și verifică dacă nonce conține expectedNonce
  • Apple nu a publicat încă schema pentru extensie (începând cu IAN 2021. Da, genul uman a supraviețuit cumva), așa că în schimb iată-l public:

    NU O SCHEMĂ OFICIALĂ DE MERE
    Extensie decodificată

    8. Decodează authData , extrage cheia publică și verifică dacă este potrivirea cheii publice din attCert .

    9. Adăugați certificatul „Apple WebAuthn Root CA” la x5c și validați calea certificatului

    10. Întoarce-te la băut și mâncat. Este primul ianuarie. Anul nou nu s-a terminat încă.

    Note:

    • Începând cu 01.01.2021 Apple returnează un AAGUID greșit de 0x00 {16}. Acest lucru a fost remediat în cel mai recent patch, dar nu s-a propagat la versiunile iOS. AAGUID nou este f24a8e70d0d3f82c293732523cc4de5a

    Fragmente

    Găsiți toate fragmentele în noul nostru depozit https://github.com / WebAuthnWorks / webauthn-snippets

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

    Licență

    Acest articol este licențiat sub Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) . Deci, sunteți liber să citiți, să distribuiți, etc. Dacă sunteți interesat de utilizarea comercială a acestui articol sau doriți să îl traduceți într-o altă limbă, vă rugăm să contactați yuriy (at) webauthn (punct) works

    Probele de cod sunt licențiate sub licență MIT .