キーネゴシエーションを実行するときに、sshは正確に何を送信しますか?


10

IDファイルをsshに明示的に指定する場合:

ssh -i ./id_rsa ...

sshデバッグトレースに次の行があります。

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

sshで生成さid_rsaれたRSA指数も公開されているという意味ですか?id_rsa形式は、「BEGIN PRIVATE KEY」ブロックを含む秘密鍵を含むことをかなり明示しているように思われるため、「公開鍵の提供」は「サーバーへの公開鍵の送信」以外の何かを意味する必要があります。

編集:

明確にするために、「公開鍵の提供」ラインの背後で何が起こっているのか正確に知りたいのです。クライアントが複数のキーを保持している場合、それらはすべて1つずつサーバーに提供されます。


その問題に追加するには、チャレンジの前にサーバーが適切なキーを取得したかどうかをサーバーがチェックする方法があります。既に暗号化を解除する前にサーバーがキーを拒否したためです。名前が正しく指定されていないために発生するエラー。
Gopoi

回答:


12

SSHサーバーに接続して公開/秘密鍵ペアで認証するには、まずサーバーと公開鍵を共有する必要があります。

これは、秘密鍵の公開鍵をサーバー~/ssh/authorized_keysにコピーid_rsa.pubし、コピー/貼り付け、~/.ssh/authorized_keysサーバーへのコピー、またはを使用cat id_rsa.pub >> ~/.ssh/authorized_keysして追加し、リストに追加することで行われます。

接続すると、サーバーは公開鍵を使用してチャレンジに署名し、クライアントは秘密鍵id_rsaを使用してチャレンジを復号化し、サーバーの公開で再暗号化しhost keyて送り返します。

ホストは、秘密鍵を使用して応答を復号化することにより、チャレンジを適切に復号化したことを確認し、クライアント/ホストは、公開/秘密鍵ではなく共有データに基づいて暗号化された接続を確立します。

交換のどの時点でも、あなたの秘密鍵またはホストの秘密鍵が交換または公開されています。あなたの公開鍵はサーバーに保存されていますが、それが公開鍵である理由です。


はい、それで問題ありませんが、これはすべて、サーバーがチャレンジを暗号化するための公開鍵を識別するに発生します。私はいくつかのキーを持っていますが、それらはすべて1つずつサーバーに「提供」されます。それは正確に何を伴いますか?そして、はい、私は秘密鍵が実際には送信されないことに気付きました。おそらくその行を質問から完全に削除する必要があります。:P
アレックスB

指定するssh -i keynameときは、サーバーへの接続に使用する予定のキーをsshクライアントに正確に伝えます。~/.ssh/クライアントに12個のキーがある場合、各キーを反復処理しません。それがためになります~/.ssh/id_rsa~/.ssh/id_dsaクライアントにコード化されている潜在的に他のいくつかのファイル名、またはにそのホストに指定されたものをキー~/.ssh/config...長い話を短く、クライアントがサーバーにキーを提供/提供していません。
cpbills

接続すると、/ client /はサーバーからのチャレンジを復号化し、標準化されたローカル秘密鍵のリストに移動してチャレンジを暗号化し、応答を送信します。チャレンジ/レスポンスが失敗した場合は、次のハードコードされたキー名に/ may /移動し、/ that /秘密キーで再暗号化してから、再試行します。繰り返しになりますが、公開および秘密の鍵は、ログイン認証時にサーバーと/共有/されません。
cpbills、

1
ああ、私はあなたのコメントを読み直しました。host:チャレンジをホスト鍵で暗号化、client:チャレンジをホストpub鍵で復号化、client:チャレンジを秘密鍵で暗号化、host:ホストにリストされているすべての公開鍵でチャレンジを復号化しようとする試み~/.ssh/authorized_keysは、チャレンジとは何かを知っています。つまり、公開鍵でロックが解除されると、その鍵を使用することがわかります。
cpbills、

@cpbills、申し訳ありませんが、転送されたエージェントからのいくつかのキーがあるため、複数のキーが提供されていることを忘れていました(-vvvログには、提供されたすべてのIDが示されていますが、IDファイルを指定しています)。
Alex B

1

公開鍵/秘密鍵の暗号化は、非常にシンプルなシステムに基づいています。

あなたは、一方向の暗号化を行うことが可能である公開鍵、とすることのできる秘密鍵持っクリプションを。その後、公開鍵を世界中のすべての人に与えることができます。暗号化されたデータを解読することはできませんが、秘密鍵で解読できるデータを暗号化することはできます。

したがって、あなたの質問に対する答えは、「あなたの公開鍵」です。


はい、ありがとうございます。公開鍵暗号の仕組みを詳しく知っていますが、SSHプロトコルの詳細と鍵の形式を知りたいのです。公開指数が秘密鍵ファイルに格納されているかどうかを知りたいのですが、そうでないのですか?「公開鍵を提供する」とは、秘密鍵でナンスに署名することを意味することもあるため、サーバーは対応する公開鍵を見つけることができます。
Alex B

はい。これは、SSH-keygenは-yはあなたに秘密鍵、逆doesntの作品の公開鍵与えるん
マット・フリーマン

1

現時点では、公開鍵または秘密鍵を実際に送信する必要はないと思います。暗号化は、サーバーがすでに認識している平文の秘密鍵を使用して、クライアントが実行する必要があります。ホストは、公開鍵を使用してこのメ​​ッセージを復号化できます。適切に暗号化できたのは対応する秘密鍵を保持しているクライアントだけであることがわかっているため、クライアントを認証します。

私はそれを言うと信じてOffering public key: ./id_rsa、それは(に格納されている秘密鍵を使用するため、./id_rsaサーバによって知られている平文の暗号化を実行するために)、その後、サーバはそれが平文と一致していることを、この暗号文と確認を解読するための公開鍵を使用します。公開鍵ファイル./id_rsa.pubは、最初の鍵生成後にクライアントが必要とすることはありません。これは、復号化のためにサーバーによってのみ使用されます。


私はこのようなことが起こるのではないかと思っていましたが、いくつかの詳細(つまり、実際のSSHキーネゴシエーションプロトコル)が必要でした。なぜ反対票を投じたのかわかりません。
Alex B

申し訳ありませんが、私の答えはとても手を振っていました。SSHキーネゴシエーションの詳細については詳しくありません。公開キー認証で必要な一般的なネゴシエーションのみです。具体的でない回答については、反対票が投じられた可能性があります。
Trey Hunner、2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.