ssh 密钥的签名类型是不可更改的,这是否正确?

ssh 密钥的签名类型是不可更改的,这是否正确?

使用生成密钥对时ssh-keygen,可以通过-t以下方式指定所需的签名类型ssh-keygen -t ssh-rsa:我想知道,ssh私钥的签名类型是什么不可改变的,一旦创建密钥对?

如果可以更改,我可以使用哪个工具来更改签名类型?如何?

我问这个问题是因为我的一个旧密钥使用ssh-rsa签名类型,现在ssh-rsa签名算法已被弃用。

答案1

如果您使用 创建常规 SSH 密钥对ssh-keygen -t rsa,该密钥将根本不包含任何签名 - 它实际上只是一个 RSA 密钥对,没有其他任何内容,就像以前一样。SSH 密钥没有签名类型; SSH 连接有一个。

对于此类密钥,当连接两端都支持较新的签名算法时,足够现代的 SSH 版本将自动使用rsa-sha2-512或签名。rsa-sha2-256在 SSH 密钥身份验证中,签名是暂时的,仅在连接协商时创建,之后就会被丢弃。所以,无需更改 SSH 的现有 RSA 密钥使用新签名。

(如果运行ssh-keygen -f id_rsa -l,输出通常会显示“SHA256”:这意味着 SHA256 算法用于生成钥匙的指纹,它不存储在密钥本身中,而是按需计算。使用ssh-keygen -f id_rsa -l -E md5,您可以从同一密钥计算旧式 MD5 指纹。)


但如果您使用的是集中管理SSH 证书,即如果您有类似 的文件id_rsa-cert.pub,这些文件中将嵌入长期签名。要摆脱已弃用的签名算法,您需要重新颁发证书,很可能是由您组织自己的 SSH 密钥证书颁发机构重新颁发。

您可以向证书颁发机构提供现有 SSH 公钥的副本(如果他们尚未存档),他们将运行:

ssh-keygen -s /path/to/ca_key -I key_id /path/to/user_key.pub

就像最初颁发证书时一样。

该命令将生成一个新/path/to/user_key-cert.pub文件,如果 CA 使用最新的 ,该文件将默认ssh-keygen包含使用较新算法的 CA 签名。rsa-sha2-512

您仍将使用与以前相同的私钥,但需要分发重新颁发的证书(本质上是公钥的集中认证副本,具有一些额外的管理功能,例如可选的到期日期和key_id保证 CA 定义的字符串每当此证书用于身份验证时都会被记录)。

当然,CA 可以决定是否接受先前认证的 SSH 公钥副本来重新颁发证书;他们可能会要求您同时创建一个新的私钥,但这将是一个政策问题,而不是技术问题。

答案2

我想你不能。 RSA 密钥和(比方说)DSA 密钥的生成方式不同。那么这些算法之一的给定密钥对就不是其他算法的密钥对。

如果您担心 RSA 的强度,我想您应该担心共享相同密钥对的每种算法。

那么你能做的最好的事情就是重新生成密钥对并再次分发公钥(你可以通过受 RSA 保护的 scp 来执行此操作,直到你切换为止)。

相关内容