WebAuthn / FIDO2: Weryfikacja anonimowego zaświadczenia Apple

Należy pamiętać, że jest to post z góry i wymaga wcześniejszego zrozumienia atestów FIDO2. (Możesz przeczytać o nich więcej tutaj.)

Jabłko nie wypada daleko od Zapakowanego… TPM…

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

Przysłowie to prawie dokładnie to samo, co Pakowane zaświadczenie, z numerem nonce w certyfikacie… jak TPM… Bez zbędnych ceregieli, zweryfikujmy to, dobrze?

Jeśli zaznaczysz attStmt i zawiera „x5c”, jest to PEŁNE zaświadczenie. FULL w zasadzie oznacza, że ​​jest to atest, który prowadzi do producenta. Jest podpisany zbiorczym kluczem prywatnym, którego klucz publiczny znajduje się w certyfikacie zbiorczym połączonym łańcuchem z głównym certyfikatem atestacji Apple. Generalnie certyfikaty mają rozszerzenie AuthorityInfoAccess , które pomaga zlokalizować root, ale Apple zdecydowało się tego nie robić. Niemniej jednak szybkie wyszukiwanie w Google dało nam potrzebny certyfikat główny

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

Weryfikacja poświadczenia

  1. Połącz authData z clientDataHash , aby utworzyć nonceBase
  2. Hash nonceBase z SHA-256 w celu utworzenia spodziewanyNonce
  3. Wyodrębnij (pierwszy) certyfikat liścia z „x5c” jako attCert i zdekoduj
  4. Sprawdź, czy attCert jest w wersji 3 (ASN1 INT 2)
  5. Sprawdź, czy attCert podstawowe ograniczenia dla urzędu certyfikacji są ustawione na FALSE
  6. Sprawdź, czy certyfikat zawiera

AppleAnonymousAttestation OID 1.2.840.113635.100.8.2 rozszerzenie

  • Odszyfruj rozszerzenie AppleAnonymousAttestation i sprawdź, czy nonce zawiera spodziewanyNonce
  • Firma Apple nie opublikowała jeszcze schematu rozszerzenia (stan na styczeń 2021 r. Tak, rodzaj ludzki jakimś cudem przetrwał), więc zamiast tego ja go publikuję:

    TO NIE OFICJALNY PROGRAM APPLE
    Dekodowane rozszerzenie

    8. Zdekoduj authData , wyodrębnij klucz publiczny i sprawdź, czy jest zgodny z kluczem publicznym w attCert .

    9. Dołącz certyfikat „Apple WebAuthn Root CA” do x5c i sprawdź poprawność ścieżki certyfikatu.

    10. Wróć do picia i jedzenia. Jest pierwszy stycznia. Nowy rok jeszcze się nie skończył.

    Uwagi:

    • Od 01.05.2021 firma Apple zwraca nieprawidłowy AAGUID 0x00 {16}. Zostało to naprawione w najnowszej łatce, ale nie zostało przeniesione do kompilacji iOS. Nowy identyfikator AAGUID to f24a8e70d0d3f82c293732523cc4de5a

    Fragmenty

    Znajdź wszystkie fragmenty w naszym nowym nowym repozytorium https://github.com / WebAuthnWorks / webauthn-snippets

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

    Licencja

    Ten artykuł jest objęty licencją na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Brak Derywatów 4.0 International (CC BY-NC-ND 4.0) . Możesz więc swobodnie czytać, udostępniać itp. Jeśli jesteś zainteresowany komercyjnym wykorzystaniem tego artykułu lub chcesz przetłumaczyć go na inny język, skontaktuj się z yuriy (at) webauthn (kropka) works

    Próbki kodu są licencjonowane w ramach Licencja MIT .