![Putty はサーバーホストの公開鍵をどこで取得しますか?](https://rvso.com/image/1654744/Putty%20%E3%81%AF%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E3%81%A9%E3%81%93%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
Debian ボックスにログインすると、ホストの公開鍵を示すセキュリティ警告が表示されます。PuTTY によって報告された完全な公開鍵と ~/.ssh/authorized_keys の公開鍵を比較すると、一致しないことがわかります。
私は MITM 攻撃を受けたのでしょうか、それとも何かを誤解しているのでしょうか?
答え1
秘密鍵 /etc/ssh/ssh_host_${type}_key が接続でどのような役割を果たすのか私にはわかりません。攻撃者が攻撃対象のサーバーから送信された公開鍵を確認し、中間に割り込んでまったく同じ公開鍵を偽装できる場合、サーバーから公開鍵を送信してもらうことがどのように役立つのかはわかりません。
誤解のないように言うと、サーバーは実際にあなたの公開鍵をあなたに送り返しているわけではありません。サーバーは独自の送信されるのは完全に別のキー、「ホスト キー」です。ホスト キーの公開部分と秘密部分は両方とも /etc/ssh に保存されます。
サーバーはただ公開鍵を送信します。また、サイン対応する秘密鍵を使用して作成され、クライアントはそれを証拠として使用できます。(署名されるデータは接続ごとに一意です。) 攻撃者は同じ公開鍵を送信できますが、署名を作成することはできません。
これは、SSL/TLS (HTTPS など) での証明書の動作方法でもあります。
あなた自身の認証キーも同様の方法でサーバーによって検証されます。つまり、PuTTY は公開キーだけを送信するのではなく、秘密キーを使用してメッセージに署名します。そのため、authorized_keys ファイルを見るだけでは、他の誰かがあなたとしてログインすることはできません。