如果你可以生成无限数量的密钥,那么 Yubikeys/FIDO2 密钥的生成将如何进行?

如果你可以生成无限数量的密钥,那么 Yubikeys/FIDO2 密钥的生成将如何进行?

我在问自己他们是如何做到的,或者是否有人可以向我解释。

我发现这个来源在那里描述了它,但我不太明白。

据我了解,它不是将私钥存储在设备上,而是存储在它发送到的服务器上。这显然是在使用 Yubikey 特定密钥加密私钥时完成的。在身份验证时,“密钥句柄”被发回并解密,并使用一些元数据对质询进行签名并发回所有内容。

在凭证注册期间,YubiKey 会随机生成一个新的密钥对,该密钥对是新凭证独有的。私钥以及有关凭证的一些元数据使用以下方式加密:认证加密使用主密钥。此主密钥对于每个 YubiKey 都是唯一的,由设备本身在首次启动时生成,并且绝不会以任何形式离开 YubiKey。对于支持 FIDO2 的 YubiKey,如果调用 FIDO2 RESET,则会重新生成此主密钥,从而使任何先前创建的凭据无效。

每个凭证使用的加密是AES-256CCM 模式,这使我们能够以加密方式将 AppID 等内容与私钥绑定,确保凭证只能与正确的 RP 一起使用。加密(和认证)数据随后形成 64 字节密钥句柄,作为注册流程的一部分发送到服务器,由 RP 存储以供日后使用。

为了进行身份验证,RP 将密钥句柄返回给 YubiKey。在这里,它被解密以重新形成私钥,这是签署质询以完成身份验证所需的。由于使用了经过身份验证的加密,我们知道私有数据没有以任何方式被更改,并且可以验证凭证是否与正确的 AppID 一起使用。

通过使用这种方法,YubiKey 无需存储任何每个凭证数据,因此可以注册和使用任意数量的凭证。这对于 U2F 和 WebAuthn“非驻留密钥”都是如此。对于 WebAuthn常驻密钥,仍然必须使用内部存储。

答案1

答案在另一个交流论坛上: https://security.stackexchange.com/questions/237271/where-are-fido-u2f-keys-stored以及在官方 yubico 网站(我也找到了,但不太明白):https://developers.yubico.com/U2F/Protocol_details/Key_generation.html

简单总结

在注册过程中,Yubikey 会创建一个新的私钥,但不会将其存储在本地,而是加密私钥*并在 ~64 字节* 密钥句柄中上传注册成功消息。公钥也包含在内,但未经加密。

在身份验证期间,服务器将返回密钥句柄。Yubikey 将尝试使用主密钥解密密钥句柄,如果解密成功,则签署质询。

KeyHandle 长度规范为 0-255 变量(FIDO U2F 原始消息格式 2017 年 4 月 11 日,第 4.2 节),但 Yubikey 目前使用 64 个字节。Yubikey 目前在 CCM 模式下使用 AES-256 加密 PrivateKey

来源

相关内容