(最初に私の母国語ではないので私の英語で申し訳ありません) 私はwiresharkでssh2を理解しようとしています(wiresharkの記録はこちらにあります: https://dl.dropboxusercontent.com/s/e9ut8z6v8oldg7g/ssh_wireshark .pcap?token_hash=AAGtkPMwKLt4IIr1Rlrht5_21HpMwQZBfeEFjGoRA85cjQ&dl=1 ) と rfc 4253 ですが、いくつかの問題があります:
SSH_MSG_KEXINIT メッセージの後に、SSH_MSG_KEXDH_INIT (30) と SSH_MSG_KEXDH_REPLY (31) があります。
私の問題は、SSH_MSG_KEXDH_INIT と SSH_MSG_KEXDH_REPLY を理解することです。rfc4253 によると:
First, the client sends the following:
byte SSH_MSG_KEXDH_INIT
mpint e
The server then responds with the following:
byte SSH_MSG_KEXDH_REPLY
string server public host key and certificates (K_S)
mpint f
string signature of H
しかし、wiresharkを使用すると、次のように表示されます:
from Client:
-SSH Version 2 (encryption:aes128-ctr mac:hmac-md5 compression:none)
Packet Length: 76
Padding Length: 5
-Key Exchange
Msg Code: Diffie-Hellman Key Exchange Init (30)
Payload: 0000004104e2d6ad26e76531efa9ea(...)
Padding String: 0000000000
from Server:
-SSH Version 2 (encryption:aes128-ctr mac:hmac-md5 compression:none)
Packet Length: 292
Padding Length: 8
-Key Exchange
Msg Code: Diffie-Hellman Key Exchange Reply (31)
Multi Precision Integer Length: 104
DH modulus (P): 0000001365636473612d73686(...)
Multi Precision Integer Length: 65
DH base (G): 04ead7f3936361df10c39d7d(...)
Payload: 000000650000001365636473612d(...)
Padding String: 0000000000000000
「ペイロード」フィールドとは何ですか? ベース「G」とモジュラス「P」はどのようにネゴシエートされますか? ecdsa 公開鍵は素数ですか、それとも合成数ですか?
これは私の分析です:
a)wireshark が間違っています。
rfc が正しければ、ペイロード フィールドは 'e' と 'f' です。
しかし、問題があります: rfc が正しい場合、モジュラス p と基数 g は SSH_MSG_KEXDH_INIT の前に知る必要があります。したがって、Wireshark のデコードは間違っています。
そして、wireshark が間違っていることを教えてくれる何かがあります: /etc/....pub ファイルで見つかる base64 をデコードすると、wireshark DH_modulus フィールドの値を見ることができます。したがって、DH_modulus フィールドは実際には DH_modulus ではなく、サーバーの公開ホスト キーです。rfc は正しく、wireshark は間違っています。
この場合、ベースとモジュラスは「Diffie-Hellman Key Exchange Reply」によって送信されないため、「g」と「p」はどのように送信されるのでしょうか??すべての ssh クライアント/サーバーで「接頭辞」が付けられ、送信されませんか?
b)wiresharkは正しい
サーバーの公開ホストキーが素数であると仮定すると、DH_modulus と rfc および Wireshark が正しい可能性があります。
しかし、ここでも問題があります。ペイロードは DH_modulus と DH_base の前に送信されるため、クライアントからのペイロードを「e」にすることはできません...
ペイロードフィールドは何ですか?
「e」と「f」はいつ送信されますか? 「Diffie-Hellman Key Exchange Reply」の直後に、鍵交換の終了を示す「Newkeys メッセージ」があるためです。
しかし一方で、sshとしてデコードされていないポート22との間の4つのパケットがありますが、おそらく「e」と「f」ですか??
最初の 2 つのパケットは 48 バイトの長さで、残りの 2 つのパケットは 64 バイトの長さです。
「e」と「f」はこれら 4 つの TCP パケットで送信されますか? おそらくeとfは64 + 48 = 112バイトの長さですか?
ご覧のとおり、私は混乱しています。私を助けてくれませんか(すべての質問ではないかもしれませんが、いくつかの兆候が役立つ可能性があります)
ありがとうございました。