
クライアント ホストで 2 つのキー (秘密キーと公開キー) を生成し、公開キーをサーバー ホストにコピーすることについて読みました。
私の理解では、(間違っていたら訂正してください)、サーバーは公開鍵でデータを暗号化してクライアントに送信し、クライアントは秘密鍵でそれを復号化します。
しかし、サーバーに送信するためにクライアント上のデータを暗号化する必要がある場合、それはどのように行われるのでしょうか?
公開鍵はクライアント上のデータを暗号化しますか? しかし、公開鍵しか持っていない場合、サーバーはどうやってデータを復号化できるのでしょうか?
SSH 暗号化はどのように機能しますか?
答え1
TCP接続を確立した後、まず両システムはセッションキー、次のようなプロトコルを使用するDH 鍵交換、ECDHまたはGSSAPI。このキーは対称かつ一時的であり、双方が同じキーを使用して、次のようなアルゴリズムを使用してデータを暗号化および復号化します。エーエスまたはRC4。
クライアントの鍵ペアはデータの暗号化には使用されず、認証– 「公開鍵」は、利用可能な方法の 1 つであり、クライアントは独自の公開鍵と秘密鍵の所有権の証明を提示します。同様に、サーバーの鍵ペアは、DH または ECDH の鍵交換中にサーバーを認証するためにのみ使用され、これを使用してデータが暗号化されることはありません。
SSH2プロトコルについては、いくつかのRFC、 含む:
答え2
まず理解しておく必要があるのは、SSH や SSL などの多くの暗号化プロトコルは認証の目的で PKI を使用しますが、これらのシステムのほとんどはペイロードの実際の送信には PKI を使用しないということです。
PKI は CPU を大量に消費するため、実際のペイロード データの送信には使用できません。PKI は、対称暗号化プロトコルで使用されるランダムに生成されたキーをネゴシエートするために使用されます。使用するプロトコルもネゴシエートされ、2 つのシステムが合意できる最も強力なプロトコルにする必要があります。したがって、最初のハンドシェイクとネゴシエーションが完了すると、ほとんどすべてが標準的な対称暗号化になります。
答え3
ここにいくつかの実用的な例を示します。キー A は秘密に保持され、したがって秘密キーとなり、キー B は一般にアクセス可能な場所に投稿され、したがって公開キーとなると仮定します。
したがって、すべての人にメッセージを送信し、そのメッセージが自分から送信され、配信中に変更されていないことを確認してもらいたい場合は、メッセージを送信し、キー A で暗号化されたメッセージのハッシュを含めます。すると、キー B を持つ人は誰でもハッシュを復号化し、受信したメッセージと比較して、メッセージが自分から送信されたものであることを確認できます (ハッシュを正常に復号化した暗号化されたペイロードを生成できたのはキー A を持つ人だけであり、キー A を持つのはあなただけであるため、そのメッセージはあなたから送信されたものにしかならないためです)。これを署名といいます。
さて、誰かがあなたに秘密のメッセージを送りたいが、自分の身元を明かしたくないとします。その人は対称キーでメッセージを暗号化し (Zoredache が述べたように、対称キーの方がはるかに安価です)、そのキーをキー B で暗号化してあなたに送信します。キー B で暗号化されたものを復号化できるのはキー A だけなので、他の人はあなたに送信されたメッセージの内容を見ることはできません。これが通常の暗号化の仕組みであり、SSH がデータを交換する仕組みです。
答え4
あなたが書く
「公開鍵はクライアント上のデータを暗号化しますか?しかし、サーバーが公開鍵しか持っていない場合、どうやってデータを復号化できるのでしょうか?」
私はそれについてあまり詳しくありませんが、その質問にはかなり明確に答えられると思います。
A が B にメッセージを送信する場合、A は B の公開鍵を使用します。これにより、B はメッセージを復号化できます。
A が自分の公開鍵を使用してメッセージを暗号化した場合、B はそれを復号化することはできません。
ここで説明されている
http://www.comodo.com/resources/small-business/digital-certificates2.php