SSHの公開鍵認証のセッションIDの生成方法と、なりすまし防止の話
経緯
そこでどうやって、セッションIDを算出しているのかが気になった。クライアントとサーバーで共通のIDを生成する必要がある。そして、クライアントとサーバーのどちらかがセッションIDを任意で決めるのは、「めくら判」になる可能性があるので、やっていないはず。めくら判が問題になる理由は、例えば悪意のあるサーバーが署名してほしいデータをクライアントに投げつけると、クライアントは署名してくれるので、悪意のあるサーバーがほしいクライアント署名済みデータを手に入れることができてしまう。 Qiitaの記事内でも紹介されている、が仕様の和訳なので詳しくはこれを見ると良さそう。 セッションIDの生成方法
以下のように、RFCのも引用されていて、ざっくり意味を取ると「最初に交換された鍵のハッシュをセッションIDとして使っている」という感じ。 The exchange hash H from the first key exchange is additionally used as the session identifier, which is a unique identifier for this connection.
ディフィー・ヘルマンなどで秘密鍵は得ているので、それが交換された鍵を意味しているはず。
確かに、ディフィー・ヘルマンで互いに無関係の2つ鍵を交換して、一つをセッションIDとして、もう一つを暗号化用にすれば、良さそう。