本页由自动翻译生成。请阅读英文原文 此处.
认证 (Attestation) 可以指三件事(在口语中,它们经常可以互换使用,尽管严格来说它们的含义有所不同):
首先,也是更普遍的,在密码学领域,认证是一个术语,指一方以密码学方式向另一方“证明”一个声明。
其次,在 WebAuthn 的注册阶段,认证器会创建一个认证对象并返回给信赖方。它是一个包含以下信息的容器对象:
fmt)attStmt - 见下文)authData)第三,在 WebAuthn 中,认证声明是认证对象的一个可选元素。当包含此声明时,它会验证参与认证过程的认证器(设备)的某些特征。然而,一些设备制造商(例如苹果)不提供认证声明,因为规范的这一方面并非为密钥同步而设计,并且当凭证可以在不同设备间同步时(例如,在 iPhone 上创建的密钥也通过同一个 iCloud 钥匙串同步到 MacBook 上使用),它无法有效验证安全属性。当提供认证声明时可以给出的特征:
以下注册流程图显示了认证(对象)在 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" } }
在上面的截图中,没有提供 AAGUID 和认证声明。
在 Passkeys Debugger 中体验 passkey 流程。
继续阅读以了解最重要属性的技术分解。
在 WebAuthn 中,认证确保用户身份验证是安全和透明的。通过认证声明,您可以确保凭证是在特定的认证器/设备上创建的。
这些认证类型指的是认证声明(而非认证对象)。它们被信赖方视为一种偏好(因此认证器的行为可能会有所不同,因为它只是一种偏好)。
none):对于隐私至关重要或涉及同步设备的场景,此类型不提供有关设备的任何信息,确保用户隐私完好无损。使用此值的另一个原因可能是为了节省到证书颁发机构 (CA) 的往返通信。none
也是默认值。indirect):信赖方倾向于获取认证,但允许客户端决定如何获取认证声明。客户端可以用匿名的认证声明替换认证器生成的认证声明,以保护用户隐私。direct):这是最透明的形式。在这里,信赖方告知认证器它需要一个认证声明,以便信赖方可以获取有关设备的详细信息,包括其品牌、型号和其他具体信息。虽然它提供了最高的透明度,但在某些情况下可能会引发隐私问题,或者对于同步凭证可能并不真正适用。enterprise):信赖方希望收到一个可以包含唯一识别信息的认证声明。这种类型的认证通常用于希望跟踪特定设备/认证器的企业或组织。Web 浏览器(用户代理)不应提供这种详细的认证,除非其设置特别允许请求方这样做。如果设置允许,浏览器应在流程开始时告知设备正在请求这种特定类型的认证。然后,浏览器应将其收到的设备唯一 ID 和认证证明原样传递给信赖方。订阅我们的 Passkeys Substack,获取最新消息。
认证对象包含许多属性,以下是一些选定属性的简要说明:
"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" } }
attestationObject 是一个 CBOR 编码的对象,包含有关新创建的凭证、公钥和其他相关数据的信息:
与上面为了可读性而将 attStmt 留空的认证对象相反,这是一个填充了内容的认证声明的样子。
{ "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:alg 属性表示认证器用于签署认证声明的加密算法标识符。sig:sig 属性包含由认证器生成的数字签名。此签名用于验证认证声明的真实性。ver:ver 属性指定认证声明格式的版本。x5c:x5c 数组包含一个或多个构成认证路径的 X.509 证书,这有助于验证认证。pubArea:pubArea 属性包含有关公钥和认证器特征的详细信息。certInfo:certInfo 属性通常包含有关受信任方对认证器进行认证的信息。"clientDataJSON": { "type": "webauthn.create", "challenge": "AAABeB78HrIemh1jTdJICr_3QG_RMOhp", "origin": "https://www.passkeys-debugger.io", "crossOrigin": false }
在相应的词汇表文章中阅读更多关于 clientDataJSON 的信息。
"transports": [ "hybrid", "internal" ]
transports 属性指示认证器可以与客户端通信的机制。一些常见的示例值组合是:
"transports": ["internal","hybrid"]:密钥可以从平台认证器(例如
Face ID、Touch
ID、Windows Hello)或通过跨设备身份验证(使用二维码和蓝牙)使用。"transports": ["internal"]:密钥可以从平台认证器(例如
Face ID、Touch
ID、Windows Hello)使用。transports 属性:默认行为,不提供任何指示。WebAuthn中的认证(认证声明)非常重要,因为它提供了认证器真实性的证明。它确保身份验证过程由受信任的设备执行,从而防范潜在的安全威胁。
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case study是的,由于密钥可以在设备间同步(例如,通过 Keychain 从 iPhone 同步到 MacBook),信赖方无法再真正确定是哪个经过认证的设备正在登录应用或网站。因此,苹果和谷歌决定,对于同步的密钥,他们将不再提供认证声明。然而,为了改善信赖方的用户体验,并让他们有机会识别和显示来自苹果和谷歌生态系统(iCloud 钥匙串和谷歌密码管理器)的密钥,AAGUID 仍将提供(只要在 WebAuthn 服务器设置中将
PublicKeyCredentialCreationOptions 的认证设置为 direct 或 indirect)。详情请参阅此
GitHub 问题。
如果您想在您的网站和应用中集成密钥认证,并希望为您的用户提供出色的密钥用户体验,您应该考虑以下几点。我们假设您主要为大多数用户使用 Windows、iOS、macOS 或 Android 操作系统的场景构建解决方案。此外,我们假设大多数密钥(除了 Windows)都是同步密钥。由于 iOS、macOS 和 Android 都不再发送认证声明,因此对认证器的真正验证已不再使用(对于 Windows 这仍然有效,可能是因为 Windows 尚未通过 Windows
Hello 提供同步密钥)。然而,为了获取 AAGUID,例如为了在账户设置中更好地管理密钥,我们建议将认证偏好设置为
indirect,因为这样仍然可以获取AAGUID,而认证声明则根据情况发送(Windows)或不发送(iOS、macOS、Android)。
FIDO元数据服务为各种认证器提供了一个元数据存储库。在认证期间,可以查询此服务以获取和验证有关认证器的详细信息,从而确保准确性并增强过程的可信度。FIDO元数据服务检查的是认证声明(而非认证对象)。
是的,直接认证(在认证声明中)虽然通过提供有关设备的详细信息来提供最高的透明度,但在某些情况下可能会引发隐私问题。在选择认证类型时,评估透明度与隐私需求之间的权衡至关重要。
WebAuthn
提供了不同类型的认证偏好——无、间接、直接和企业。对于用户隐私很重要的场景,可以采用
attestation=none,它不提供有关设备的任何详细信息,从而确保用户的隐私受到保护。
Corbado 是面向大规模运行 consumer 身份验证的 CIAM 团队的Passkey Intelligence Platform。我们让你看到 IDP 日志和通用 analytics 工具看不到的内容:哪些设备、操作系统版本、浏览器和 credential manager 支持 passkey,为什么注册没有转化为登录,WebAuthn 流程在哪里失败,以及什么时候操作系统或浏览器更新会悄悄破坏登录 — 而且无需替换 Okta、Auth0、Ping、Cognito 或你自有的 IDP。两款产品:Corbado Observe 提供 针对 passkey 及任何其他登录方式的 observability。Corbado Connect 提供 内置 analytics 的 managed passkey(与你的 IDP 并存)。VicRoads 通过 Corbado 为 500 万以上用户运行 passkey(passkey 激活率 +80%)。 与 Passkey 专家交谈 →
目录
相关文章