关于安全密钥是如何存储和使用的,我得到了相互矛盾的信息。公用钥匙和私钥存放在哪里?如果私钥存储在Yubikey本身上,它能容纳多少个?
如果这两个密钥都存储在您要对其进行身份验证的服务(Gmail)上,那么它是否发送要解加密的yubikey (私钥)以使用私钥进行签名?
Yubikey网站:
在注册过程中,密钥对在设备(安全元素)上生成,但密钥对不存储在YubiKeys上。相反,密钥对(公钥和加密私钥)由发起注册的每个依赖方/服务存储。因此,这种方法允许无限数量的服务与U2F认证的YubiKeys相关联。
FIDO网站:
U2F设备和协议需要保证用户的隐私和安全。作为协议的核心,U2F设备具有一种功能(理想情况下,包含在安全元素中),它可以创建特定于源的公钥/私钥对。在用户注册步骤期间,U2F设备向原始在线服务或网站提供公钥和密钥句柄。稍后,当用户执行身份验证时,原始在线服务或网站通过浏览器将密钥句柄发送回U2F设备。U2F设备使用密钥句柄来标识用户的私钥,并创建一个签名,该签名被发送回原点以验证U2F设备的存在。因此,密钥句柄只是U2F设备上特定密钥的标识符。
https://fastmail.blog/2016/07/23/how-u2f-security-keys-work/
https://developers.yubico.com/U2F/
https://www.yubico.com/authentication-standards/fido-u2f/#toggle-id-4
发布于 2020-08-19 05:14:07
发布于 2022-01-24 07:12:59
资料来源:https://developers.yubico.com/U2F/Protocol_细节/关键_generation.html
在注册过程中,Yubikey创建一个新的私钥,但不将其存储在本地,而是加密私钥*,并在~64 Byte* new句柄中上传注册成功消息。公钥也包括在没有加密的情况下。
在身份验证期间,服务器将返回密钥句柄。Yubikey将尝试使用主密钥解密密钥句柄,如果解密成功,则对挑战签名。
每个凭据都由一个私钥以及与该凭据关联的元数据组成,这些元数据都需要存储空间。这就为任何一个设备上可以容纳的凭据数量设定了上限。
为了避免这一限制,YubiKeys使用以下方法:
@Marc答案指出,FIDO规范(提议的FIDO U2F实现考虑因素,2017年4月11日,第2.2节,密钥句柄的生成)批准了这个“包装私钥”解决方案。
在凭证注册期间,由YubiKey随机生成一个新的密钥对,该密钥对是新凭据所特有的。私钥以及有关凭据的一些元数据是使用经过身份验证的主密钥加密的。这个主键在每个YubiKey中是唯一的,它是由设备本身在第一次启动时生成的,并且不会以任何形式离开YubiKey。对于支持FIDO2的YubiKeys,如果调用FIDO2重置,则将重新生成该主键,从而使以前创建的凭据无效。
在CCM模式下,对每个证书使用的加密是AES-256,这允许我们在密码学上将诸如AppID这样的东西绑定到私钥上,确保证书只能与正确的RP一起使用。然后,加密(并经过身份验证)数据形成64字节密钥句柄,作为注册流的一部分发送到服务器,由RP存储以供稍后使用。
对于身份验证,RP返回YubiKey的密钥句柄。在这里,它被解密,以重新形成私钥,这是签署挑战完成认证所需的。由于使用了经过身份验证的加密,我们知道私有数据没有以任何方式被更改,并且可以验证凭据是否与正确的AppID一起使用。
通过使用这种方法,YubiKey不需要存储任何每个凭据数据,因此可以注册和使用任意数量的凭据。这对于U2F和WebAuthn“非常驻密钥”都是正确的。对于WebAuthn驻留密钥,仍然必须使用内部存储。
以下内容适用于Yubico的任何YubiKey或安全密钥,固件版本为4.4或更高(这包括任何YubiKey FIPS设备)。
https://security.stackexchange.com/questions/237271
复制相似问题