Vincent
Created: June 17, 2025
Updated: June 20, 2025
L'attestation peut faire référence à trois choses (souvent utilisées de manière interchangeable dans le langage courant, bien qu'elles aient des significations différentes si on les prend au sens strict) :
Premièrement et de manière plus générale, l'attestation dans le domaine de la cryptographie est un terme par lequel une partie « atteste » cryptographiquement une déclaration à une autre partie.
Deuxièmement, pendant la phase d'enregistrement dans WebAuthn, un objet d'attestation est créé par l'authenticator et renvoyé à la Relying Party. C'est un objet conteneur qui contient les informations suivantes :
fmt
)attStmt
- voir ci-dessous)authData
)Le flux de processus d'enregistrement suivant montre le rôle de l'attestation (objet) dans 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" } }
Dans la capture d'écran ci-dessus, aucun AAGUID et aucune déclaration d'attestation ne sont fournis.
Poursuivez votre lecture pour une analyse technique des attributs les plus importants.
Dans WebAuthn, l'attestation garantit que l'authentification de l'utilisateur est sécurisée et transparente. Avec la déclaration d'attestation, vous pouvez vous assurer qu'un identifiant a été créé sur un authenticator / appareil spécifique.
Ces types d'attestation font référence à la déclaration d'attestation (et non à l'objet d'attestation). Ils sont considérés comme une préférence par la relying party (l'authenticator peut donc se comporter différemment car il ne s'agit que d'une préférence).
none
) : Pour les cas où la confidentialité est une
préoccupation majeure ou lorsque des appareils synchronisés sont utilisés, ce type ne
fournit aucune information sur l'appareil, garantissant ainsi la protection de la vie
privée de l'utilisateur. Une autre raison d'utiliser cette valeur pourrait être
d'économiser un aller-retour vers une autorité de certification (AC). none
est
également la valeur par défaut.indirect
) : La relying party
préfère obtenir une attestation mais permet au client de décider comment obtenir les
déclarations d'attestation. Le client peut remplacer les déclarations d'attestation
générées par l'authentificateur par des déclarations d'attestation anonymes pour
protéger la vie privée de l'utilisateur.direct
) : C'est la forme la plus transparente. Ici, la
relying party indique à l'authentificateur qu'elle souhaite
une déclaration d'attestation, afin que la relying party
obtienne des informations détaillées sur l'appareil, y compris sa marque, son modèle et
d'autres spécificités. Bien qu'elle offre la plus grande transparence, elle peut
soulever des problèmes de confidentialité dans certains scénarios ou ne pas être
réellement utilisable pour les identifiants synchronisés.enterprise
) : La
relying party souhaite recevoir une déclaration d'attestation
pouvant inclure des informations d'identification uniques. Ce type d'attestation est
généralement utilisé dans les entreprises ou les organisations qui souhaitent suivre des
appareils / authenticators spécifiques. Les navigateurs web
(agents utilisateurs) ne devraient pas fournir cette attestation détaillée à moins que
leurs paramètres ne l'autorisent spécifiquement pour la partie requérante. Si les
paramètres le permettent, le navigateur doit indiquer à l'appareil au début du processus
que ce type spécifique d'attestation est demandé. Le navigateur doit ensuite transmettre
l'ID unique de l'appareil et la preuve d'attestation exactement tels qu'il les reçoit à
la relying party.L'objet d'attestation contient de nombreux attributs, voici une explication rapide de certains attributs sélectionnés :
"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 est un objet encodé en CBOR, contenant des informations sur les nouveaux identifiants créés, la clé publique et d'autres données pertinentes :
Contrairement à l'objet d'attestation ci-dessus où attStmt
a été laissé vide pour des
raisons de lisibilité, voici à quoi ressemblerait une déclaration d'attestation remplie.
{ "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 propriété alg
indique l'identifiant de l'algorithme cryptographique utilisé
par l'authentificateur pour signer la déclaration d'attestation.sig
: La propriété sig
contient la signature numérique générée par
l'authentificateur. Cette signature est utilisée pour vérifier l'authenticité de la
déclaration d'attestation.ver
: La propriété ver
spécifie la version du format de la déclaration d'attestation.x5c
: Le tableau x5c
contient un ou plusieurs certificats X.509 qui forment un chemin
de certification, ce qui aide à valider l'attestation.pubArea
: La propriété pubArea
contient des informations détaillées sur la clé
publique et les caractéristiques de l'authenticator.certInfo
: La propriété certInfo
inclut généralement des informations sur la
certification de l'authentificateur par une partie de confiance."clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }
Pour en savoir plus sur clientDataJSON
, consultez
l'article de glossaire correspondant.
"transports": [ "hybrid", "internal" ]
La propriété transports indique les mécanismes par lesquels un authentificateur peut communiquer avec un client. Voici quelques combinaisons de valeurs courantes :
"transports": ["internal","hybrid"]
: Les passkeys peuvent être utilisés depuis
l'authentificateur de plateforme (par ex. Face ID,
Touch ID, Windows Hello) ou via l'authentification
inter-appareils (en utilisant un code QR &
Bluetooth)."transports": ["internal"]
: Les passkeys peuvent être utilisés depuis
l'authentificateur de plateforme (par ex. Face ID,
Touch ID, Windows Hello)transports
définie : comportement par défaut qui ne donne aucune
indication.L'attestation (la déclaration d'attestation) dans WebAuthn est importante car elle offre une preuve de l'authenticité d'un authenticator. Elle garantit que le processus d'authentification est effectué par un appareil de confiance, protégeant ainsi contre les menaces de sécurité potentielles.
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.
Plus de 3 000 développeurs font confiance à Corbado et rendent Internet plus sûr avec les passkeys. Vous avez des questions ? Nous avons écrit plus de 150 articles de blog sur les passkeys.
Rejoindre la communauté PasskeysOui, comme les passkeys peuvent être synchronisés entre les appareils (par exemple, d'un
iPhone à un MacBook via le Trousseau), les
relying parties ne peuvent plus vraiment déterminer quel appareil attesté se connecte
réellement à une application ou un site web. Par conséquent, Apple et Google ont décidé
que pour les passkeys synchronisés, ils ne fourniraient plus de déclarations
d'attestation. Cependant, pour améliorer l'UX pour les relying parties et leur donner la
possibilité de reconnaître et d'afficher les passkeys des écosystèmes Apple et Google
(Trousseau iCloud et Gestionnaire de mots de passe Google),
l'AAGUID sera toujours fourni (tant que l'attestation est définie sur
direct
ou indirect
dans les paramètres du serveur WebAuthn pour les
PublicKeyCredentialCreationOptions
. Voir ce
problème GitHub pour plus de détails.
Si vous souhaitez intégrer
l'authentification par passkey dans votre site web
et votre application, et offrir à vos utilisateurs une excellente expérience utilisateur
avec les passkeys, vous devriez considérer ce qui suit. Nous supposons que vous
construisez votre solution principalement pour un scénario où la plupart de vos
utilisateurs utilisent un système d'exploitation Windows,
iOS, macOS ou
Android. De plus, nous supposons que la plupart
des passkeys (à l'exception de Windows) sont des passkeys synchronisés. Comme ni iOS, ni
macOS, ni Android n'envoient plus de déclaration
d'attestation, la validation réelle d'un authentificateur n'est plus utilisée (pour
Windows, cela fonctionne toujours, probablement parce que Windows n'offre pas encore de
passkeys synchronisés via Windows Hello). Cependant, pour
obtenir l'AAGUID, par exemple pour une meilleure gestion des passkeys
dans les paramètres du compte, nous recommandons de définir la préférence d'attestation
sur indirect
, car cela permettrait toujours d'obtenir l'AAGUID
tandis que la déclaration d'attestation est soit envoyée (Windows), soit non envoyée (iOS,
macOS, Android).
Le service de métadonnées FIDO fournit un référentiel de métadonnées pour divers authenticators. Lors de l'attestation, ce service peut être interrogé pour récupérer et valider les détails de l'authenticator, garantissant ainsi l'exactitude et renforçant la fiabilité du processus. Le service de métadonnées FIDO vérifie la déclaration d'attestation (et non l'objet d'attestation).
Oui, l'attestation directe (dans la déclaration d'attestation), bien qu'offrant la plus grande transparence en fournissant des informations détaillées sur l'appareil, peut soulever des préoccupations de confidentialité dans certains scénarios. Il est crucial d'évaluer le besoin de transparence par rapport à la confidentialité lors du choix du type d'attestation.
WebAuthn offre différents types de préférences
d'attestation – aucune, indirecte, directe et d'entreprise. Pour les scénarios où la
confidentialité de l'utilisateur
est importante, attestation=none
peut être utilisé, ce qui ne fournit aucun détail sur
l'appareil, garantissant que la vie privée de l'utilisateur reste protégée.
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.