Vincent
Created: June 17, 2025
Updated: July 8, 2025
See the original glossary version in English here.
L'attestazione può riferirsi a tre cose (spesso nel linguaggio parlato sono usate in modo intercambiabile, sebbene significhino qualcosa di diverso se prese alla lettera):
In primo luogo e più in generale, l'attestazione in ambito crittografico è un termine con cui una parte "attesta" crittograficamente una dichiarazione a un'altra parte.
In secondo luogo, durante la fase di registrazione in WebAuthn, un oggetto di attestazione viene creato dall'autenticatore e restituito alla Relying Party. È un oggetto contenitore che contiene le seguenti informazioni:
fmt
)attStmt
- vedi sotto)authData
)Il seguente diagramma di flusso del processo di Registrazione mostra il ruolo dell'attestazione (oggetto) in WebAuthn:
{ "root": { "id": "QFPlQVypLmmx71e0tmS3IfCFky0", "rawId": "QFPlQVypLmmx71e0tmS3IfCFky0", "response": { "attestationObject": { "fmt": "none", "attStmt": {}, "authData": { "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": "00000000-0000-0000-0000-000000000000", "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0", "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM", "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw" } } }, "clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://passkeys.eu", "crossOrigin": false }, "transports": ["hybrid", "internal"], "publicKeyAlgorithm": -7 }, "authenticatorAttachment": "cross-platform" } }
Nello screenshot qui sopra, non vengono forniti né l'AAGUID né la dichiarazione di attestazione.
Continua a leggere per un'analisi tecnica degli attributi più importanti.
In WebAuthn, l'attestazione garantisce che l'autenticazione dell'utente sia sicura e trasparente. Con la dichiarazione di attestazione, puoi assicurarti che una credenziale sia stata creata su un autenticatore / dispositivo specifico.
Questi tipi di attestazione si riferiscono alla dichiarazione di attestazione (non all'oggetto di attestazione). Sono considerati una preferenza dalla relying party (quindi l'autenticatore può comportarsi diversamente poiché è solo una preferenza).
none
): Per i casi in cui la privacy è della massima
importanza o sono in gioco dispositivi sincronizzati, questo tipo non fornisce alcuna
informazione sul dispositivo, garantendo che la privacy dell'utente rimanga intatta. Un
altro motivo per utilizzare questo valore potrebbe essere quello di risparmiare un
roundtrip verso un'autorità di certificazione (CA). none
è anche il valore
predefinito.indirect
): La relying party
preferisce ottenere un'attestazione ma consente al client di decidere come ottenere le
dichiarazioni di attestazione. Il client può sostituire le dichiarazioni di attestazione
generate dall'autenticatore con dichiarazioni di attestazione anonime per proteggere la
privacy dell'utente.direct
): Questa è la forma più trasparente. Qui, la
relying party comunica all'autenticatore che desidera una
dichiarazione di attestazione, in modo che la relying party
ottenga informazioni dettagliate sul dispositivo, inclusi marca, modello e altre
specifiche. Sebbene offra la massima trasparenza, può sollevare preoccupazioni sulla
privacy in determinati scenari o potrebbe non essere realmente utilizzabile per le
credenziali sincronizzate.enterprise
): La relying party
desidera ricevere una dichiarazione di attestazione che può includere informazioni
identificative uniche. Questo tipo di attestazione è tipicamente utilizzato in aziende o
organizzazioni che vogliono tenere traccia di dispositivi /
autenticatori specifici. I browser web (user agent) non
dovrebbero fornire questa attestazione dettagliata a meno che le loro impostazioni non
lo consentano specificamente per la parte richiedente. Se le impostazioni lo consentono,
il browser dovrebbe comunicare al dispositivo quando è necessario (all'inizio del
processo) che questo specifico tipo di attestazione è stato richiesto. Il browser
dovrebbe quindi trasmettere l'ID univoco del dispositivo e la prova di attestazione
esattamente come li riceve alla relying party.L'oggetto di attestazione contiene molti attributi, ecco una rapida spiegazione di alcuni attributi selezionati:
"attestationObject": { "fmt": "none", "attStmt": {}, "authData": { "rpIdHash": "t8DGRTBfls-BhOH2QC404lvdhe_t2_NkvM0nQWEEADc", "flags": { "userPresent": true, "userVerified": true, "backupEligible": true, "backupStatus": true, "attestedData": true, "extensionData": false }, "counter": 0, "aaguid": "00000000-0000-0000-0000-000000000000", "credentialID": "QFPlQVypLmmx71eOtmS3IfCFky0", "credentialPublicKey": "pQECAyYgASFYIEa-lpSiQ4P...", "parsedCredentialPublicKey": { "keyType": "EC2 (2)", "algorithm": "ES256 (-7)", "curve": 1, "x": "Rr6WlKJDg8MlbIq9mmHQzk2p2c_s7QoNKr7yMa7I8pM", "y": "tAELYp7h3sYNjZZIZgHPYiaSzF×QVT18cgZ_7wm13Vw" } }
L'attestationObject è un oggetto codificato in CBOR, contenente informazioni sulle credenziali appena create, la chiave pubblica e altri dati rilevanti:
Contrariamente all'oggetto di attestazione sopra, dove attStmt
è stato lasciato vuoto
per motivi di leggibilità, ecco come apparirebbe una dichiarazione di attestazione
compilata.
{ "alg": -65535, "sig": "MBHX7qov53SWqqPYCrxE5fcoAeDI83a0DzVJ2-N1KI6IAaCGGvINAIFzTEn44F6giANKte-8yEMDZbvbgDG1weaRj7SqsVaTty-TEQ", "ver": "2.0", "x5c": [ "MIIFwDCCA6oIaK6tZ7M", "MIIG6zCCBNpG18-MCJrHyrpMT-ul7RgxE4dFxqcG59ftTXqJ1f-X_Lpo7K-d7OgKoQrUgzxgATz8YXtFAk3rE1cHXvW9W52V637eAihKn9-UKC0ijzVXrBGX4Iq1o1M0ZfR-tFoOn498xasMCTnharKiM562GBLVJtlvV3DMSLEBl5SfuGM-qYjQgTQknXccks9guCmNaN_b2fo1DisbufXfjM3DVaMqx7IJpSc3wAnxooMrAYGpPM" ], "pubArea": "AAEACwAw_c3Ousz865mUPx8O3w", "certInfo": "_1RDR4AXAniCekfsiDI" }
alg
: La proprietà alg
indica l'identificatore dell'algoritmo crittografico
utilizzato dall'autenticatore per firmare la dichiarazione di attestazione.sig
: La proprietà sig
contiene la firma digitale generata dall'autenticatore. Questa
firma viene utilizzata per verificare l'autenticità della dichiarazione di attestazione.ver
: La proprietà ver
specifica la versione del formato della dichiarazione di
attestazione.x5c
: L'array x5c
contiene uno o più certificati X.509 che formano un percorso di
certificazione, che aiuta a convalidare l'attestazione.pubArea
: La proprietà pubArea
contiene informazioni dettagliate sulla chiave
pubblica e sulle caratteristiche dell'autenticatore.certInfo
: La proprietà certInfo
include tipicamente informazioni sulla
certificazione dell'autenticatore da parte di una parte fidata."clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }
Leggi di più su clientDataJSON
nel
rispettivo articolo del glossario.
"transports": [ "hybrid", "internal" ]
La proprietà transports indica i meccanismi attraverso i quali un autenticatore può comunicare con un client. Alcune combinazioni di valori di esempio comuni sono:
"transports": ["internal","hybrid"]
: Le passkey possono essere utilizzate
dall'autenticatore di piattaforma (ad es. Face ID,
Touch ID, Windows Hello) o tramite l'autenticazione
cross-device (utilizzando codice QR e Bluetooth)."transports": ["internal"]
: Le passkey possono essere utilizzate
dall'autenticatore di piattaforma (ad es. Face ID,
Touch ID, Windows Hello)transports
impostata: comportamento predefinito che non fornisce
indicazioni.L'attestazione (la dichiarazione di attestazione) in WebAuthn è importante perché offre una prova dell'autenticità di un autenticatore. Garantisce che il processo di autenticazione sia eseguito da un dispositivo affidabile, proteggendo così da potenziali minacce alla sicurezza.
Ben Gould
Head of Engineering
I’ve built hundreds of integrations in my time, including quite a few with identity providers and I’ve never been so impressed with a developer experience as I have been with Corbado.
3,000+ devs trust Corbado & make the Internet safer with passkeys. Got questions? We’ve written 150+ blog posts on passkeys.
Join Passkeys CommunitySì, poiché le passkey possono essere sincronizzate tra dispositivi (ad es. da iPhone a
MacBook tramite Portachiavi), le relying party
non possono più determinare realmente quale dispositivo attestato sta effettuando
l'accesso a un'app o a un sito web. Pertanto, Apple e Google hanno deciso che per le
passkey sincronizzate non forniranno più dichiarazioni di attestazione. Tuttavia, per
migliorare l'UX per le relying party e dare loro l'opportunità di riconoscere e
visualizzare le passkey degli ecosistemi Apple e Google
(Portachiavi iCloud e
Google Password Manager),
l'AAGUID sarà comunque fornito (a condizione che l'attestazione sia
impostata su direct
o indirect
nelle impostazioni del server WebAuthn per
PublicKeyCredentialCreationOptions
. Vedi questo
problema di GitHub per i dettagli.
Se vuoi integrare l'autenticazione con passkey nel
tuo sito web e nella tua app, e vuoi offrire ai tuoi utenti un'ottima esperienza con le
passkey, dovresti considerare quanto segue. Supponiamo che tu stia costruendo la tua
soluzione principalmente per uno scenario in cui la maggior parte dei tuoi utenti utilizza
un sistema operativo Windows, iOS, macOS o
Android. Inoltre, supponiamo che la maggior parte
delle passkey (a parte Windows) siano passkey sincronizzate. Poiché né iOS, né macOS, né
Android inviano più una dichiarazione di
attestazione, la vera convalida di un autenticatore non viene più utilizzata (per Windows
questo funziona ancora, probabilmente perché Windows non offre ancora passkey
sincronizzate tramite Windows Hello). Tuttavia, per ottenere
l'AAGUID, ad esempio per una migliore gestione delle passkey nelle
impostazioni dell'account, consigliamo di impostare la preferenza di attestazione su
indirect
, poiché ciò consentirebbe comunque di ottenere l'AAGUID
mentre la dichiarazione di attestazione viene inviata (Windows) o non inviata (iOS, macOS,
Android).
Il servizio di metadati FIDO fornisce un repository di metadati per vari autenticatori. Durante l'attestazione, questo servizio può essere interrogato per recuperare e convalidare i dettagli sull'autenticatore, garantendo l'accuratezza e migliorando l'affidabilità del processo. Il servizio di metadati FIDO controlla la dichiarazione di attestazione (non l'oggetto di attestazione).
Sì, l'attestazione diretta (nella dichiarazione di attestazione), pur offrendo la massima trasparenza fornendo informazioni dettagliate sul dispositivo, può sollevare preoccupazioni sulla privacy in determinati scenari. È fondamentale valutare la necessità di trasparenza rispetto alla privacy quando si sceglie il tipo di attestazione.
WebAuthn offre diversi tipi di preferenze di
attestazione: none, indirect, direct ed enterprise. Per gli scenari in cui la
privacy dell'utente è
importante, si può impiegare attestation=none
, che non fornisce dettagli sul
dispositivo, garantendo che la privacy dell'utente rimanga protetta.
Table of Contents
Enjoyed this read?
🤝 Join our Passkeys Community
Share passkeys implementation tips and get support to free the world from passwords.
🚀 Subscribe to Substack
Get the latest news, strategies, and insights about passkeys sent straight to your inbox.