Vincent
Created: June 17, 2025
Updated: June 24, 2025
Atestado (Attestation) pode se referir a três coisas (muitas vezes, na linguagem falada, são usados de forma intercambiável, embora signifiquem algo diferente se considerados com precisão):
Em primeiro lugar e de forma mais geral, atestado no espaço criptográfico é um termo onde uma parte "atesta" criptograficamente uma declaração para outra parte.
Em segundo lugar, durante a fase de registro no WebAuthn, um objeto de atestado é criado pelo autenticador e retornado para a Relying Party. É um objeto contêiner que contém as seguintes informações:
fmt
)attStmt
- veja abaixo)authData
)O seguinte fluxograma do processo de Registro mostra o papel do atestado (objeto) no 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" } }
Na captura de tela acima, nenhum AAGUID e nenhuma declaração de atestado são fornecidos.
Continue lendo para uma análise técnica dos atributos mais importantes.
No WebAuthn, o atestado garante que a autenticação do usuário seja segura e transparente. Com a declaração de atestado, você pode garantir que uma credencial foi criada em um autenticador / dispositivo específico.
Esses tipos de atestado referem-se à declaração de atestado (não ao objeto de atestado). Eles são considerados como uma preferência pela relying party (portanto, o autenticador pode se comportar de maneira diferente, pois é apenas uma preferência).
none
): Para casos em que a privacidade é de extrema importância ou
dispositivos sincronizados estão em uso, este tipo não fornece informações sobre o
dispositivo, garantindo que a privacidade do usuário permaneça intacta. Outra razão para
usar este valor pode ser para economizar uma viagem de ida e volta a uma autoridade de
certificação (CA). none
também é o valor padrão.indirect
): A relying party prefere
obter um atestado, mas permite que o cliente decida como obter as declarações de
atestado. O cliente pode substituir as declarações de atestado geradas pelo autenticador
por declarações de atestado anônimas para proteger a privacidade do usuário.direct
): Esta é a forma mais transparente. Aqui, a
relying party informa ao autenticador que deseja uma
declaração de atestado, para que a relying party obtenha
informações detalhadas sobre o dispositivo, incluindo sua marca, modelo e outras
especificidades. Embora ofereça a maior transparência, pode levantar preocupações com a
privacidade em certos cenários ou pode não ser realmente utilizável para credenciais
sincronizadas.enterprise
): A relying party
deseja receber uma declaração de atestado que pode incluir informações de identificação
únicas. Este tipo de atestado é normalmente usado em empresas ou organizações que
desejam rastrear dispositivos / autenticadores específicos.
Os navegadores da web (agentes de usuário) não devem fornecer este atestado detalhado, a
menos que suas configurações o permitam especificamente para a parte solicitante. Se as
configurações permitirem, o navegador deve informar ao dispositivo quando for necessário
(no início do processo) que este tipo específico de atestado está sendo solicitado. O
navegador deve então repassar o ID exclusivo do dispositivo e a prova de atestado
exatamente como os recebe para a relying party.O objeto de atestado contém muitos atributos, aqui está uma explicação rápida de alguns atributos selecionados:
"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" } }
O attestationObject é um objeto codificado em CBOR, contendo informações sobre as credenciais recém-criadas, a chave pública e outros dados relevantes:
Ao contrário do objeto de atestado acima, onde attStmt
foi deixado em branco por razões
de legibilidade, é assim que uma declaração de atestado preenchida se pareceria.
{ "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
: A propriedade alg indica o identificador do algoritmo criptográfico usado pelo
autenticador para assinar a declaração de atestado.sig
: A propriedade sig contém a assinatura digital gerada pelo autenticador. Esta
assinatura é usada para verificar a autenticidade da declaração de atestado.ver
: A propriedade ver especifica a versão do formato da declaração de atestado.x5c
: O array x5c contém um ou mais certificados X.509 que formam um caminho de
certificação, o que auxilia na validação do atestado.pubArea
: A propriedade pubArea contém informações detalhadas sobre a chave pública e
as características do autenticador.certInfo
: A propriedade certInfo normalmente inclui informações sobre a certificação
do autenticador por uma parte confiável."clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }
Leia mais sobre clientDataJSON
no
respectivo artigo do glossário.
"transports": [ "hybrid", "internal" ]
A propriedade transports indica os mecanismos através dos quais um autenticador pode se comunicar com um cliente. Algumas combinações de valores de exemplo comuns são:
"transports": ["internal","hybrid"]
: As passkeys podem ser usadas a partir do
autenticador de plataforma (por exemplo, Face ID,
Touch ID, Windows Hello) ou via autenticação entre
dispositivos (usando código QR e Bluetooth)."transports": ["internal"]
: As passkeys podem ser usadas a partir do
autenticador de plataforma (por exemplo, Face ID,
Touch ID, Windows Hello)transports
definida: comportamento padrão que não fornece
indicações.O atestado (a declaração de atestado) no WebAuthn é importante, pois oferece prova da autenticidade de um autenticador. Ele garante que o processo de autenticação seja realizado por um dispositivo confiável, protegendo assim contra possíveis ameaças de segurança.
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.
Mais de 3.000 desenvolvedores confiam na Corbado e tornam a Internet mais segura com passkeys. Tem perguntas? Escrevemos mais de 150 posts de blog sobre passkeys.
Junte-se à Comunidade PasskeysSim, como as passkeys podem ser sincronizadas entre dispositivos (por exemplo, do iPhone
para o MacBook via Keychain), as relying parties
não conseguem mais determinar qual dispositivo atestado está realmente fazendo login em um
aplicativo ou site. Portanto, a Apple e o Google decidiram que, para passkeys
sincronizadas, não fornecerão mais declarações de atestado. No entanto, para melhorar a UX
para as relying parties e dar-lhes a oportunidade de reconhecer e exibir passkeys dos
ecossistemas da Apple e do Google (iCloud Keychain e
Google Password Manager), o
AAGUID ainda será fornecido (desde que o atestado seja definido como
direct
ou indirect
nas configurações do servidor WebAuthn para as
PublicKeyCredentialCreationOptions
. Veja esta
issue do GitHub para detalhes.
Se você deseja integrar a autenticação com passkeys
em seu site e aplicativo, e quer oferecer aos seus usuários uma ótima UX de passkeys, você
deve considerar o seguinte. Assumimos que você está construindo sua solução principalmente
para um cenário onde a maioria dos seus usuários usa um sistema operacional Windows,
iOS, macOS ou
Android. Além disso, assumimos que a maioria das
passkeys (além do Windows) são passkeys sincronizadas. Como nem o iOS, macOS nem o
Android enviam mais uma declaração de atestado, a
validação real de um autenticador não é mais usada (para o Windows isso ainda funciona,
provavelmente porque o Windows ainda não oferece passkeys sincronizadas via
Windows Hello). No entanto, para obter o
AAGUID, por exemplo, para um melhor gerenciamento de passkeys nas
configurações da conta, recomendamos definir a preferência de atestado como indirect
,
pois isso ainda permitiria obter o AAGUID enquanto a declaração de
atestado é enviada (Windows) ou não (iOS, macOS, Android).
O serviço de metadados FIDO fornece um repositório de metadados para vários autenticadores. Durante o atestado, este serviço pode ser consultado para buscar e validar detalhes sobre o autenticador, garantindo a precisão e aumentando a confiabilidade do processo. O serviço de metadados FIDO verifica a declaração de atestado (não o objeto de atestado).
Sim, o atestado direto (na declaração de atestado), embora ofereça a maior transparência ao fornecer informações detalhadas sobre o dispositivo, pode levantar preocupações com a privacidade em certos cenários. É crucial avaliar a necessidade de transparência versus privacidade ao escolher o tipo de atestado.
O WebAuthn oferece diferentes tipos de preferências de
atestado – nenhum, indireto, direto e empresarial. Para cenários onde a
privacidade do usuário
é importante, attestation=none
pode ser empregado, o que não fornece detalhes sobre o
dispositivo, garantindo que a privacidade do usuário permaneça protegida.
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.