3

我已经着手用 C# 制作一个原始的 SSH 客户端;您可能会从诸如原始 ssh 连接(低级)之类的帖子中记住我,呵呵。

无论如何,在我发起 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 请求(因为它需要加密,或者?)?

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

4

2 回答 2

0

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

我会猜测腻子是如何工作的,如果交换失败,则在“查询 openssh 服务器”以了解它使用的算法之后回退到另一个算法......因为腻子是开源的,所以可能值得你花时间看看在代码中查看腻子如何完成它。

于 2010-05-25T12:41:12.470 回答
0

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

于 2010-05-25T12:18:55.230 回答