如何设置两个 YubiKey 具有相同的秘密?

信息安全 优比键 fido2
2021-08-27 11:35:09

许多服务提供 FIDO2 身份验证,例如 Twitter,但只允许用户设置一个“安全密钥”。如果密钥丢失或损坏,这是有问题的。理想的解决方案是允许用户设置多个密​​钥,类似于 Google 的做法,但这不是用户可以影响的。

因此,我的解决方案是以相同的方式设置两个或多个密钥,以便在身份验证时可以使用其中任何一个密钥。这将允许用户将一把钥匙保存在“有用的”位置(例如他们的个人),并将一把钥匙保存在“安全”的备用位置,例如家里的保险箱。

是否可以将两个 YubiKey 设置为具有相同的秘密,以便它们可以互换使用?

3个回答

FIDO2/WebAuthn 依赖于公钥加密。私钥存储在您的安全令牌中。默认情况下,您无法克隆私钥,请参阅https://www.w3.org/TR/webauthn-1/#credential-loss-key-mobility

一般来说,凭证私钥永远不会离开创建它的身份验证者。因此,丢失身份验证器通常意味着丢失与丢失的身份验证器绑定的所有凭据,如果用户只有一个在依赖方注册的凭据,这可能会将用户锁定在帐户之外。Web 身份验证 API 允许为同一用户注册多个凭据,而不是备份或共享私钥。

因此服务提供商(又名依赖方服务器)必须允许注册多个安全令牌以进行备份。

好吧,这实际上是一个功能。强身份验证要求您拥有一个唯一的对象,并且知道一个秘密。我可以复制密钥的容器,它不再是唯一的,并且可能在所有者没有注意到的情况下被使用。此外,能够在相当短的时间内从智能卡等安全设备中提取密钥是一个严重的缺陷,可能导致卡被列入黑名单。

话虽如此,我不是 YubiKeys 的专家,而且我更了解智能卡上的 X509 证书。在后一种情况下,您有两种方法来设置私钥-公钥对:

  • 用于身份验证或安全签名正常方法是在卡本身上生成密钥对。完成此操作后,您只能导出公钥,私钥最终锁定在卡内
  • 应该只用于加密外部方式。您在计算机外部生成兼容的密钥对(适合卡的算法和大小),并导入卡上的公钥和私钥。该卡将不再允许导出私钥,但该密钥可以存储(在安全的地方),以便以后在卡丢失或损坏时能够解码消息

我假设某些密钥可以支持密钥对的这种导入。您必须知道密钥已存在于其安全容器之外,并且存在被盗的风险。

这是不可能的,甚至有针对它的保护措施。请参阅此处的“FIDO U2F 实施注意事项”第 2.6 节
如果您尝试克隆密钥,则该网站应该将您锁定,因为您的令牌计数器确实出现了意外行为。