Wenn ich erkläre, wie man das Public-Key-Authentifizierungssystem von SSH einrichtet, werde ich gelegentlich gefragt, was besser ist: RSA- oder DSA-Schlüssel. In den nächsten Absätzen werde ich versuchen, diese Frage zu beantworten. Zu Beginn möchte ich darauf hinweisen, dass ich zwar über gewisse Fachkenntnisse in den Bereichen Ethernet-LANs und TCP/IP-Netzwerke verfüge, meine Kenntnisse der Kryptografie jedoch bestenfalls auf Amateurniveau liegen. Die folgenden Ausführungen basieren auf Recherchen im Internet, die teilweise widersprüchlich sind, und wie bei allem im Internet sind einige Links zuverlässiger als andere.
Zunächst einmal: Was sind RSA- und DSA-Schlüssel?
DSA (Digital Signature Algorithm) ist ein von der NSA entwickelter Standard der US-Regierung für digitale Signaturen. Er basiert auf dem ElGamal-Signaturalgorithmus. Die Sicherheit beruht auf der Schwierigkeit, bestimmte Arten von logarithmischen Funktionen zu lösen. Er kann ausschließlich für digitale Signaturen verwendet werden.
Der Name RSA leitet sich von den Initialen der Autoren Ron Rivest, Adi Shamir und Leonard Adleman ab, die den Algorithmus erstmals veröffentlichten. Er basiert auf der Schwierigkeit, große Zahlen in Primfaktoren zu zerlegen. Im Gegensatz zu DSA kann RSA zur Verschlüsselung einer gesamten Nachricht verwendet werden.
Meiner Meinung nach sind die Lösung des Logarithmusproblems und die Faktorisierung gleichermaßen schwierig, aber ich habe einige Quellen gefunden, die besagen, dass das Logarithmusproblem schwieriger ist (ich habe auch Quellen gefunden, die besagen, dass beide gleichermaßen schwierig sind).
Dinge, die meiner Meinung nach keine Rolle spielen, die du aber vielleicht schon gehört hast oder in Zukunft hören wirst:
- DSA ist beim Signieren schneller als RSA, aber RSA ist in der Verifizierungsphase schneller; da die Authentifizierung beide Phasen erfordert, spielt dieser Unterschied keine Rolle.
- Wie ich oben bereits erwähnt habe, kann DSA nur zur Authentifizierung verwendet werden, während RSA sowohl zur Authentifizierung als auch zur Verschlüsselung einer Nachricht genutzt werden kann. SSH verwendet die Schlüssel jedoch nur zur Authentifizierung, sodass dieser Unterschied wiederum keine Rolle spielt.
- Bei gleicher Schlüssellänge erzeugt DSA eine kleinere Signaturdatei. Da jedoch jeder Schlüssel einen Festplattenblock belegt, spielt dies wiederum keine Rolle.
- DSA-Schlüssel waren ursprünglich auf 1024 Bit begrenzt, doch das ist heute nicht mehr der Fall.
- Ich habe in der „National Vulnerability Database“ nach „Schlüssel und DSA“ sowie „Schlüssel und RSA“ gesucht und dabei 2 Sicherheitslücken im Zusammenhang mit DSA-Schlüsseln und 5 Sicherheitslücken im Zusammenhang mit RSA-Schlüsseln gefunden. Soweit ich das beurteilen kann, wurden alle diese Sicherheitslücken in den neuesten Versionen von OpenSSL/OpenSSH behoben, die nun Teil des Internet Security Pack für OpenVOS sind.
Argumente für die DSA:
- DSA kann nur mit dem SSH-Protokoll 2 verwendet werden, während RSA mit den Protokollen 1 und 2 genutzt werden kann (siehe „SSH 2“ im Vergleich zu „OpenSSL und OpenSSH Release 2“). Protokoll 1 weist einige erhebliche Konstruktionsmängel auf und wurde durch Protokollversion 2 ersetzt. Ich sehe darin einen Grund, der Verwendung von DSA-Schlüsseln leicht den Vorzug zu geben – eine Art eingebauter Schutz vor der Nutzung des älteren, veralteten Protokolls.
Argumente für RSA:
- Ein schlechter Zufallszahlengenerator gibt DSA-Schlüsselbits preis (frag mich nicht, wie).
- Die Website openssh.org scheint sich zu diesem Thema nicht zu äußern, aber die neueren Versionen von ssh-keygen erstellen einen RSA-Schlüssel, wenn man keinen Typ angibt.
- Es scheint mehr (und neuere) RFCs zu geben, die sich auf RSA-Schlüssel beziehen, als auf DSA-Schlüssel.
Einige Vergleiche (die Dateigrößen beinhalten Text, der nicht Teil des Schlüssels ist):
| Zeitpunkt der DSA-Erstellung | Zeitpunkt der RSA-Erstellung | DSA-Bytes | RSA-Bytes | DSA.pub-Bytes | RSA.pub-Bytes | |
| 1024 Bit | 1 Sekunde | 1 Sekunde | 736 | 951 | 610 | 230 |
| 2048 Bit | 8 Sekunden | 2 Sekunden | 1264 | 1743 | 1122 | 402 |
| 4096 Bit | 50 Sekunden | 25 Sekunden | 2304 | 3311 | 2146 | 742 |
Unabhängig davon, welchen Schlüssel Sie verwenden, kommt es vor allem auf die Schlüssellänge an. Angesichts der aktuellen Lage würde ich eine Schlüssellänge von 2048 empfehlen. Das mag heute vielleicht übertrieben erscheinen, aber ich bin mir nicht so sicher, ob das in fünf Jahren noch genauso aussehen wird.
Was die Wahl des Schlüsseltyps angeht, tendiere ich eher zu RSA-Schlüsseln.
