了解wireshark捕获ssh密钥交换

我需要了解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 

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

首先你应该理解Diffie-Hellman交换的概念。 它允许在两个端点之间build立一个具有以下特征的通道:

  • 防止窃听。 有人在频道上嗅探无法解密。
  • Diffie-Hellman不能防止中间人攻击。 这种攻击是通过validation主机密钥来防止的。 这是在DH交换之后完成的,所以它现在是encryption的,不能用wireshark分析。
  • 它生成的随机数不能由两个同伴单独确定,而是两个一起确定。 对我来说这是一个有趣的概念。

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

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

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

现在为了获取WIRESHARK!

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

    几个参数协商,如压缩和一些encryptionalgorithm。

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

    回复以上

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

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

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

    回复以上。

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

    DH的第一次实际交stream。 维基百科符号后,这将是第2步(爱丽丝发送克)。

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

    交换结束(Bob发送g b )。

    在接收到这个数据包之后,双方都知道秘密密钥(g ab ),并build立一个伪安全信道(可以防止随意窃听,但不能抵抗中间人攻击)。

  7. SSHv2客户端:新密钥

    这看起来像一个简单的确认消息给我。 它很小,不包含有意义的数据。

    好吧,我想在这之后还有很多事情要做(服务器公钥validation,用户authentication,为shell / sftp / scp / tunnelsbuild立数据通道等)。 我不知道确切的细节,并(幸运)所有这一切都是encryption的。

有用的参考:

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

客户端和服务器首先向对方发送他们正在使用的协议和软件版本。

 SSHv2 Client: Key Exchange Init 

这里,客户端按照优先级的顺序告诉服务器它支持的每个function的algorithm(encryption,MAC,密钥交换,主机authentication,压缩)。

 SSHv2 Server: Key Exchange Init 

服务器也一样。 请注意,它可以在收到来自客户端的消息之前发送此消息。

从这两个algorithm列表中,客户端和服务器独立计算相同的密码套件。 例如,他们select相同的kex交换algorithm(并在此之后发生)。

 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 

Diffie-Hellman密钥交换使得客户端和服务器能够以networking上的观察者不可能猜到的共享秘密结束。 例如,他们将从这个秘密中获得encryptionalgorithm的密钥。

请注意,服务器的答复还包含其公共主机密钥(或证书)。 如果是公钥并且客户端从来没有见过,那么客户端通常会询问用户是否应该信任它:

主机'debian.org(130.89.148.14)'的真实性无法build立。
ED25519密钥指纹是SHA256:bNnjFMvzsNhkwzRHwGRbTIUM4XzUjlLrBl / 7MzCbndw。

 SSHv2 Client: New Keys 

新钥匙信息,客户意味着:

嘿服务器! 以下所有来自我的消息都将使用我们刚才协商的密码。

服务器还必须向客户端发送一个新的密钥消息。

我的主要参考是SSH传输协议RFC: https : //tools.ietf.org/html/rfc4253 。 这是SSH的最底层,所有其他的SSH服务(用户authentication,shell,X11转发等)都是基于这个服务的。