当前位置: 首页 > 知识库问答 >
问题:

FIDO2与U2F/CTAP1兼容

夏侯枫
2023-03-14

有许多来源说FIDO2/CTAP2与U2F向后兼容:

...所有先前认证的FIDO U2F安全密钥和YubiKeys将继续作为支持WebAuthn的web浏览器和在线服务的第二因素身份验证登录体验工作。-尤比科

但在看了规格之后,我很难看到它在实践中是如何工作的。具体地说,似乎FIDO2的依赖方标识符和U2F的应用程序标识之间存在不匹配。

在FIDO2中,等价物似乎是依赖方标识符,它被定义为域名,如example.com

依赖方标识符和应用程序标识在FIDO2/CTAP2和U2F中具有相同的用途。但是,CTAP2身份验证器直接以UTF8字符串的形式获得依赖方标识符,而U2F身份验证器仅获得应用程序标识(应用程序参数)的SHA-256散列。

CTAP的FIDO文档描述了CTAP2如何映射到CTAP1/U2F。在其中,他们只是将依赖方标识符直接视为应用程序标识:

这似乎不一致。假设我是example.com,我很早就采用了U2F二次因素身份验证。我的应用程序id将是https://example.com,因此我的原始U2F应用程序参数将是sha256(“https://example.com”):

100680ad546ce6a577f42f52df33b4cfdca756859e664b8d7de329b150d09ce9

但是如果我随后切换到使用Webauthn,那么依赖方标识符将只是example.com。如FIDO-Client-to-Authenticator-Protocol-V2.0第7节所述,将其转换为U2F应用程序参数时,得到的值应为sha256(“example.com”):

a379a6f6eeafb9a55e378c118034e2751e682fab9f2d30ab13d2125586ce1947

那显然是不同的。在我切换到webauthn后,任何以前设置了U2F密钥用于我的网站的人都不能再使用它们了:除非他们用自己的密钥重新注册了。当然,他们需要能够登录才能做到这一点。

深入挖掘,我注意到他们在文档中给出的示例有一个依赖方标识符example.com,但是他们在示例中给出的哈希是...

1194228DA8FDBDEEFD261BD7B6595CFD70A50D70C6407BCF013DE96D4EFB17DE

这不是上面两个选项中的任何一个。我仍然不清楚该值的字符串哈希值是什么。

那我在这里犯了什么错?使用U2F部署2FA的服务怎么可能在不要求用户重新注册安全密钥的情况下切换到fido2/webauthn?我一定是漏掉了什么。

共有1个答案

危晨
2023-03-14

WebAuthn通过W3C WebAuthn规范中记录的AppID扩展支持与U2F的向后兼容性。依赖方(RP)通过此扩展将U2F应用程序标识传递给浏览器。

下面是几个用Python和Java编写的RP AppID示例。

 类似资料:
  • > 我在多个地方读到,由于U2F没有用户的概念,所以它可以用作登录的因素之一(在MFA中),但对于无密码来说并不理想,而webauthn有用户的概念,这可以帮助使用无密码。我的问题是webauthn为允许这样做而增加的额外内容是什么?是的,我们在创建凭据时传递用户信息,但最终返回的是一个凭据id(它似乎非常类似于keyhandle)并用于关联用户(在服务器上)。据我所知,webauthn def的

  • Soft U2F 是用于 macOS 的软件级 U2F 验证器,它模拟硬件 U2F HID 设备并使用 OS X Keychain 执行加密操作。此工具适用于 Google Chrome 和 Opera 的内置 U2F 实现以及 OS X Safari 和 Firefox 的 U2F 扩展。

  • u2f-ref-code 是 U2F 参考实现,实现了 FIDO U2F 规范。 u2f-ref-code 主要实现了以下组件:Java U2F 实现;虚拟软件 U2F 设备;使用 U2F 的简单 Web 应用;Chrome 浏览器的 U2F 扩展。 u2f-ref-code 是自包含 Java 项目,包括基础的 Web 服务器,所有加密,实用程序等等。

  • U2F(安全钥匙) U2F 是 FIDO 联盟创立的用于网站进行公钥加密的开放认证标准。身份验证是通过提供的公钥给每个服务新建一个钥匙对来进行的。验证期间,客户端通过对服务器发起的挑战进行签名来证明它拥有私钥。【译者注:挑战即 挑战—应答验证 - Challenge–response authentication】 交换过程中不需要手动输入或复制代码也让 U2F 更加方便,且不容易收到网络钓鱼和中

  • 问题内容: 我正在使用来自AJAX发布请求的回调来导航到新页面,但是在Internet Explorer上不起作用。我的代码如下: 这在FF / Safari / Chrome上正常运行,但是当我在IE上对其进行测试时,它不起作用。是否有更好的方法重定向到新页面?我正在使用,因为如果我不使用回调,则数据不会加载到Chrome / Safari上,因为在请求完成之前页面只会更改。 问题答案: 是括号

  • 我有一个关于JavaAPI中Akka 2.0.1的问题。我有以下情况: 参与者A:从UI接收请求。然后它将执行以下操作。 等待来自UI的消息 发送msg到Actor B,以检索数据 成为一个演员,当从演员B那里得到答案时,处理它。 演员B: 等待演员A的消息 检索数据 调用; 这不起作用,演员甲也不会得到答案。然而,如果Actor B在系统中使用全局actorRef到Actor A,在我的情况下z