我已经开始用C#制作一个原始的SSH客户端;您可能从primitive ssh connection (lowlevel) hehe之类的帖子中记住了我。

无论如何,直到我启动DH密钥交换之前,一切都很好。
我已经将建立ssh连接(从openssh客户端到openssh服务器)时的流量与客户端连接到同一openssh服务器时的流量进行了比较。

OpenSSH客户端-> OpenSSH服务器(服务器为S,客户端为C):
S:SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2 \ r(打个招呼)
C:SSH-2.0-OpenSSH_5.2 \ r(自我介绍)
C:密钥交换初始化(0x14 = 20)
S:密钥交换初始化
C:Diffie-Hellman GEX请求(0x22 = 34)(具有DH GEX最小值,位数和最大值)
S:Diffie-Hellman密钥交换回复(带有P,G等)
C:Diffie-Hellman GEX初始化
S:Diffie-Hellman GEX回复

我的客户端-> OpenSSH服务器:
S:SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2 \ r(打个招呼)
C:SSH-2.0-Some_Name \ r(自我介绍)
C:密钥交换初始化(0x14 = 20)
S:密钥交换初始化
C:Diffie-Hellman GEX请求(0x22 = 34)(具有DH GEX最小值,位数和最大值)

然后是虚假的TCP数据包作为回复(可能是在GEX请求之后/之后,服务器连接已终止。

我尚未使用AES128(我认为这是选择的加密方式,但是我不确定如何验证这一点...),而且我仍以非压缩格式发送邮件,以获取P,G等值进行DH计算。

所以我受困的地方是:
RFC 4419第3页http://www.ietf.org/rfc/rfc4419.txt
我已发送SSH_MSG_KEY_DH_GEX_REQUEST,但服务器未响应SSH_MSG_KEX_DH_GEX_GROUP。

有人可以给我一些我在这里不了解的建议吗?服务器是否不理解我的GEX请求(由于它要求加密,还是?)?

非常感谢任何帮助,谢谢:)

最佳答案

我很确定问题是在密钥交换初始化之后,密钥没有被使用(正确)使用。

10-08 02:58