(首先我对不起我的英文,因为它不是我的母语) 我试着用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字节长度?
正如你所看到的我很困惑。你能帮我吗(也许不是所有的问题,但一些迹象可以帮助)
谢谢。
实际上4个数据包是加密数据包(它们出现在new_key消息后面)。所以它不能是'e'和'f'。不关心这4个数据包的历史!对于那个很抱歉! – user2199104