为什么每次调用 ssh-keygen -K 时都会给我一个不同的密钥一半?

为什么每次调用 ssh-keygen -K 时都会给我一个不同的密钥一半?

我刚刚开始使用 YubiKey 来管理我的 ssh 密钥对。

据我从现有资源中了解到的情况,ed25519-skssh-keygen似乎是实现这一目标的最直接的方法。

现在我有两个问题:

  1. 使用ssh-keygen -t ed25519-sk -O residentYubikey 创建私钥,并将“一半私钥”存储在请求生成密钥的设备上。这样对吗?

  2. 如果 1. 为真,那么是否会将ssh-keygen -K私钥的一半下载回我的系统?如果它提供完整的私钥,这对我来说毫无意义,因为这是不可能的(我试过了,但没有成功)。但是,下载相同的凭证总是会产生新的“一半”。我只能假设这是设计使然,但我不确定。

附加问题:有没有办法创建一个无法通过下载的“常驻”密钥ssh-keygen -K

答案1

首先,传统智能卡和 FIDO/U2F 令牌之间存在一个很大的区别:

  • 智能卡完全依赖于其内部存储 - 例如,处于 PIV 模式的 Yubikey 可容纳大约 20 个证书/密钥对(可与 SSH 一起使用)。

    虽然存储在智能卡上的证书当然可以被读出,但私钥不会以任何形式离开智能卡。

  • 另一方面,FIDO/U2F 令牌被设计用于任何内部存储(“常驻密钥”功能是后来添加的可选附加功能)。

    当您在网站上注册 U2F 令牌时,该令牌会生成一个密钥,并为网站提供一个“密钥句柄”,其中包含所有必要的信息以便它稍后重现相同的密钥——它可以是确定性密钥生成的唯一种子(与令牌的“主”种子相结合),甚至可以是整个私钥(当然,用令牌的“主”密钥加密)。

    这样,U2F 令牌实际上具有无限容量,而无需任何存储空间 - 它将存储空间卸载到使用它的网站上。

  • (顺便说一句,这也是 TPM2 芯片的主要功能;它们有一个小的位存储空间,但它们主要被设计用来让操作系统处理密钥存储。)

因此,首先回答附加问题——不,FIDO 令牌很可能没有办法拥有不可下载的常驻密钥,因为 FIDO 令牌的整个设计就是让它们可下载;整个“常驻密钥”概念实际上只是为了方便,让密钥记住你在哪些网站上使用了哪些用户名。

(当然,您可以在 Yubikey 中启用 PIV 模式并开始将其用作智能卡 - OpenSSH 可以通过 PKCS#11 访问它。)

关于问题 1,有些正确,尽管我不确定它在多大程度上是正确的,因为 FIDO 令牌之间的确切实现可能有所不同。例如,它可能是全部的私钥,但使用令牌中剩余的另一个密钥加密;或者它可以是密钥生成的种子,在某种意义上就像“私钥的一半”。

然而,在这两种情况下,几乎都肯定是“全有或全无”的事情,知道“一半”并不意味着可以更容易地破解密钥的其余部分。

关于问题 2,最有可能的答案是,每次下载密钥时,令牌都会使用新的唯一 IV 重新加密“密钥句柄”;因此,即使原始数据和加密密钥仍然相同,密文也会不同。

相关内容