SSH 是否支持具有 2048 位密钥的 DSA?

信息安全 SSH 打开sh dsa
2021-08-15 04:33:41

在 FIPS 186-1 和 186-2 中,L 可以是 512 和 1024(含)之间的任何数字,它是 64 的倍数。N 固定为 160。

FIPS 186-3 对其进行了更改,以便 L 和 N 可以是以下任意组合:

  • L = 1024,N = 160
  • L = 2048,N = 224
  • L = 2048,N = 256
  • L = 3072,N = 256

RFC 4253(SSH 传输层协议)说明如下:

   The resulting signature is encoded as follows:

      string    "ssh-dss"
      string    dss_signature_blob

   The value for 'dss_signature_blob' is encoded as a string containing
   r, followed by s (which are 160-bit integers, without lengths or
   padding, unsigned, and in network byte order).

所以我认为这意味着 SSH 不支持 2048 位 DSA?是否没有 RFC 添加对它们的支持?没有供应商扩展?

1个回答

对于哈希:Crossdupe https://crypto.stackexchange.com/questions/15051/why-does-openssh-use-only-sha1-for-signing-and-verifying-of-digital-signatureshttps://crypto .stackexchange.com/questions/39983/which-hash-function-is-used-for-signatures-ssh-rsa-and-ssh-dss 但在这里可能更好。

最近的答案链接到https://www.openssh.com/txt/release-7.2(2016年 2 月 28 日),它指的是现已过期的https://datatracker.ietf.org/doc/html/draft -rsa-dsa-sha2-256-03尽管名称仅将 RSA 升级到 SHA2,但第 6 节解释 DSA 已被删除,其仍然草案替代品https://datatracker.ietf.org/doc/html/草案-ietf-curdle-rsa-sha2-02

您可以轻松地确认没有其他 RFC 在IANA 注册表中更改了 SSH

并且 OpenSSH 自 7.0 起默认(全部)DSA 已弃用和禁用。去年年底,这里有很多问题和相关堆栈,例如:
为什么 OpenSSH 不推荐使用 DSA 密钥
https://unix.stackexchange.com/questions/247612/ssh-keeps-skipping-my-pubkey
https://superuser.com /questions/962918/pubkeyacceptedkeytypes-and-ssh-dsa-key-type
所以他们不太可能对 DSA 进行改进,而任何其他推动与 OpenSSH 不兼容的东西的人通常会发现它没有被使用。

“对不起,查理。”

FWIW 尽管 FIPS 186-3鼓励您使用与 DSA 子组大小(即 N)匹配的哈希,但它实际上并不需要它。OpenSSHssh-keygen不会生成大于 1024 的 DSA 密钥,但如果您通过其他方式生成这样的密钥(例如 2010 年的 OpenSSL 1.0.0 或 2014 年的 Java 8),OpenSSHsshsshd使用(在 7.0撤消默认禁用后)。但是他们根据 RFC 将其与 SHA1 一起使用,这基本上放弃了新的 186-3 大小旨在提供的安全优势。(不接受任何替代品。OpenSSL 0.9.8 可以生成具有当时非标准 N=2048 或 3072 的 DSA 密钥——但仍然是 L=160。)