如何检查您的 ssh 密钥是否为 ssh-rsa2 格式?

str*_*elj 7 linux ssh openssh rsa sha1

所以最近有消息称 OpenSSH 放弃了对 SHA-1 登录的支持,我试图了解他们指的是哪种格式。多年来,我一直通过ssh-keygen -t rsa -b 2048. 这是不再推荐的类型,我应该切换到例如 ECDSA 吗?

在此手册页,https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.html,默认选项rsa-t参数解释说,所选择的选项是使用SHA1签名,所以一应该选择rsa-sha2-256例如。

我尝试检查密钥的类型,ssh-keygen -l -f key它告诉我它确实是 SHA256 类型。如果是这样,那么它解决了我的问题,但欢迎澄清一些问题。谢谢你!

消息来源:https : //www.zdnet.com/article/openssh-to-deprecate-sha-1-logins-due-to-security-risk/

use*_*686 13

密钥格式没有改变。唯一改变的是每次身份验证握手期间发送的签名格式。

使一切变得混乱的是,最初在 SSHv2 中,密钥类型和签名类型是组合定义的。(例如,标识符被定义为平均RSA密钥相同的“SSH-RSA”RSA / SHA-1个签名。)因此改变签名过程意味着分配一个新的密钥类型标识符,并且这将意味着生成新的钥匙...

然而,已经开发了协议扩展来避免这种情况,现代 SSH 客户端将在涉及 RSA 密钥时自动协商签名类型。如果您连接,ssh -v您会注意到正在交换一些额外的数据包:

debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,
                            rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,
                            ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
Run Code Online (Sandbox Code Playgroud)

所以你可以继续使用“ssh-rsa”密钥——你只需要将两端的软件升级到相当新的东西,它就会自动开始从那个密钥生成“rsa-sha2-256”签名。(例如,您可能需要安装新版本的 PuTTY 和 Pageant,并且使用旧版本的 gpg-agent 可能会遇到问题。)

ssh-keygen 中的签名

默认选项rsa-t说法解释说,所选择的选项是使用SHA1签名,所以应该选择rsa-sha2-256的例子。

这适用于颁发证书,但在生成普通密钥时无关紧要。

每个证书在颁发时都由父 CA 签名。这个长期签名存储在证书本身中(并且意识到这与在每次连接期间制作然后丢弃的短期签名不同,这一点非常重要)。这就是为什么许多 HTTPS (X.509) 证书必须被替换的原因——发证 CA 已经用 RSA/SHA-1 签名标记了它们。

OpenSSH 还创建了自己的证书格式,这就是手册页所指的内容。这些所谓的“SSH证书”是不是只是普通的SSH密钥-他们additionaly例如通过您的工作场所CA签名。因此,如果您有名称以 结尾的文件*-cert.pub,则可能需要重新发布这些文件。(ssh-keygen -Lf <file>用于检查它们是如何签名的)。

但是普通的 SSH 密钥内部没有任何长期签名——它们仅用于在每次连接期间进行临时签名。所以钥匙本身没有什么需要更换的。

-l选项

我尝试检查密钥的类型,ssh-keygen -l -f key它告诉我它确实是 SHA256 类型

不,这根本不是 ssh-keygen 显示的内容。该-l选项向您显示密钥的“指纹”,并告诉您它使用 SHA256 来计算此指纹——但这与密钥的类型无关,也与密钥的实际使用方式无关。指纹只是为了显示给而立即计算的散列值。

(请记住,以前的 SSH 软件用于显示基于 MD5 的密钥指纹——即使在实际的 SSHv2 协议中没有使用 MD5。)

其他键类型

这是不再推荐的类型,我应该切换到例如 ECDSA 吗?

据我所知(即从我在 Security.SE 上收集到的信息),RSA 作为签名算法仍然很强大——问题主要是在尝试使用 RSA 作为加密算法时发生,而这不是 SSHv2 的问题。(嗯,不断增加的密钥大小也不是很好。)

ECDSA 有其自身的问题——它很难正确实施,某些类型的程序员错误可能是灾难性的。如果您必须切换,EdDSA(即 ssh-ed25519 或 ssh-ed448)将是更好的选择。

  • 从那时起,GNOME Keyring 已改用 OpenSSH 的 ssh-agent,而不是实现内部代理。最常见的例子是,最初的 ECDSA 签名必须包含一定数量的随机且唯一的数据(“随机数”),如果它不小心_不_唯一,则可能会导致[泄露整个私钥。](https:// /crypto.stackexchange.com/questions/80288)(显然这就是他们越狱 PlayStation 3 的方式。)最近有一个规范描述了一种使用带有确定性随机数的 ECDSA 来避免此问题的方法,但我不确定它的范围有多大通过了。 (2认同)
  • 2015 年对 SHA256-base64(而不是 md5-hex)指纹的更改默认为 6.8,但您可以覆盖并执行旧式指纹,请参阅 https://superuser.com/questions/929566/sha256-ssh-fingerprint -由客户给出,但仅已知 md5 指纹(除了这个愿望之外,我可以+2) (2认同)