web-dev-qa-db-ja.com

SSH暗号化はどのように機能しますか?

クライアントホストで2つのキー(プライベートとパブリック)を生成し、パブリックキーをサーバーホストにコピーする方法を読みました。

私が理解しているように(間違っている場合は訂正してください):サーバーは公開鍵でデータを暗号化してクライアントに送信し、クライアントは秘密鍵でデータを復号化します。

しかし、サーバーに送信するためにクライアント上のデータを暗号化する必要がある場合、どのように行われますか?

公開鍵はクライアントのデータを暗号化しますか?しかし、公開鍵しか持っていない場合、サーバーはそれをどのように復号化できますか?

SSH暗号化はどのように機能しますか?

34
DrStrangeLove

TCP接続を確立した後、最初に、両方のシステムが-=などのプロトコルを使用して、セッションキーに同意します DH鍵交換[〜#〜] ecdh [〜#〜] またはGSSAPI。この鍵は対称的で一時的なものです。このようなアルゴリズムを使用して、両側が同じ鍵を使用してデータを暗号化および復号化します [〜#〜] aes [〜#〜] または RC4 として。

authenticationの場合のみ、クライアントの鍵ペアがデータの暗号化に使用されることはありません。「publickey」は、クライアントが独自の公開鍵を提示するいくつかの利用可能な方法の1つです。秘密鍵の所有権の証明とともに。同様に、サーバーの鍵ペアは、DHまたはECDHの鍵交換中にサーバーを認証するためにのみ使用されます。それを使用してデータが暗号化されることはありません。

SSH2プロトコルは いくつかのRFC で文書化されています。

35
user1686

最初に理解しておく必要があると思うのは、SSHやSSLなどの多くの暗号化プロトコルは認証にPKIを使用しますが、これらのシステムは実際にペイロードを送信するのにPKIを使用しないということです。

PKIはCPUに負荷がかかりすぎて、実際のペイロードデータの送信に使用できません。 PKIはランダムに生成された鍵のネゴシエーションに使用され、対称暗号化プロトコルで使用されます。使用されるプロトコルもネゴシエートされ、2つのシステムが合意できる最も強力なプロトコルである必要があります。したがって、最初のハンドシェイクとネゴシエーションが完了すると、ほとんどすべてが単なる標準的な対称暗号化になります。

13
Zoredache

ここにいくつかの実用的な例を示します。キーAは秘密に保たれているため、秘密キーであり、キーBは公開されている場所に公開されているため、公開キーが想定されます。

したがって、すべての人にメッセージを送信したい場合、そのメッセージがあなたからのものであり、配信中に変更されていないことを確認してもらいたい場合は、メッセージを送信し、キーAで暗号化されたメッセージのハッシュを含めます。キーBがハッシュを復号化し、受信したメッセージと比較して、メッセージがあなたから来たものであることを確認できます(キーAを持つ人だけがハッシュを正常に復号化する暗号化されたペイロードを生成できたため、キーAを持っているのはあなただけです)。 これは署名と呼ばれます

今、誰かがあなたに秘密のメッセージを送りたいが、彼らが誰であるかを明らかにしたくないと言いましょう。彼らはメッセージを対称キーで暗号化でき(Zoredacheは対称の方がはるかに安価です)、そのキーを取得してキーBで暗号化して送信します。キーAのみがキーBで暗号化されたものを復号化できるため、送信されたメッセージの内容を他の人が見ることはできません。これが通常の暗号化のしくみであり、SSHがデータを交換する方法です。

12

ここ は、秘密公開鍵の暗号化の仕組みの背後にある数学の比較的親しみやすい説明です。

BBCからのさらに基本的な説明は here です。

3
Chogg

あなたが書く

「公開鍵はクライアント上のデータを暗号化しますか?しかし、公開鍵しか持っていない場合、サーバーはそれをどのように復号化できますか?」

私はそれについてはあまり知りませんが、私はそれについてかなりはっきりと答えることができると思います。

AがBにメッセージを送信する場合、AはBの公開鍵を使用します。これにより、Bはそれを復号化できます。

Aが自分の公開鍵を使用してメッセージを暗号化した場合、実際、Bはメッセージを復号化できません。

それはここで説明されています

http://www.comodo.com/resources/small-business/digital-certificates2.php

1
barlop