SSH 如何同时使用 RSA 和 Diffie-Hellman?

信息安全 SSH RSA 密钥交换 diffie-hellman
2021-08-30 08:13:57

SSH 协议 2 允许您在建立与服务器的安全连接时使用 DSA、ECDSA、ED25519 和 RSA 密钥。(请记住,我只熟悉 RSA 的过程和功能,不能代表其他方法)

让我感到困惑的是,根据man sshd,Diffie-Hellman 用于密钥交换:

对于协议 2,前向安全性通过 Diffie-Hellman 密钥协议提供。该密钥协议产生共享会话密钥。会话的其余部分使用对称密码进行加密...

这导致两个问题:

  1. 如果在密钥交换期间不使用 RSA 密钥,它将在哪里发挥作用?
  2. 为什么需要第二个协议(在本例中为 Diffie-Hellman)?为什么不直接使用客户端的 RSA 公钥加密服务器上的会话密钥,然后发送给客户端呢?
1个回答
  1. 主机密钥用于签署 Diffie-Hellman 参数。密钥交换期间使用RSA是一种签名算法,也是一种加密算法。据我所知,客户端密钥 (in authorized_keys) 根本不用于密钥交换;它仅密钥交换后用于对特定消息进行签名并证明客户端具有私钥(签名的 DH 参数的一侧足以防止 MITM,因为攻击者无法同时冒充客户端和服务器;它更容易服务器总是必须有一个密钥对,而不是让客户端总是必须有一个密钥对)。

  2. SSH 使用 DH 的方式是一种临时算法:DH 参数是为单个会话生成的,一旦不再需要它们就会被销毁。持久密钥对的唯一用途是身份验证。这提供了前向保密:窃取私钥不会让您解密旧会话。

    如果使用 RSA加密会话密钥,那么记录该会话的人在 SSH 服务器退役多年后购买并从其硬盘驱动器中获取私钥的人可以使用它来解密会话密钥,并使用它来阅读整个通讯。如果使用 RSA 对 DH 参数进行签名,那么利用被盗私钥的唯一方法是中间人攻击,并且可以通过服务器操作员更改密钥并告知所有用户改变了键。使用临时密钥交换,解密记录会话所需的任何内容都不会存储得比它必须的时间更长。

    这也是 TLS 会话越来越频繁使用的配置(在那里,证书有过期日期,私钥甚至不必在过期后严格保密,因为它不应该在男人身上使用-in-the-middle 攻击;它是,因为用户会忽略过期的证书,但你可以看到为什么临时加密很好)。