我刚刚开始使用 YubiKey 来管理我的 ssh 密钥对。
据我从现有资源中了解到的情况,ed25519-sk
这ssh-keygen
似乎是实现这一目标的最直接的方法。
现在我有两个问题:
使用
ssh-keygen -t ed25519-sk -O resident
Yubikey 创建私钥,并将“一半私钥”存储在请求生成密钥的设备上。这样对吗?如果 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 重新加密“密钥句柄”;因此,即使原始数据和加密密钥仍然相同,密文也会不同。