Wenn ich erkläre, wie man das SSH-Authentifizierungssystem mit öffentlichen Schlüsseln einrichtet, werde ich gelegentlich gefragt, was besser ist, RSA- oder DSA-Schlüssel. In den nächsten Abschnitten werde ich versuchen, diese Frage zu beantworten. Ich werde meine Diskussion mit der Offenlegung einleiten, dass ich zwar ein gewisses Fachwissen über Ethernet-LANs und TCP/IP-Netzwerke habe, aber bestenfalls ein Laienverständnis von Kryptographie. Die folgende Diskussion basiert auf Internet-Recherchen, von denen einige widersprüchlich sind und wie bei allen Dingen im Internet sind einige Links zuverlässiger als andere.
Zunächst: Was sind RSA- und DSA-Schlüssel?
DSA oder Digital Signature Algorithm, ist ein Standard der US-Regierung, der von der NSA für digitale Signaturen entwickelt wurde. Er ist vom ElGamal-Signatur-Algorithmus abgeleitet. Die Sicherheit basiert auf der Schwierigkeit, bestimmte Arten von logarithmischen Funktionen zu lösen. Er kann nur für digitale Signaturen verwendet werden.
RSA ist benannt nach den Initialen der Autoren Ron Rivest, Adi Shamir und Leonard Adleman, die den Algorithmus zuerst veröffentlichten. Er basiert auf der Schwierigkeit der Faktorisierung großer Zahlen. Im Gegensatz zu DSA kann RSA zur Verschlüsselung einer ganzen Nachricht verwendet werden.
Meinem Verständnis nach sind das Lösen des logarithmischen und des Faktorisierungsproblems gleich schwer, aber ich habe einige Referenzen gefunden, die besagen, dass das logarithmische Problem schwieriger ist (ich habe auch Referenzen gefunden, die besagen, dass sie gleich schwer sind).
Dinge, die ich nicht für wichtig halte, die Sie aber vielleicht schon gehört haben oder in Zukunft hören werden:
- DSA ist beim Signieren schneller als RSA, aber RSA ist in der Verifizierungsphase schneller, da die Authentifizierung beide Phasen erfordert, spielt der Unterschied keine Rolle.
- Wie ich oben sagte, kann DSA nur zur Authentifizierung verwendet werden, während RSA sowohl zur Authentifizierung als auch zur Verschlüsselung einer Nachricht verwendet werden kann. Allerdings verwendet SSH die Schlüssel nur zur Authentifizierung, so dass auch hier der Unterschied keine Rolle spielt.
- Für die gleiche Schlüssellänge wird DSA eine kleinere Signaturdatei erzeugen. Da jedoch jeder Schlüssel einen Plattenblock benötigt, spielt dies wiederum keine Rolle.
- DSA-Schlüssel waren ursprünglich auf 1024 Bit begrenzt, aber das ist nicht mehr der Fall.
- Ich habe die "National Vulnerability Database" nach "key and DSA" und "key and RSA" durchsucht und bin auf 2 Sicherheitslücken gestoßen, die mit DSA-Schlüsseln zu tun haben, und 5 Sicherheitslücken, die mit RSA-Schlüsseln zu tun haben. Soweit ich das beurteilen kann, wurden alle diese Schwachstellen in den letzten Versionen von OpenSSL/OpenSSH behoben, die jetzt Teil des Internet Security Pack für OpenVOS sind.
Dinge, die für DSA sprechen:
- DSA kann nur mit dem SSH-Protokoll 2 verwendet werden, während RSA mit den Protokollen 1 und 2 verwendet werden kann (siehe "SSH 2″ versus "OpenSSL und OpenSSH Release 2"). Das Protokoll 1 hat einige erhebliche Designfehler und wurde durch die Protokollversion 2 ersetzt. Ich sehe dies als einen Grund, die Verwendung von DSA-Schlüsseln leicht zu bevorzugen, eine Art eingebauter Schutz vor der Verwendung des älteren, veralteten Protokolls.
Dinge, die für RSA sprechen:
- Ein schlechter Zufallszahlengenerator führt zu einem Leck in den DSA-Schlüsselbits (fragen Sie mich nicht wie).
- Die Website openssh.org scheint sich zu dem Thema, was besser ist, bedeckt zu halten, aber die neueren Versionen von ssh-keygen erzeugen einen RSA-Schlüssel, wenn Sie den Typ nicht angeben.
- Es scheint mehr (und neuere) RFCs zu geben, die auf RSA-Schlüssel verweisen als auf DSA-Schlüssel.
Einige Vergleiche (Dateigrößen enthalten Text, der nicht Teil des Schlüssels ist):
DSA-Erstellungszeit | RSA-Erstellungszeit | DSA-Bytes | RSA-Bytes | DSA.pub bytes | RSA.pub bytes | |
1024 Bits | 1 Sekunde | 1 Sekunde | 736 | 951 | 610 | 230 |
2048 Bits | 8 Sekunden | 2 Sekunden | 1264 | 1743 | 1122 | 402 |
4096 Bits | 50 Sekunden | 25 Sekunden | 2304 | 3311 | 2146 | 742 |
Unabhängig davon, welchen Schlüssel Sie verwenden, ist das wirklich Wichtige die Schlüssellänge. In der aktuellen Umgebung würde ich eine Schlüssellänge von 2048 empfehlen. Das mag heute als Overkill erscheinen, aber ich bin mir nicht so sicher, dass es in 5 Jahren noch so aussehen wird.
Bei der Frage, welcher Schlüsseltyp verwendet werden soll, muss ich zu RSA-Schlüsseln tendieren.