我刚刚开始使用 YubiKey 来管理我的 ssh 密钥对。
据我从现有资源中收集到的信息,ed25519-sk
这ssh-keygen
似乎是实现这一目标的最直接的方法。
现在我有两个问题:
使用
ssh-keygen -t ed25519-sk -O resident
在 Yubikey 上创建私钥并将“私钥的一半”存储在请求生成密钥的设备上。那是对的吗?如果 1. 为真,那么是否会将
ssh-keygen -K
私钥的一半下载回我的系统?如果它提供完整的私钥,对我来说没有意义,因为那是不可能的(我尝试过,但没有成功)。然而,下载相同的凭证总是会产生新的“一半”。我只能假设这是设计使然,但我不确定。
额外问题:有没有办法创建一个不可通过下载的“常驻”密钥ssh-keygen -K
?
首先,传统智能卡和 FIDO/U2F 令牌之间有一个很大的区别:
智能卡完全依赖于其内部存储——例如,您的 Yubikey 在 PIV 模式下可容纳大约 20 个证书/密钥对(可与 SSH 一起使用)。
虽然存储在智能卡上的证书当然可以被读出,但私钥不会以任何形状或形式离开智能卡。
另一方面,FIDO/U2F 令牌被设计为无需任何内部存储(“驻留密钥”功能是后来添加的可选附加功能)。
当您在网站上注册 U2F 令牌时,该令牌会生成一个密钥并为网站提供一个“密钥句柄”,其中包含稍后重现相同密钥所需的所有信息– 它可以是用于确定性密钥生成的唯一种子(与令牌的“主”种子组合),或者甚至可以是整个私钥(当然,使用令牌的“主”密钥加密)。
这样,U2F 令牌实际上具有无限容量,而根本没有任何存储 - 它将存储卸载到它所使用的网站。
(顺便说一句,这也是 TPM2 芯片的主要功能;它们有一点存储空间,但主要是为了让操作系统处理密钥存储而设计的。)
因此,首先要回答额外的问题 – 不,FIDO 令牌很可能无法拥有不可下载的常驻密钥,因为 FIDO 令牌的整个设计就是让它们可下载;整个“驻留密钥”概念实际上只是一个方便的事情,让密钥记住您在哪些网站上使用过哪些用户名。
(当然,您可以在 Yubikey 中启用 PIV 模式并开始将其用作智能卡 – OpenSSH 可以通过 PKCS#11 访问它。)
关于问题 1,它在某种程度上是正确的,尽管我不确定它在多大程度上是正确的,因为 FIDO 令牌之间的确切实现可能有所不同。例如,它可以是整个私钥,但使用令牌中保留的另一个密钥进行加密;或者它可以是密钥生成的种子,在某种意义上就像“私钥的一半”。
然而,在这两种情况下,几乎可以肯定这是一种“全有或全无”的事情,知道“一半”并不会让以某种方式破解密钥的其余部分变得更容易。
关于问题 2,最可能的答案是,每次下载密钥时,令牌都会使用新的唯一 IV 重新加密“密钥句柄”;因此,即使原始数据和加密密钥仍然相同,密文也不同。