Wie entscheidet OpenSSH, welchen Host-Schlüssel verwendet werden soll?

3837
IQAndreas

In meiner aktuellen Version ( 6.9p1) erstellt OpenSSH Server standardmäßig vier Arten von Hostschlüsseln:

$ 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 

Beim Testen habe ich festgestellt, dass zumindest derselbe OpenSSH-Client ( 6.9p1) verwendet wird, der ECDSA-Schlüssel wird vom Host verwendet, unabhängig vom Schlüsseltyp des Clients.

Wo entscheidet OpenSSH, welche Priorität die unterstützten Algorithmen haben? Ist diese Information bearbeitbar oder im Quellcode der aktuellen Version fest codiert?

Und was noch wichtiger ist, warum hat OpenSSH entschieden, dem ECDSA-Algorithmus die erste Priorität zu geben?

5

2 Antworten auf die Frage

5
Thomas

Die Reihenfolge wird vom Client mit der HostKeyAlgorithmsKonfigurationsoption ausgewählt. Die Standardeinstellung auf meinem System (laut Manpage) lautet:

  1. ecdsa-sha2-nistp256-cert-v01@openssh.com
  2. ecdsa-sha2-nistp384-cert-v01@openssh.com
  3. ecdsa-sha2-nistp521-cert-v01@openssh.com
  4. ssh-ed25519-cert-v01@openssh.com
  5. ssh-rsa-cert-v01@openssh.com
  6. ssh-dss-cert-v01@openssh.com
  7. ssh-rsa-cert-v00@openssh.com
  8. ssh-dss-cert-v00@openssh.com
  9. ecdsa-sha2-nistp256
  10. ecdsa-sha2-nistp384
  11. ecdsa-sha2-nistp521
  12. ssh-ed25519
  13. ssh-rsa
  14. ssh-dss

Um dies zu überschreiben, machen Sie etwas wie:

ssh -oHostKeyAlgorithms=ssh-ed25519 user@foo.com

3
MariusMatutiae

Und was noch wichtiger ist, warum hat OpenSSH entschieden, dem ECDSA-Algorithmus die erste Priorität zu geben?

ECDSA wurde mit der Version 5.7 in openssh eingeführt. Die Versionshinweise finden Sie hier . Insbesondere heißt es:

Implementieren Sie Elliptic Curve Cryptography-Modi für den Schlüsselaustausch (ECDH) und Host- / Benutzerschlüssel (ECDSA) gemäß RFC5656. ECDH und ECDSA bieten bei gleicher äquivalenter symmetrischer Schlüssellänge und wesentlich kürzeren Schlüsseln eine bessere Leistung als einfacher DH und DSA.

.......

Zertifikat-Host- und -Nutzerschlüssel, die die neuen ECDSA-Schlüsseltypen verwenden, werden unterstützt. Ein ECDSA-Schlüssel kann zertifiziert sein, und ein ECDSA-Schlüssel kann als Zertifizierungsstelle zum Signieren von Zertifikaten fungieren.

ECDH in einem 256-Bit-Kurvenfeld ist der bevorzugte Algorithmus für die Schlüsselübereinstimmung, wenn sowohl der Client als auch der Server dies unterstützen. ECDSA-Host-Schlüssel werden bevorzugt, wenn die Schlüssel eines Hosts zum ersten Mal erlernt werden, oder können mit ssh-keyscan (1) erlernt werden.

In RFC 5656 heißt es außerdem:

Viele Schätzungen gehen davon aus, dass 2 ^ 80-2 ^ 90-Operationen nicht machbar sind, so dass die Verwendung elliptischer Kurven von mindestens 160-180 Bits empfohlen wird. Die ERFORDERLICHEN Kurven in diesem Dokument sind 256-, 384- und 521-Bit-Kurven. Implementierungen sollten keine Kurven verwenden, die kleiner als 160 Bit sind