web-dev-qa-db-ja.com

SSHはRSAとDiffie-Hellmanの両方をどのように使用しますか?

SSHプロトコル2では、サーバーへの安全な接続を確立するときに、DSA、ECDSA、ED25519、およびRSAキーを使用できます。 (この質問については、RSAの手順と機能に精通しているだけで、他の方法について話すことはできません)

私を混乱させるのは、man sshdによると、キーの交換にはDiffie-Hellmanが使用されます。

プロトコル2の場合、フォワードセキュリティはDiffie-Hellman鍵合意を通じて提供されます。この鍵合意により、共有セッション鍵が生成されます。セッションの残りの部分は、対称暗号を使用して暗号化されます...

これは2つの質問につながります。

  1. RSAキーは、キー交換中に使用されない場合、どこで使用されますか?
  2. なぜ2番目のプロトコル(この場合はDiffie-Hellman)が必要なのですか?クライアントのRSA公開鍵を使用してサーバーのセッションキーを暗号化し、それをクライアントに送信しないのはなぜですか。
20
IQAndreas
  1. ホストキーは、Diffie-Hellmanパラメータの署名に使用されます。 is鍵交換中に使用されます。 RSAは、署名アルゴリズムおよび暗号化アルゴリズムです。私が言えることから、クライアントキー(authorized_keys)は鍵交換ではまったく使用されません。これは、特定のメッセージに署名し、クライアントが秘密鍵を持っていることを証明するためにのみ使用されます鍵交換(署名されているDHパラメーターの片側は、攻撃者が偽装できないため、MITMを防ぐのに十分です- 両方クライアントとサーバー;クライアントに常にキーペアを持たせるよりも、サーバーに常にキーペアを持たせる方が簡単です)。

  2. SSHがDHを使用する方法はephemeralアルゴリズムとしてです。DHパラメータは個々のセッションに対して生成され、不要になるとすぐに破棄されます。長持ちするキーペアが使用される唯一のことは認証です。これにより転送秘密が得られます。秘密鍵を盗んでも古いセッションを解読することはできません。

    RSAがencryptセッションキーに使用された場合、そのセッションを記録した人は、その使用が中止されてから数年後にSSHサーバーを購入し、ハードドライブから秘密キーを取得して、それを使用してセッションキー、およびそれを使用して通信全体を読み取ります。 RSAがsign DHパラメーターに使用されている場合、盗まれた秘密鍵を悪用する唯一の方法は中間者攻撃であり、サーバーオペレーターが鍵を変更することでそれを阻止できます。変更されたキーについてすべてのユーザーに知らせる。一時鍵交換を使用すると、記録されたセッションを復号化するために必要なものは、必要以上に長く保存されます。

    これは、TLSセッションでますます頻繁に使用される構成でもあります(証明書に有効期限がある場合、秘密鍵は厳密にさえhaveであってはならないため、有効期限後に秘密にされるべきではありません)中間者攻撃で使用する可能性があります。これは、ユーザーが期限切れの証明書を無視するためですが、一時的な暗号化が優れている理由がわかります)。

28
cpast