2010-05-25 59 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