3

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 リクエストを理解していませんか (暗号化を期待しているためか?)?

どんな助けでも大歓迎です、ありがとう:)

4

2 に答える 2

0

問題は、鍵交換の初期化の後、鍵が(正しく)使用されていないことだと確信しています。

于 2010-05-25T12:18:55.230 に答える
0

私の最善の推測は、キー交換が相互に排他的であることです。つまり、クライアントが探しているアルゴリズムがopensshサーバーにない、opensshサーバーと交換するアルゴリズムがクライアントにありません。パテでwiresharkをopensshサーバーに実行し、交換を監視して自分のクライアントと比較することで確認できます。

パテがどのように機能するかを推測します。交換が失敗した場合、使用するアルゴリズムについて「opensshサーバーにクエリを実行」した後、別のアルゴリズムにフォールバックします...パテはオープンソースであるため、しばらく見てみる価値があるかもしれませんパテがそれをどのように達成するかを見るためにコードで。

于 2010-05-25T12:41:12.470 に答える