Der beste öffentliche und private Keygen-Algorithmus – und warum
Ich habe diesen Beitrag gesponsert.
Was ist schlimmer, als private Schlüssel unbeaufsichtigt liegen zu lassen? Mit öffentlichen Schlüsseln, die brutal erzwungen werden können.
Das “secure” in “Secure Shell” ergibt sich aus der Kombination von Hashing, symmetrischer Verschlüsselung und asymmetrischer Verschlüsselung. Zusammen verwendet SSH kryptografische Grundelemente, um Clients und Server sicher zu verbinden. In den 25 Jahren seit seiner Gründung erforderten Rechenleistung und -geschwindigkeit nach dem Mooreschen Gesetz immer kompliziertere Low-Level-Algorithmen.
Ab 2020 sind RSA, DSA, ECDSA und EdDSA die am weitesten verbreiteten asymmetrischen Kryptoalgorithmen in der PKI-Welt. Also, welches ist das Beste?
Also was soll ich verwenden?
Die Wahl des richtigen Algorithmus hängt von einigen Kriterien ab:
- Implementierung: Können die Experten damit umgehen oder muss es gerollt werden?
- Kompatibilität: Gibt es SSH-Clients, die eine Methode nicht unterstützen?
- Leistung: Wie lange dauert es, einen ausreichend sicheren Schlüssel zu generieren?
- Sicherheit: Kann der öffentliche Schlüssel vom privaten Schlüssel abgeleitet werden? (Die Verwendung von Quantencomputern zum Brechen der Verschlüsselung wird in diesem Artikel nicht erörtert.)
RSA
Implementierung | RSA-Bibliotheken können für alle wichtigen Sprachen gefunden werden, einschließlich ausführlicher Bibliotheken
(JS, Python, Go, Rust, C). |
Kompatibilität | Die Verwendung von SHA-1 (OpenSSH) oder öffentlichen Schlüsseln unter 2048 Bit wird möglicherweise nicht unterstützt. |
Leistung | Größere Schlüssel benötigen mehr Zeit zum Generieren. |
Sicherheit | Spezielle Algorithmen wie Quadratisches Sieb und Allgemeines Zahlenfeldsieb existieren, um ganze Zahlen mit spezifischen Qualitäten zu faktorisieren. |
Die Zeit war RSAs größter Verbündeter und größter Feind. RSA wurde erstmals 1977 veröffentlicht und bietet die breiteste Unterstützung für alle SSH-Clients und -Sprachen und hat sich als zuverlässige Methode zur Schlüsselgenerierung bewährt. In der Folge unterliegt es seit Jahrzehnten auch dem Mooreschen Gesetz, und die Länge der Schlüsselbits hat zugenommen. Nach NIST-Standards erfordert das Erreichen von 128-Bit-Sicherheit einen Schlüssel mit einer Länge von 3072 Bit, während andere Algorithmen kleinere Schlüssel verwenden. Bit-Sicherheit misst die Anzahl der Versuche, die erforderlich sind, um einen Schlüssel Brute-Force zu erzwingen. 128-Bit-Sicherheit bedeutet 2128 Versuche zu brechen.
DSA
Implementierung | DSA wurde 1994 von FIPS-184 übernommen. Es ist in großen Kryptobibliotheken reichlich vertreten, ähnlich wie RSA. |
Kompatibilität | Während DSA PuTTY-basierte Clients unterstützt, deaktiviert OpenSSH 7.0 DSA standardmäßig. |
Leistung | Signifikante Verbesserung der Schlüsselgenerierungszeiten, um vergleichbare Sicherheitsstärken zu erreichen, obwohl die empfohlene Bitlänge der von RSA entspricht. |
Sicherheit | DSA erfordert die Verwendung eines zufällig generierten unvorhersehbaren und geheimen Werts, der, wenn er entdeckt wird, den privaten Schlüssel preisgeben kann. |
Was DSA von RSA unterscheidet, ist, dass DSA einen anderen Algorithmus verwendet. Es löst ein völlig anderes Problem, bekannt als das diskrete Logarithmus-Problem, mit einem anderen Satz von Gleichungen, Elementen und Schritten.
Dieser Algorithmus beinhaltet die Verwendung einer zufällig generierten Nummer m, die beim Signieren einer Nachricht zusammen mit einem privaten Schlüssel k verwendet wird. Dies ist ein eindeutiger Wert, der in vielen kryptografischen Protokollen enthalten ist. Die zusätzlichen Bedingungen der Unvorhersehbarkeit und Geheimhaltung machen die Nonce jedoch eher einem Schlüssel und daher äußerst wichtig.
Es ist nicht nur schwierig, eine echte Zufälligkeit innerhalb einer Maschine sicherzustellen, sondern eine unsachgemäße Implementierung kann auch die Verschlüsselung beeinträchtigen. Zum Beispiel:
- Die Java SecureRandom-Klasse von Android war dafür bekannt, kollidierende R-Werte zu erstellen. Mit anderen Worten, die Klasse hat einige zufällig generierte Zahlen wiederverwendet. Dies hat eine Reihe verschiedener Android-basierter Bitcoin-Wallets dem Diebstahl ihrer privaten Schlüssel ausgesetzt. Die Anforderungen des Nonce m bedeuten, dass zwei beliebige Instanzen mit demselben Nonce-Wert rückentwickelt werden können und den privaten Schlüssel zum Signieren von Transaktionen offenlegen.
- fail0verflow ging noch einen Schritt weiter und entdeckte den privaten Schlüssel, mit dem Firmware-Updates für die Sony Playstation 3 signiert wurden. Mit anderen Worten, Programmierer könnten ihren eigenen Code schreiben, ihn mit dem offenbarten privaten Schlüssel signieren und auf der PS3 ausführen. Wie sich herausstellte, verwendete Sony die gleiche Zufallszahl, um jede Nachricht zu signieren.
ECDSA und EdDSA
Die beiden obigen Beispiele sind nicht ganz aufrichtig. Sowohl Sony als auch das Bitcoin-Protokoll verwenden ECDSA, nicht DSA. ECDSA ist eine elliptische Kurvenimplementierung von DSA. Wo RSA und DSA Schlüssellängen von 3072 Bit benötigen, um 128 Bit Sicherheit zu bieten, kann ECDSA dasselbe mit nur 256-Bit-Schlüsseln erreichen. ECDSA basiert jedoch auf der gleichen Zufälligkeit wie DSA, sodass der einzige Gewinn Geschwindigkeit und Länge und nicht Sicherheit sind.
Als Reaktion auf die gewünschten Geschwindigkeiten elliptischer Kurven und die unerwünschten Sicherheitsrisiken hat eine andere Kurvenklasse an Bekanntheit gewonnen. EdDSA löst das gleiche diskrete Protokollproblem wie DSA / ECDSA, verwendet jedoch eine andere Familie elliptischer Kurven, die als Edwards-Kurve bekannt ist (EdDSA verwendet eine verdrillte Edwards-Kurve). Während es leichte Vorteile in der Geschwindigkeit gegenüber ECDSA bietet, kommt seine Popularität von einer Verbesserung der Sicherheit. Anstatt sich auf eine Zufallszahl für den Nonce-Wert zu verlassen, generiert EdDSA eine Nonce deterministisch als Hash, wodurch sie kollisionssicher wird.
Die Verwendung von elliptischen Kurven garantiert nicht automatisch ein gewisses Maß an Sicherheit. Nicht alle Kurven sind gleich. Nur wenige Kurven haben es über strenge Tests hinaus geschafft. Glücklicherweise hat sich die PKI-Branche langsam für Curve25519 entschieden – insbesondere für EdDSA. Zusammen ergibt das den Public-Key-Signaturalgorithmus Ed25519.
Implementierung | EdDSA ist ziemlich neu. Crypto ++ und cryptlib unterstützen derzeit EdDSA nicht. |
Kompatibilität | Ed25519 ist mit neueren Clients kompatibel und hat die größte Akzeptanz unter den Edward-Kurven erfahren. obwohl NIST auch Ed448 in ihrem jüngsten Entwurf von SP 800-186 vorgeschlagen hat. |
Leistung | Ed25519 ist der leistungsstärkste Algorithmus für alle Metriken. Wie bei ECDSA sind öffentliche Schlüssel doppelt so lang wie die gewünschte Bitsicherheit. |
Sicherheit | EdDSA bietet die höchste Sicherheitsstufe im Vergleich zur Schlüssellänge. Es verbessert auch die Unsicherheiten in ECDSA gefunden. |
Grundsätzlich gilt, RSA oder EdDSA
Wenn es darauf ankommt, ist die Wahl zwischen RSA 2048/4096 und Ed25519 und der Kompromiss zwischen Leistung und Kompatibilität. RSA wird von SSH-Clients universell unterstützt, während EdDSA viel schneller arbeitet und das gleiche Sicherheitsniveau mit deutlich kleineren Schlüsseln bietet. Peter Ruppel bringt die Antwort auf den Punkt:
“Die kurze Antwort darauf lautet: Solange die Schlüsselstärke für die absehbare Zukunft gut genug ist, spielt es keine Rolle. Denn hier betrachten wir eine Signatur zur Authentifizierung innerhalb einer SSH-Sitzung. Die kryptografische Stärke der Signatur muss nur den aktuellen State-of-the-Art-Angriffen standhalten.” – Ed25519 für SSH
Verwenden Sie einfach keine ECDSA / DSA!
Feature Bild über .
Der neue Stack ist eine hundertprozentige Tochtergesellschaft von Insight Partners, einem Investor der folgenden in diesem Artikel genannten Unternehmen: Bit.
Leave a Reply