所以最近有消息说 OpenSSH 放弃了对 SHA-1 登录的支持,我试图了解他们指的是哪种格式。多年来,我一直在通过ssh-keygen -t rsa -b 2048
. 这是不再推荐的类型,我应该切换到 ECDSA 吗?
在此手册页https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.htmlrsa
中,参数的默认选项-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/
密钥格式没有改变。唯一改变的是每次身份验证握手期间发送的签名格式。
让一切变得混乱的是,最初在 SSHv2 中,密钥类型和签名类型曾经是组合定义的。(例如,相同的“ssh-rsa”标识符被定义为表示 RSA 密钥和RSA/SHA-1 签名。)因此更改签名过程意味着分配一个新的密钥类型标识符,这意味着生成一个新的密钥类型标识符。钥匙...
但是,已经开发了协议扩展来避免这种情况,并且现代 SSH 客户端将在涉及 RSA 密钥时自动协商签名类型。如果您连接,
ssh -v
您会注意到正在交换一些额外的数据包:因此,您可以继续使用“ssh-rsa”密钥——您只需将两端的软件升级到相当新的版本,它就会自动开始从该密钥生成“rsa-sha2-256”签名。(例如,您可能需要安装新版本的 PuTTY 和 Pageant,而使用旧版本的 gpg-agent 可能会遇到问题。)
ssh-keygen 中的签名
这在颁发证书时适用,但在生成纯密钥时无关紧要。
每个证书在颁发时由父 CA 签名。此长期签名存储在证书本身中(认识到这与在每次连接期间进行然后丢弃的短期签名不同,这一点非常重要)。这就是为什么必须替换许多 HTTPS (X.509) 证书的原因 - 颁发 CA 已用 RSA/SHA-1 签名盖章。
OpenSSH 还创建了自己的证书格式,这就是手册页所指的内容。这些所谓的“SSH 证书”不仅仅是常规的 SSH 密钥——它们还由例如您的工作场所 CA 签署。因此,如果您有名称以 结尾的文件
*-cert.pub
,您可能需要重新发布这些文件。(ssh-keygen -Lf <file>
用于检查它们的签名方式)。但是普通的 SSH 密钥内部不包含任何长期签名——它们仅用于在每次连接期间进行临时签名。所以钥匙本身没有什么需要更换的。
-l
选项_不,这根本不是 ssh-keygen 所显示的。该
-l
选项向您显示密钥的“指纹”,它告诉您它使用 SHA256 来计算此指纹 - 但它与密钥的类型无关,也与密钥的实际使用方式无关。指纹只是为了显示给您而立即计算的哈希值。(请记住,以前的 SSH 软件用于显示基于 MD5 的密钥指纹——即使在实际的 SSHv2 协议中没有使用 MD5。)
其他键类型
据我所知(即从我在 Security.SE 上收集的信息),RSA 作为签名算法仍然很强大——问题大多只是在尝试使用 RSA 作为加密算法时出现,而这不是 SSHv2 的问题。(嗯,不断增加的密钥大小也不是很好。)
ECDSA 有其自身的问题——很难正确实现,并且某些类型的程序员错误可能是灾难性的。如果您必须切换,EdDSA(即 ssh-ed25519 或 ssh-ed448)将是更好的选择。