web-dev-qa-db-ja.com

ssh鍵交換のためのWiresharkキャプチャを理解する

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キー交換のシーケンスを説明できますか?

3
user3184706

まず最初に、Diffie-Hellman交換の概念を理解する必要があります。これらの機能により、2つのエンドポイント間にチャネルを確立できます。

  • 盗聴から保護します。誰かがチャネルを盗聴すると、それを復号化できません。
  • Diffie-Hellmanは中間者攻撃から保護しません。この種の攻撃は、ホストキーの検証によって防止されます。これはDH交換後に行われるため、暗号化されており、現時点ではWiresharkで分析することはできません。
  • これは、どちらのピアも単独では決定できない乱数を生成します。これは私にとって興味深い概念です。

  • ウィキペディアの記事から、ここに交換の単純化された構造があります:

    1. しましょう g 有限巡回グループからの既知の公開番号である。
    2. アリスはランダムな自然数を選びます a そしてgを送るa ボブに。
    3. ボブはランダムな自然数を選びます b そしてgを送るb アリスに。
    4. アリスは(gba = gab
    5. ボブは(gab = gab

その結果、彼らは安全なランダムな秘密gを生成しましたab

そして今、WIRESHARK CAPTUREのために!

  1. SSHv2クライアント:Key Exchange Init

    圧縮や一部の暗号アルゴリズムなど、いくつかのパラメーターのネゴシエーション。

  2. SSHv2サーバー:Key Exchange Init

    上記に返信

  3. SSHv2クライアント:Diffie-Hellmanキー交換初期化

    数学グループに関するDHパラメータの交渉。 (詳細については、RFC4419セクション3を参照してください)。

  4. SSHv2サーバー:Diffie-Hellman鍵交換応答

    上記に返信してください。

  5. SSHv2クライアント:Diffie-Hellman GEX Init

    DHの最初の実際の交換。ウィキペディアの表記法に従うと、これはステップ2になります(アリスはgを送信しますa)。

  6. SSHv2サーバー:Diffie-Hellman GEX応答

    交換が終了します(ボブはgを送信しますb)。

    このパケットを受信した後、両方のピアは秘密鍵(gab)そしてそれを使って疑似安全なチャネルを確立します(偶発的な盗聴に対しては安全ですが、中間者攻撃に対しては安全ではありません)。

  7. SSHv2クライアント:新しいキー

    これは私への簡単な確認メッセージのようです。これは小さく、重要なデータは含まれていません。

    わかりました。この後、多くのことが行われると思います(サーバーの公開鍵の検証、ユーザー認証、Shell/sftp/scp/tunnelsのデータチャネルの確立など)。私は正確な詳細を知りません、そして(不)幸いにもこれはすべて暗号化されています。

役立つ参考資料:

  1. http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
  2. http://www.ietf.org/rfc/rfc4251.txt
13
LatinSuD

クライアントとサーバーは、使用しているプロトコルとソフトウェアのバージョンを相互に送信することから始まります。

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転送など)が基盤としています。

3
bbc