我目前正在研究libfido2,并试图找出如何使用包装私钥。
Yubico在常见问题解答中表示,使用YubiKey可以为FIDO U2F使用5个无限密钥对;然而,对于FIDO2,只承诺提供25个常驻密钥的空间。
-
;FIDO2";意味着使用常驻密钥,而FIDO2不能与(外部(封装的私钥一起使用?
-
如果是这种情况,libfido2是否提供了使用FIDO U2F和包装密钥的可能性?
-
如果是,需要如何配置libfido2才能做到这一点?如何为库提供适当的受保护私钥。至少在";fido2断言";当我想在客户端上创建断言时,我看不出有什么方法可以做到这一点。
(函数在这里接受四个特定的参数描述,据我所知,唯一能带来私钥的是"凭据id"。但这个名称让我怀疑使用这个参数是否可以实现我的请求(。
我很感激你的回答!
编辑:在此期间,我发现了一些Solo Keys开发者页面的链接,描述了它如何在Solo Key上工作。私钥似乎是动态计算的——在这种情况下,凭证id将作为计算的种子(
FIDO2包括WebAuthn(浏览器API(和CTAP2(用于外部连接的身份验证程序的USB/蓝牙/NFC API(。CTAP2同时支持客户端和服务器端凭据,并指定与U2F/CTAP1验证器的向后兼容性如何工作。由于您使用的是libfido2,因此CTAP文档可能有助于了解它在后台的功能。
客户端可发现凭据(以前称为驻留密钥(用于身份验证期间未指定凭据ID的无用户名流。这些密钥是随机生成的,需要存储空间。服务器端凭据(非驻留密钥(表示为凭据ID。在注册过程中会请求创建哪种类型的密钥,但如果未指定,则两种FIDO2标准都默认为服务器端凭据。U2F仅支持服务器端凭据。
对于存储空间有限的外部身份验证程序,服务器端凭据通常是由存储在身份验证程序中的单个"主"密钥加密的封装私钥。由于整个状态存储在验证器之外,因此即使在有限的存储空间下,也可以生成实际上无限的密钥。但这确实意味着在注册过程中生成的凭据ID必须存储在服务器上,并且为了生成断言,必须稍后将其提供给验证器进行身份验证。在WebAuthn中,这些凭据ID通常在allowCredentials
参数中识别用户(例如通过用户名和密码(后显示,CTAP2调用此allowList
。
现在(希望(已经澄清了术语,是的,根据断言示例,libfido2支持这两种类型的凭据:
询问<设备>对于与[cred_id]相对应的FIDO2断言,对于驻留密钥,可以省略这些密钥。获得的断言使用<pubkey>。