双方向でSFTP接続を保護する方法

双方向でSFTP接続を保護する方法

自分のコンピューターとサーバーの間に SFTP 接続を設定したい。

私は自分のコンピューターでキーのペアを生成し、サーバーの「authorized_keys」ファイルに公開キーを書き込みました。私の秘密キーを持っていないコンピューターから接続しようとすると (他の人は誰も持っていないはずですが)、パスワードが求められるので、これは機能するはずです。

によるとこの画像私のサーバーは Bob で、コンピューターは Alice です。サーバーがメッセージを送信するとき、サーバーは私の公開鍵を使用してメッセージを暗号化し、私は私の秘密鍵を使用してメッセージを復号化します。しかし、私がサーバーにメッセージを送信した場合、そのメッセージは暗号化されません。暗号化されている場合、どのように暗号化されるのですか?

非対称暗号化について私が理解していることからすると、送信するメッセージを暗号化したい場合は、サーバー上でキーのペアを生成し、その公開キーを自分のコンピューターの「authorized_keys」ファイルに格納する必要がある、ということでしょうか?

どうやって確認する接続は双方向(送信と受信)で保護されていますか?

ありがとう!

答え1

SSH 接続では主に 2 つのことが起こります。

サーバー認証と暗号化

サーバーは公開鍵を送信し、それを信頼する必要があります。その前に手動で取得することもできますし、理想的なセキュリティ環境では、公開鍵が正しいことが分かるまで SSH サーバーに接続することはありません。これが CA の目的です。CA はサーバーの公開鍵に署名します。ほとんどの SSH 環境では、クライアントとしてサーバーの公開鍵を受け入れるだけです。これが最初の「このサーバーを信頼してリストに追加しますか?」という質問です。Linuxシステムのクライアントでは、サーバーの公開鍵は.ssh/known_hostsに保存されます。

接続の実際の暗号化は非対称ではありません。 これは多くの人が秘密鍵/公開鍵暗号化について抱いている大きな誤解です。それは非常に遅いでしょう。実際には、サーバーとクライアントが共有の秘密(つまり長いパスワード)を生成し、それが対称暗号化この 1 回のセッションでのみ有効です。クライアントとサーバーは、共有秘密に同意するまでは非対称暗号化を使用します。その後、この共有秘密をキーとして対称暗号化に切り替えます。

このタイプの暗号化は最も一般的であり、ハイブリッド暗号化ただし、ほとんどの人は(誤って)これを非対称暗号化と呼んでいます。

「本物の」純粋な非対称暗号化の例としては、すべてのメッセージが非対称的に暗号化される PGP によるメール暗号化があります。

また、共有シークレットは永続的に保存されるわけではなく、新しいセッションごとに新しい共有シークレットがネゴシエートされます。

クライアント認証

これは全く別の話で、パスワードやキーベースの認証になります。クライアントの公開鍵(~/.ssh/id_rsa.pub にあります)は、サーバーの authorized_keys ファイル(たとえば、ルートの場合は /root/.ssh/authorized_keys)に存在していなければなりません。以前は、ssh-copy-id次のようなことをしていました。

    cat ~/.ssh/id_rsa.pub | ssh root@server "cat >>  ~/.ssh/authorized_keys"

サーバーの authorized_keys にキーを追加します。

クライアント証明書は暗号化には使用されず、認証にのみ使用されます。

重要編集:誤解を防ぐために、投稿をより明確にしましたssh-copy-id

現時点では、ssh-copy-idクライアントの公開キーをサーバーに追加するベスト プラクティスの方法です。私は、cat両側でどのファイルが操作され、秘密キーと公開キーの関係とそれらの保存方法を示す方法を投稿しました。

catを使う場合、「>」を忘れるリスクがあります。例えば、上書きするauthorized_keys ファイル (Linux では ">>" は追加、">" は上書きを意味します)。設定ファイルを直接操作する場合は責任を持ってください。指摘してくださった @Rallph に感謝します。

答え2

サーバーには独自のキー ペアがあります。SSH サーバーに初めて接続する場合、サーバーのホスト キー (公開キー) を信頼するかどうかを SSH/SFTP クライアントから確認するメッセージが表示されます。

それがサーバーの正当な公開鍵であることを慎重に検証した後でのみ、接続は安全です。私の記事サーバーを認証するための SSH ホスト キーのフィンガープリントはどこで入手できますか?

また、データの暗号化には、あなたのキー ペアもサーバーのキー ペアも実際には使用されないことに注意してください。これははるかに複雑です。

参照:

関連情報