0

我目前正在努力进入 libfido2 并试图弄清楚如何使用包装的私钥。

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

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

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

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

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

我很感激任何答案!

编辑:与此同时,我找到了一些 Solo Keys 开发人员页面的链接,描述了它在 Solo Keys 上的工作原理。似乎私钥是动态计算的——在这种情况下,凭证 ID 将作为计算的种子)

4

1 回答 1

0

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

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

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

现在(希望)澄清了术语,是的 libfido2 根据断言示例支持这两种类型的凭据:

向 <device> 请求对应于 [cred_id] 的 FIDO2 断言,对于常驻密钥可以省略该断言。使用 <pubkey> 验证获得的断言。

于 2022-01-23T17:06:07.283 回答