【问题标题】:Wrapped private key with libfido2?用 libfido2 封装的私钥?
【发布时间】:2022-01-23 14:23:55
【问题描述】:

我目前正在研究 libfido2 并试图弄清楚如何使用包装的私钥。

Yubico 在常见问题解答中说,使用 YubiKey 5 无限密钥对可用于 FIDO U2F;但是,对于 FIDO2,只承诺 25 个常驻密钥的空间。

  1. “FIDO2”是否意味着使用了常驻密钥,而 FIDO2 不能与(外部)封装的私钥一起使用?

  2. 如果是这种情况,libfido2 是否提供了使用 FIDO U2F 和封装密钥的可能性?

  3. 如果是这样,libfido2 需要如何配置才能做到这一点?如何为库提供适当的受保护私钥。至少在“fido2-assert”中,当我想在客户端上创建断言时,我看不到这样做的方法。

(该函数接受四个具体参数description here,我理解的唯一可以带私钥的是“凭证id”。但是这个名字让我怀疑我的请求是否可以使用这个参数)。

感谢您的任何回答!

编辑:与此同时,我找到了this link to some Solo Keys developer pages describing how it works on Solo Keys。似乎私钥是即时计算的 - 在这种情况下,凭证 ID 将作为计算的种子)

【问题讨论】:

    标签: fido yubico fido-u2f


    【解决方案1】:

    FIDO2 包含 WebAuthn(浏览器 API)和 CTAP2(用于外部连接的身份验证器的 USB/蓝牙/NFC API)。 CTAP2 支持客户端和服务器端凭据,并指定与 U2F/CTAP1 身份验证器的向后兼容性如何工作。由于您使用的是 libfido2,因此CTAP documentation 可能有助于了解它的底层功能。

    客户端可发现凭据(以前称为常驻密钥)用于在身份验证期间未指定凭据 ID 的无用户名流。这些密钥是随机生成的,需要存储空间。服务器端凭据(非常驻密钥)表示为凭据 ID。在注册过程中请求创建什么类型的密钥,但如果未指定,两个 FIDO2 标准默认为服务器端凭据。 U2F 仅支持服务器端凭据。

    对于存储空间有限的外部身份验证器,服务器端凭据通常是封装的私钥,由存储在身份验证器中的单个“主”密钥加密。由于整个状态都存储在身份验证器之外,因此即使在存储空间有限的情况下也可以生成几乎无限的密钥。但这确实意味着注册期间生成的凭据 ID 必须存储在服务器上,并且为了生成断言,必须稍后将其提供给身份验证者进行身份验证。在 WebAuthn 中,这些凭据 ID 通常在 allowCredentials 参数中识别用户(例如通过用户名和密码)之后显示,CTAP2 调用此 allowList

    现在(希望)澄清了术语,是的,libfido2 根据the assert example 支持这两种类型的凭据:

    请求对应于 [cred_id] 的 FIDO2 断言, 对于常驻密钥,可以省略。得到的断言 使用 进行验证。

    【讨论】:

    • 感谢您的回复。我添加了一个指向 SoloKeys 页面的链接,该页面描述了如何动态计算私钥。在这种情况下,提到的凭据 ID 就足够了,因为种子值是 ID 的一部分。那么我是否可以得出结论,如果凭据 ID 包含此类部分,则完全取决于身份验证器供应商?
    • 是的,似乎种子数据和加密的私钥都是允许的:w3.org/TR/webauthn-2/#credential-id - 我必须补充一点,“包装的私钥”部分是从内存中写入的,可能可以追溯到 U2F天,例如,请参阅 imperialviolet.org/2017/10/08/securitykeytest.html 以测试当时各种安全密钥的安全性。
    • 再次感谢。真的不知道为什么我错过了你链接到的 w3.org 描述。如果我早点找到这个页面,它会为我节省很多时间;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2023-02-06
    • 2020-11-09
    • 1970-01-01
    • 2018-07-25
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多