1

在注册期间,身份验证器响应包括一个公钥和证明数据,如https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/WebAuthn_Client_Registration.html所示。第attestationObject4步中的改为AuthenticatorAttestationResponse第5步中。为什么authenticator不直接生成AuthenticatorAttestationResponse或者我们只是attestationObject在第5步中发送。

4

2 回答 2

4

这是一个很好的问题,要回答这个问题,我们需要了解所有 FIDO 组件的角色。在 FIDO 协议中,有三个主要组件:

  • 服务器(又名 RP) - 启动身份验证会话,因此它的职责是生成良好的质询,并正确验证响应。

  • 客户端(又名浏览器)- 确保会话安全(又名 TLS)并提供物流以通过可用传输(NFC/USB/BLE)与设备进行通信。所有这些功能都打包到 Webauthn API 中。

  • Authenticator(Security Keys and Built-in Platform Authenticators) - 提供密钥管理和用户验证。

每个组件都有自己的限制:

  • Server 不知道用户看到了什么,所以委托 Client/Browser 来做好 TLS 的执行。
  • 浏览器不处理私钥,也不进​​行用户验证,因此它希望验证器足够安全。
  • Authenticator 希望浏览器没有被利用,attacker.xom 无法替代 RPID。

这就是为什么当服务器生成带有质询的 MakeCredential 请求并调用 Webauthn API 时,浏览器所做的是:

  • 检查 TLS 会话是否正常。没有 MITM,也不是 HTTP。
  • 他们检查请求 RPID(login.example.com 想要代表 example.com 登录)是否被允许且未超出安全范围。
  • 然后它调用所有可用的设备来查看它们是否知道指定的凭据,如果知道,它将等到用户执行一些操作,例如点击按钮或滑动手指。
  • 当操作成功时,它会接受响应,并根据认证选项,无/直接,它会删除或保留认证信息,然后检查是否没有隐私问题字段到服务器(CTAP2.1 CredBlobKey 扩展)
  • 浏览器然后对剩余的证明结构进行编码并附加会话信息(CollectedClientData)并将其发送到服务器
  • 服务器对证明和 clientDataJSON 进行解码,并验证响应不是来自 ATATACKER.XOM,而是来自预期的来源 example.com。

所以总而言之:

  • 身份验证者正在签署东西
  • 浏览器确保您的 TLS 会话是安全的,并且没有俄罗斯黑客试图欺骗您。

有用的资源:

于 2021-09-27T20:14:46.063 回答
0

我的猜测是“因为关注点分离”。

FIDO2 标准由以下部分组成:

W3C WebAuthn:https ://fidoalliance.org/fido2/fido2-web-authentication-webauthn/

FIDO 联盟 CTAP2:https ://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html

前者控制浏览器应用程序如何与较低级别交互,后者控制浏览器/操作系统如何与兼容的身份验证器交互。

为了支持这种分层,必须进行一些映射和转换,就像允许 WebAuthn 数据结构序列化为 JSON 一样通过网络传输。

于 2021-09-27T13:58:13.307 回答