私は、クライアントがクライアント認証のためにクライアントキーペアを必要とすることを知っています。クライアントは、サーバーに公開鍵を送信してチャレンジを暗号化し、チャレンジをクライアントが復号化してクライアントを認証します。
また、クライアントを認証する前に、クライアントはホスト公開鍵を~/.ssh/known_hosts
に格納してサーバーを認証する必要があることも知っています。
しかし、なぜサーバーにはホスト鍵ペアが必要なのですか?ホストの公開鍵のみが必要なようですが、なぜこれに非対称鍵が必要なのですか?
公開鍵暗号の仕組みと、クライアントが公開鍵認証を使用してサーバーに対して認証される方法については、すでに十分に理解しています。
同じことが他の方向にも必要です。インターネットとコンピュータネットワークは邪悪な場所であり、トラフィックをリダイレクトしたり、DNSを偽装したり、何らかの方法で悪意のあるホストに接続させたりして、パスワードやその他の機密情報を取得したりするのは非常に簡単です。そして、誰もがあなたにこの公開鍵を送ることができるので、それは公開鍵だけを使って保証されることはできません、しかしあなたが接続したいサーバーだけがあなたのホストの公開鍵を使って確認できるあなたのデータの署名を送ることができます。
SSH接続が確立されると、サーバーはセッションキーを秘密キーで暗号化し、クライアントはサーバーの公開キーでセッションキーを復号化します。また、サーバーが所有していると主張する公開鍵に関連する秘密鍵をサーバーが持っていることを証明するには、何かを秘密鍵で暗号化(署名)する必要があります。それ以外の場合は、任意のサーバーの公開鍵を取得して、自分の鍵を所有していないとしてもそれを自分のものだと言うことができます。これより少し複雑ですが、それは単純なバージョンです。
SSH接続の確立方法については、 https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process を参照してください。