了解 ssh 密钥交换的 Wireshark 捕获

use*_*706 3 linux ssh wireshark

我需要了解 SSH 密钥交换,我曾尝试阅读 RFC 文档,但似乎很难理解,所以我使用 wireshark 捕获了数据包,我发现了各种用于 ssh 密钥交换的数据包

SSHv2 Client: Key Exchange Init
SSHv2 Server: Key Exchange Init
SSHv2 Client: Diffie-Hellman Key Exchange Init
SSHv2 Server: Diffie-Hellman Key Exchange Reply
SSHv2 Client: Diffie-Hellman GEX Init
SSHv2 Server: Diffie-Hellman GEX Reply
SSHv2 Client: New Keys
Run Code Online (Sandbox Code Playgroud)

任何人都可以详细解释每个数据包或 ssh 密钥交换的顺序吗??

Lat*_*SuD 14

首先,您应该了解 Diffie-Hellman 交换的概念。它允许在具有以下功能的 2 个端点之间建立通道:

  • 防止窃听。嗅探通道的人无法解密它。
  • Diffie-Hellman 不能防止中间人攻击。通过验证主机密钥来防止这种攻击。这是在DH交换后完成的,所以是加密的,目前不能用wireshark分析。
  • 它生成的随机数不能由对等方中的任何一个单独确定,而是由两者共同确定。这对我来说是一个有趣的概念。

  • 从维基百科文章这里是交换的简化结构:

    1. g是来自有限循环群的已知公共数。
    2. Alice 选择一个随机自然数a并将 g a发送给 Bob。
    3. Bob 选择一个随机自然数b并将 g b发送给 Alice。
    4. Alice 计算 (g b ) a = g ab
    5. Bob 计算 (g a ) b = g ab

结果,他们生成了一个安全的随机秘密 g ab

现在是 Wireshark 捕获!

  1. SSHv2 客户端:密钥交换初始化

    几个参数协商,如压缩和一些加密算法。

  2. SSHv2 服务器:密钥交换初始化

    回复上面

  3. SSHv2 客户端:Diffie-Hellman 密钥交换初始化

    关于数学组的 DH 参数的协商。(有关更多详细信息,请参阅 RFC4419 第 3 节)。

  4. SSHv2 服务器:Diffie-Hellman 密钥交换回复

    回复楼上。

  5. SSHv2 客户端:Diffie-Hellman GEX Init

    第一次实际交换DH。按照维基百科符号,这将是第 2 步(Alice 发送 g a)。

  6. SSHv2 服务器:Diffie-Hellman GEX 回复

    交换完成(Bob 发送 g b)。

    收到此数据包后,两个对等方都知道密钥 (g ab ) 并用它建立一个伪安全通道(可以防止随意窃听,但不能防止中间人攻击)。

  7. SSHv2 客户端:新密钥

    这对我来说似乎是一个简单的确认消息。它很小,不包含任何有意义的数据。

    好的,我想这之后还有很多事情要做(服务器公钥验证、用户身份验证、为 shell/sftp/scp/tunnels 建立数据通道等)。我不知道确切的细节,而且(不)幸运的是所有这些都是加密的。

有用的参考:

  1. http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
  2. http://www.ietf.org/rfc/rfc4251.txt