2013-08-24 32 views
0

(首先我对不起我的英文,因为它不是我的母语) 我试着用wireshark来理解ssh2 wireshark记录在这里:https://dl.dropboxusercontent.com/s/e9ut8z6v8oldg7g/ssh_wireshark.pcap?token_hash=AAGtkPMwKLt4IIr1Rlrht5_21HpMwQZBfeEFjGoRA85cjQ&dl=1)和rfc 4253,但我有一些困难:ssh2基数'G'和模数'P'是如何相互关联的,未知字段

在SSH_MSG_KEXINIT消息后有SSH_MSG_KEXDH_INIT(30)和SSH_MSG_KEXDH_REPLY(31)。

我的问题是了解SSH_MSG_KEXDH_INIT和SSH_MSG_KEXDH_REPLY。 按照rfc4253:

First, the client sends the following: 

    byte  SSH_MSG_KEXDH_INIT 
    mpint  e 

The server then responds with the following: 

    byte  SSH_MSG_KEXDH_REPLY 
    string server public host key and certificates (K_S) 
    mpint  f 
    string signature of H 

但使用Wireshark我看到:

from Client: 

-SSH Version 2 (encryption:aes128-ctr mac:hmac-md5 compression:none) 
    Packet Length: 76 
    Padding Length: 5 
    -Key Exchange 
      Msg Code: Diffie-Hellman Key Exchange Init (30) 
      Payload: 0000004104e2d6ad26e76531efa9ea(...) 
      Padding String: 0000000000 




from Server: 
-SSH Version 2 (encryption:aes128-ctr mac:hmac-md5 compression:none) 
    Packet Length: 292 
    Padding Length: 8 
    -Key Exchange 
      Msg Code: Diffie-Hellman Key Exchange Reply (31) 
      Multi Precision Integer Length: 104 
      DH modulus (P): 0000001365636473612d73686(...) 
      Multi Precision Integer Length: 65 
      DH base (G): 04ead7f3936361df10c39d7d(...) 
      Payload: 000000650000001365636473612d(...) 
      Padding String: 0000000000000000 

什么是 '有效载荷' 字段? 'G'和模量'P'是如何相互关联的? ecdsa公钥是素数还是合数?

这是我的分析:

a)wireshark是错误的。

如果rfc正确,有效载荷字段是'e'和'f'!

但是有一个问题:如果rfc是正确的,模数p和基g必须在SSH_MSG_KEXDH_INIT之前已知,因为我们需要它们来计算'e';所以wireshark解码是错误的,因为wireshark告诉我P和G在SSH_MSG_KEXDH_INIT之后传输。

还有别的东西告诉我wireshark是错误的:如果我解码base64,我可以在/etc/....pub文件中找到,我可以看到wireshark DH_modulus字段的值。 所以DH_modulus字段并不是DH_modulus,而是服务器公共主机密钥:rfc是对的,wireshark是错误的!

在这种情况下,base和modulus不是通过“Diffie-Hellman密钥交换回复”发送的,所以'g'和'p'是如何传输的?它们是否在所有ssh客户机/服务器中“前缀”

B)Wireshark是正确的

如果我们假定服务器主机公钥是一个素数也可以是DH_modulus和RFC和Wireshark是正确的。

但在此,再有一个问题:从客户端负载不能是“E”,因为有效载荷DH_modulus和DH_base前的发射...

那么,什么是有效域?

何时发送'e'和'f'?因为刚刚在“Diffie-Hellman密钥交换回复”之后,我有指示密钥交换结束的“Newkeys消息”

但是另一方面,我有4个数据包进出端口22,它们没有被解码为ssh,但它是也许“e”和“f”?

前两个数据包长度是48个字节,其他两个长度是64个字节。

是在这4个tcp数据包中传输'e'和'f'吗?也许e和f是64 + 48 = 112字节长度?

正如你所看到的我很困惑。你能帮我吗(也许不是所有的问题,但一些迹象可以帮助)

谢谢。

+0

实际上4个数据包是加密数据包(它们出现在new_key消息后面)。所以它不能是'e'和'f'。不关心这4个数据包的历史!对于那个很抱歉! – user2199104

回答

2

在这种情况下,它是Wireshark错误地解释公钥算法。根据RFC5656(http://tools.ietf.org/html/rfc5656)正确格式化来自服务器的13号包。它使用ecdsa-sha2-nistp256算法,该算法是一个具有2个变量q和r的椭圆曲线算法。

Wireshark使用不同的RFC(尽管不严格4253)不正确地解析此数据包。 RFC5656第3.1节将为您提供所需的信息,帮助您走上正确的轨道。为了您的信息,我会在此响应中发布变量r和s。

在现实中,包含的信息是:

服务器的主机公钥(串K_S): 字符串 “ECDSA-SHA2-nistp256”(其中, “nistp256” 是[标识符]) 字节[n]的ecc_key_blob 字符串 “nistp256”(再次重复为[标识符]斑点的部分) 串Q(其中Q如下)

Q(0073-00b3): 04 BB E6 6E 8E B6 B4 F8 29 8F E2 b1 ba a0 2f 24 a2 d6 33 74 d4 17 ce b2 17 73 da 95 1a ac c4 4b d7 a8 fc 92 6d c6 c 1 38 95 A6 5B 1F哒 EC D2 29 DF 2C 68 5C直流DE 36 BC 8B 34 16 24 28 0C 57 E1 7E

服务器的短暂公开密钥八位字节串(串Q_S):

Q_S( 00b8-00f8): 04 ea d7 f3 93 63 61 df 10 c3 9d 7d bb ff 4d 38 0d 78 53 ea 00 97 30 b9 f5 cb a0 ea 1f 59 68 5b c6 c6 de fb a8 16 f6 a9 e2 88 96 d8 e9 48 c4 c3 4a 24 bc 58 7f cd 6e b3 2f 4a 18 ac d7 68 d7 df 0b

交换hash(字符串)签名: 字符串 “ECDSA-SHA2-nistp256”(再次其中nistp256是[标识符]) 串ecdsa_signature_blob mpint R(011C-013C室): 00 84 0A A1 08 CF E8 2B A9 77 80 F2 82个99 59 E4 BB E4 F0 E8 BF 56个F2 CA 70 7A 4D 53 B0 6E B1 FC 0A

  mpint s (0141-0161): 

00 BB 2A 08 C1 3E 41 EC27分贝24 E8 1F 57 06 分贝55 9F 5D E9 FA 48 87 B2 2E 97 3c 46 59 7a 14 c9 40

希望这有助于消除混淆。你仍然会对RFC5656做一些研究,可能会回头指出RFC4253来填补空白,但这是数据包的细节。

祝你好运!

Scott在美国纽约

相关问题