首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FIDO U2F密钥存储在哪里?

FIDO U2F密钥存储在哪里?
EN

Security用户
提问于 2020-08-19 03:43:16
回答 2查看 2.2K关注 0票数 8

关于安全密钥是如何存储和使用的,我得到了相互矛盾的信息。公用钥匙和私钥存放在哪里?如果私钥存储在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://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-overview-v1.2-ps-20170411.html#site-specific-public-private-key-pairs

https://www.yubico.com/authentication-standards/fido-u2f/#toggle-id-4

EN

回答 2

Security用户

回答已采纳

发布于 2020-08-19 05:14:07

密钥可以存储在设备上,也可以加密并返回到密钥句柄中。两者都被规范所允许(并提及)。

来自执行方面的考虑

U2F令牌可能不会存储私钥材料,而是可以导出包装好的私钥作为密钥句柄的一部分。

同样在原始消息格式规范中:

一个密钥句柄前一字段中指定的长度。这是一个句柄,它允许U2F令牌标识生成的密钥对。U2F令牌可以封装生成的私钥和为其生成的应用程序id,并将其输出为密钥句柄。

这将由U2F设备的制造商作出决定。

尤比科选择返回加密的私钥作为密钥句柄,允许无限数量的凭据。

如果设备制造商选择将私钥存储在设备本身上,则可能的密钥数量将受到可用存储量的限制。你必须看一看特定设备的规格。

票数 8
EN

Security用户

发布于 2022-01-24 07:12:59

资料来源:https://developers.yubico.com/U2F/Protocol_细节/关键_generation.html

简单摘要

在注册过程中,Yubikey创建一个新的私钥,但不将其存储在本地,而是加密私钥*,并在~64 Byte* new句柄中上传注册成功消息。公钥也包括在没有加密的情况下。

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

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

限制

每个凭据都由一个私钥以及与该凭据关联的元数据组成,这些元数据都需要存储空间。这就为任何一个设备上可以容纳的凭据数量设定了上限。

为了避免这一限制,YubiKeys使用以下方法:

Yubikey解决方案

@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设备)。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/237271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档