SSHキー交換を理解する必要があります。RFCドキュメントを読み込もうとしましたが、理解するのが非常に難しいので、wiresharkを使用してパケットをキャプチャしました。sshキー交換用のさまざまなパケットを見つけました
SSHv2 Client: Key Exchange Init
SSHv2 Server: Key Exchange Init
SSHv2 Client: Diffie-Hellman Key Exchange Init
SSHv2 Server: Diffie-Hellman Key Exchange Reply
SSHv2 Client: Diffie-Hellman GEX Init
SSHv2 Server: Diffie-Hellman GEX Reply
SSHv2 Client: New Keys
誰でも私に各パケットの詳細またはsshキー交換のシーケンスを説明できますか?
まず最初に、Diffie-Hellman交換の概念を理解する必要があります。これらの機能により、2つのエンドポイント間にチャネルを確立できます。
これは、どちらのピアも単独では決定できない乱数を生成します。これは私にとって興味深い概念です。
ウィキペディアの記事から、ここに交換の単純化された構造があります:
その結果、彼らは安全なランダムな秘密gを生成しましたab。
そして今、WIRESHARK CAPTUREのために!
SSHv2クライアント:Key Exchange Init
圧縮や一部の暗号アルゴリズムなど、いくつかのパラメーターのネゴシエーション。
SSHv2サーバー:Key Exchange Init
上記に返信
SSHv2クライアント:Diffie-Hellmanキー交換初期化
数学グループに関するDHパラメータの交渉。 (詳細については、RFC4419セクション3を参照してください)。
SSHv2サーバー:Diffie-Hellman鍵交換応答
上記に返信してください。
SSHv2クライアント:Diffie-Hellman GEX Init
DHの最初の実際の交換。ウィキペディアの表記法に従うと、これはステップ2になります(アリスはgを送信しますa)。
SSHv2サーバー:Diffie-Hellman GEX応答
交換が終了します(ボブはgを送信しますb)。
このパケットを受信した後、両方のピアは秘密鍵(gab)そしてそれを使って疑似安全なチャネルを確立します(偶発的な盗聴に対しては安全ですが、中間者攻撃に対しては安全ではありません)。
SSHv2クライアント:新しいキー
これは私への簡単な確認メッセージのようです。これは小さく、重要なデータは含まれていません。
わかりました。この後、多くのことが行われると思います(サーバーの公開鍵の検証、ユーザー認証、Shell/sftp/scp/tunnelsのデータチャネルの確立など)。私は正確な詳細を知りません、そして(不)幸いにもこれはすべて暗号化されています。
役立つ参考資料:
クライアントとサーバーは、使用しているプロトコルとソフトウェアのバージョンを相互に送信することから始まります。
SSHv2 Client: Key Exchange Init
ここで、クライアントはサーバーに、各機能(暗号化、MAC、鍵交換、ホスト認証、圧縮)でサポートされるアルゴリズムを優先順に通知します。
SSHv2 Server: Key Exchange Init
サーバーは同じことを行います。クライアントからメッセージを受信する前に、このメッセージを送信できることに注意してください。
アルゴリズムの2つのリストから、クライアントとサーバーは同じ暗号スイートを個別に計算します。たとえば、彼らは同じkex交換アルゴリズムを選択します(その直後に実行されます)。
SSHv2 Client: Diffie-Hellman Key Exchange Init
SSHv2 Server: Diffie-Hellman Key Exchange Reply
SSHv2 Client: Diffie-Hellman GEX Init
SSHv2 Server: Diffie-Hellman GEX Reply
Diffie-Hellman鍵交換により、クライアントとサーバーは、ネットワーク上のオブザーバーが現実的に推測できない共有秘密を取得できます。たとえば、彼らはこのシークレットから暗号化アルゴリズムのキーを導出します。
サーバーの応答には、公開ホストキー(または証明書)も含まれていることに注意してください。それが公開鍵であり、クライアントがそれを見たことがない場合、クライアントは通常、それを信頼するかどうかをユーザーに尋ねます。
ホスト 'debian.org(130.89.148.14)'の信頼性を確立できません。
ED25519のキーフィンガープリントはSHA256:bNnjFMvzsNhkwzRHwGRbTIUM4XzUjlLrBl/7MzCbndwです。
SSHv2 Client: New Keys
New Keysメッセージの場合、クライアントは次のことを意味します。
ちょっとサーバー!私からの以下のすべてのメッセージは、交渉したばかりの暗号を使用します。
サーバーはNew Keysメッセージもクライアントに送信する必要があります。
私の主な参照は、SSHトランスポートプロトコルのRFCです https://tools.ietf.org/html/rfc425 。これはSSHの最下層であり、他のすべてのSSHサービス(ユーザー認証、シェル、X11転送など)が基盤としています。