通过 SSH 连接时,Diffie-Hellman 密钥交换是否通过未加密的 TCP 会话进行,还是在交换之前进行加密?

通过 SSH 连接时,Diffie-Hellman 密钥交换是否通过未加密的 TCP 会话进行,还是在交换之前进行加密?

我是一名网络安全专业的学生,​​我非常想了解 SSH 会话的基本流程。我尽我所能地记下了各个阶段,但需要帮助来理解 TCP 握手之后和 Diffie-Hellman 密钥交换之前发生的事情。请帮忙!

会话开始/TCP 握手

  1. 客户端通过发起 TCP 握手开始与服务器的会话。

    TCP 会话的非对称加密

  2. 服务器和客户端反复协商并就 TCP 会话的相互支持的加密协议达成一致。

    此时,在协议协商后,我不清楚他们的会话最初是如何加密的。我使用 Wireshark 尝试捕获客户端或服务器通过其公钥或其他东西发送的信息,但只能看到协议版本交换。无论如何,如果可以的话,请解释一下这个阶段。

    客户端和服务器使用 Diffie-Hellman 算法为该会话协商一个共享密钥,以建立对称密钥加密会话。

  3. 客户端和服务器开始生成临时密钥对,使用

    1. 共享素数
    2. 加密生成器(通常为 AES)
    3. 私人素数(作为私钥)。
  4. 客户端和服务器使用这三个密钥分别生成自己的公钥,该公钥可以从自己的私钥中派生出来。

  5. 客户端和服务器彼此共享各自生成的公钥。

  6. 客户端和服务器各自使用自己的私钥、对方的公钥和他们原始的共享素数来生成相同的密钥。

  7. 客户端和服务器使用此密钥作为共享密钥来加密和解密此会话中的所有未来通信。

    此时,客户端和服务器已成功建立对称密钥加密会话,而无需通过网络发送密钥。

如果还有任何错误,我将非常感激您的澄清。

答案1

此时,在协议协商后,我不清楚他们的会话最初是如何加密的。我使用 Wireshark 尝试捕获客户端或服务器通过其公钥或其他东西发送的信息,但只能看到协议版本交换。无论如何,如果可以的话,请解释一下这个阶段。

此时它根本没有加密。你只是无法在“关注流”视图中看到它,因为 SSHv2 是一种二进制协议,而不是基于文本的协议——在初始版本报告之后,其他所有内容都以二进制数据包的形式发送,仅包含一些ASCII 块散落在各处。

然而,不同的数据包类型在 Wireshark 的解剖看法:

Wireshark 数据包列表截图

请注意,没有明确选择所需算法的数据包;相反,每一方都提供了一个按偏好排序的列表,并且第一的总是使用双方都同意的算法。(该算法的解释见SSH-TRANS 第 7.1 节.) 在这个例子中,双方都同意使用 ECDH。

Wireshark 解析数据包的屏幕截图

加密和 MAC 算法也是如此——列表必须按偏好排序,并且必须选择“最优选”的算法,因此不需要明确确认。

客户端和服务器开始生成临时密钥对,使用

  1. 共享素数
  2. 加密生成器(通常为 AES)
  3. 私人素数(作为私钥)。

是的,除了...我不确定你在这里所说的“加密生成器”是什么意思。

尽管 DH 使用了“生成器”一词,但它并不是指算法——而是一种数字我对数学不太了解,但我相信这是

相关内容