OpenSSH はどのホスト キーを使用するかをどのように決定しますか?

OpenSSH はどのホスト キーを使用するかをどのように決定しますか?

現在のバージョン ( 6.9p1) では、OpenSSH サーバーはデフォルトで次の 4 種類のホスト キーを作成します。

$ ls /etc/ssh/ssh_host_*_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub

テストを通じて、少なくとも同じバージョンの OpenSSH クライアント ( 6.9p1) を使用する場合、クライアントのキー タイプに関係なく、ホストによって ECDSA キーが使用されることに気付きました。

OpenSSH は、サポートされているアルゴリズムの優先順位をどこで決定するのでしょうか? この情報は編集可能でしょうか、それとも現在のバージョンのソース コードにハードコードされているのでしょうか?

さらに重要なのは、なぜ OpenSSH が ECDSA アルゴリズムを最優先することにしたのかということです。

答え1

順序は、クライアントがHostKeyAlgorithms設定オプションを使用して選択します。私のシステムのデフォルトは (マニュアルページによると) 次のとおりです。

  1. [メールアドレス]
  2. [メールアドレス]
  3. [メールアドレス]
  4. [メールアドレス]
  5. [メールアドレス]
  6. [メールアドレス]
  7. [メールアドレス]
  8. [メールアドレス]
  9. ecdsa-sha2-nistp256
  10. ecdsa-sha2-nistp384
  11. ecdsa-sha2-nistp521
  12. ssh-ed25519
  13. ssh-rsa
  14. ssh-dss

これを上書きするには、次のようにします。

ssh -oHostKeyAlgorithms=ssh-ed25519 [email protected]

答え2

さらに重要なのは、なぜ OpenSSH が ECDSA アルゴリズムを最優先することにしたのかということです。

ECDSAはバージョン5.7でopensshに導入されました。リリースノートはこちら特に、次のように述べられています。

RFC5656 で指定されているように、キー交換 (ECDH) およびホスト/ユーザー キー (ECDSA) 用の楕円曲線暗号化モードを実装します。ECDH と ECDSA は、同等の対称キー長とはるかに短いキーで、プレーン DH および DSA よりも優れたパフォーマンスを提供します。

.......

新しい ECDSA キー タイプを使用する証明書ホスト キーとユーザー キーがサポートされています。ECDSA キーは認証される可能性があり、ECDSA キーは証明書に署名する CA として機能する可能性があります。

256 ビットの曲線フィールドの ECDH は、クライアントとサーバーの両方がサポートしている場合に優先される鍵合意アルゴリズムです。ECDSA ホスト鍵は、ホストの鍵を初めて学習する場合に優先されます。または、ssh-keyscan(1) を使用して学習することもできます。

また、RFC 5656状態:

多くの推定では、2^80-2^90 の演算は実現不可能であると考えられているため、少なくとも 160-180 ビットの楕円曲線を使用することが推奨されます。このドキュメントで必須とされている曲線は、256 ビット、384 ビット、および 521 ビットの曲線です。実装では、160 ビット未満の曲線を使用しないでください。

関連情報