C# でプリミティブな SSH クライアントを作成することに着手しました。プリミティブ ssh 接続 (低レベル)などの投稿で私のことを覚えているかもしれません。
とにかく、DH 鍵交換を開始するまでは順調です。(openssh クライアントから openssh サーバーへの) ssh 接続を確立するときのトラフィックと、クライアントが同じ openssh サーバーに接続するときのトラフィックを比較しました。
OpenSSH クライアント -> OpenSSH サーバー (サーバーは S、クライアントは C): S: SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2\r (挨拶) C: SSH-2.0-OpenSSH_5.2\r (自己紹介) C : Key Exchange Init (0x14 = 20) S: Key Exchange Init C: Diffie-Hellman GEX Request (0x22 = 34) (DH GEX 最小、ビット数、最大) S: Diffie-Hellman Key Exchange Reply (P、 G など) C: Diffie-Hellman GEX Init S: Diffie-Hellman GEX Reply
私のクライアント -> OpenSSH サーバー: S: SSH-2.0-OpenSSH_5.1p1 Debian-6ubuntu2\r (挨拶) C: SSH-2.0-Some_Name\r (自己紹介) C: Key Exchange Init (0x14 = 20) S: Key Exchange Init C: Diffie-Hellman GEX リクエスト (0x22 = 34) (DH GEX 最小、ビット数、最大)
そして、応答としての偽の TCP パケット (おそらく、サーバー接続は GEX 要求の後/発生時に終了しました。
私はまだ AES128 を使用していません (これが選択された暗号化だと思いますが、これを確認する方法がわかりません...)。などの値を使用して DH 計算を行います。
RFC 4419 ページ 3 http://www.ietf.org/rfc/rfc4419.txt SSH_MSG_KEY_DH_GEX_REQUEST を送信しましたが、サーバーは SSH_MSG_KEX_DH_GEX_GROUP に応答しません。
ここで私が理解していないことについて、誰かが私に少しアドバイスをくれますか? サーバーは私の GEX リクエストを理解していませんか (暗号化を期待しているためか?)?
どんな助けでも大歓迎です、ありがとう:)