2010-05-25 55 views
3

我已经着手在C#中创建一个基本的SSH客户端;你可能会记得我的帖子,如primitive ssh connection (lowlevel)呵呵。diffie-hellman ssh keyxchange

无论如何,直到我发起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 min,位数和最大值) 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 min,位数和最大值)

然后一个虚假的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请求(由于它期待加密,或?)?

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

回答

0

我敢肯定,问题是,密钥交换初始化后,按键没有被考虑到(正确的)使用。

0

我最好猜测的是密钥交换是互斥的,即openssh服务器没有客户端寻找的算法客户端没有与openssh服务器交换的算法。您可以通过在putty上运行wireshark以openssh服务器并监视交换并将其与您自己的客户端进行比较来验证它。

我会衡量一个猜测,就是如何腻子的作品,如果交换失败,回落到另一种算法“查询OpenSSH服务器”它采用...因为腻子是开源的,它可能是值得的算法后,你一边看代码,看看腻子如何完成它。

+0

算法存在于双方,但没有正确应用,是的。 – Chuck 2010-05-25 12:43:12