用 libfido2 包装私钥?

Wrapped private key with libfido2?

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

Yubico 在常见问题解答中说,使用 YubiKey 5 无限密钥对可以用于 FIDO U2F;但是,对于 FIDO2,只承诺 space 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 将作为计算的种子)

FIDO2 包含 WebAuthn(浏览器 API)和 CTAP2(USB/Bluetooth/NFC APIs,用于外部连接的身份验证器)。 CTAP2 支持 client-side 和 server-side 凭证,并指定如何向后兼容 U2F/CTAP1 身份验证器。由于您使用的是 libfido2,因此 CTAP documentation 可能有助于了解它在幕后的作用。

Client-side 可发现的凭据(以前称为驻留密钥)用于无用户名流,其中在身份验证期间未指定凭据 ID。这些密钥是随机生成的,需要存储 space。 Server-side 凭据(non-resident 密钥)表示为凭据 ID。在注册过程中要求创建什么类型的密钥,但如果未指定,则两个 FIDO2 标准都默认为 server-side 凭据。 U2F 仅支持 server-side 凭据。

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

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

Asks <device> for a FIDO2 assertion corresponding to [cred_id], which may be omitted for resident keys. The obtained assertion is verified using <pubkey>.