Unter den in openSSH verfügbaren ECC-Algorithmen (ECDH, ECDSA, Ed25519, Curve25519), die das beste Sicherheitsniveau bieten, und (idealerweise) warum?
Unter den in openSSH verfügbaren ECC-Algorithmen (ECDH, ECDSA, Ed25519, Curve25519), die das beste Sicherheitsniveau bieten, und (idealerweise) warum?
In SSH werden zwei Algorithmen verwendet: ein Schlüsselaustauschalgorithmus (Diffie-Hellman oder die elliptische Kurvenvariante ECDH) und ein Signaturalgorithmus. Der Schlüsselaustausch liefert den geheimen Schlüssel, der zum Verschlüsseln der Daten für diese Sitzung verwendet wird. Die Signatur dient dazu, dass der Client sicherstellen kann, dass er mit dem richtigen Server kommuniziert (eine andere vom Client berechnete Signatur kann verwendet werden, wenn der Server die schlüsselbasierte Clientauthentifizierung erzwingt).
ECDH verwendet a Kurve ; Die meisten Programme verwenden die Standard-NIST-Kurve P-256. Curve25519 ist eine weitere Kurve, deren "Verkaufsargument" darin besteht, dass sie schneller und nicht stärker als P-256 ist. Der Leistungsunterschied ist menschlich gesehen sehr gering: Wir sprechen von Berechnungen im Wert von weniger als einer Millisekunde auf einem kleinen PC, und dies geschieht nur einmal pro SSH-Sitzung. Sie werden es nicht bemerken. Keine der Kurven kann als "stärker" als die andere bezeichnet werden, weder praktisch (beide sind ziemlich weit im Bereich "kann es nicht brechen") noch akademisch (beide befinden sich auf der "128-Bit-Sicherheitsstufe"). P. >
Selbst wenn ECDH für den Schlüsselaustausch verwendet wird, verwenden die meisten SSH-Server und -Clients DSA- oder RSA-Schlüssel für die Signaturen. Wenn Sie einen Signaturalgorithmus möchten, der auf elliptischen Kurven basiert, dann ist das ECDSA oder Ed25519. Aus technischen Gründen ist dies aufgrund der genauen Definition der Kurvengleichung ECDSA für P-256, Ed25519 für Curve25519. Auch hier ist keiner stärker als der andere, und der Geschwindigkeitsunterschied ist viel zu gering, um von einem menschlichen Benutzer erkannt zu werden. Die meisten Browser (einschließlich Firefox und Chrome) unterstützen ECDH jedoch nicht mehr (dh auch).
Die Verwendung von P-256 sollte derzeit zu einer besseren Interoperabilität führen, da Ed25519 viel neuer und nicht so weit verbreitet ist. Für einen bestimmten Server, den Sie konfigurieren und auf den Sie von Ihren eigenen Computern aus zugreifen möchten, spielt die Interoperabilität jedoch keine große Rolle: Sie steuern sowohl die Client- als auch die Serversoftware.
Die Wahl liegt also im Grunde genommen in der Ästhetik, d. h. ganz bei Ihnen, ohne rationalen Grund. Sicherheitsprobleme werden durch diese Auswahl sowieso nicht verursacht. Die kryptografischen Algorithmen sind der stärkste Teil Ihres gesamten Systems, nicht der schwächste.
Ab der Einführung in Ed25519 gibt es einige Geschwindigkeitsvorteile und einige Sicherheitsvorteile. Einer der interessanteren Sicherheitsvorteile besteht darin, dass es gegen mehrere Seitenkanalangriffe immun ist:
- Keine geheimen Array-Indizes. Die Software liest oder schreibt niemals Daten von geheimen Adressen im RAM. Das Adressmuster ist vollständig vorhersehbar. Die Software ist daher immun gegen Cache-Timing-Angriffe, Hyperthreading-Angriffe und andere Seitenkanalangriffe, die auf dem Verlust von Adressen durch den CPU-Cache beruhen.
- Keine geheimen Verzweigungsbedingungen. Die Software führt niemals bedingte Verzweigungen basierend auf geheimen Daten durch. Das Sprungmuster ist vollständig vorhersehbar. Die Software ist daher immun gegen Seitenkanalangriffe, die auf dem Verlust von Informationen durch die Zweigvorhersageeinheit beruhen.
/blockquote>
Zum Vergleich wurden mehrere reale Cache-Timing-Angriffe auf verschiedene Algorithmen demonstriert. http://en.wikipedia.org/wiki/Timing_attack
Es gibt einen wichtigen praktischen Vorteil von Ed25519 gegenüber (EC) DSA: Die letztere Familie von Algorithmen bricht vollständig ab, wenn sie für Signaturen zusammen mit einem defekten Zufallszahlengenerator verwendet werden. Ein solcher RNG-Fehler ist schon einmal aufgetreten und kann sehr gut wieder auftreten.
Theoretisch können Implementierungen vor diesem speziellen Problem schützen, aber es ist viel schwieriger um zu überprüfen, ob beide Enden eine korrekte Implementierung verwenden, als nur einen Algorithmus zu bevorzugen oder durchzusetzen (abhängig von Ihren Kompatibilitätsanforderungen), der das sichere Verhalten explizit spezifiziert (Ed25519).
Ich hatte den Eindruck, dass Curve25519 aufgrund der Form der Kurve tatsächlich sicherer als die NIST-Kurven ist und daher weniger für verschiedene Seitenkanalangriffe sowie Implementierungsfehler geeignet ist. Siehe: http://safecurves.cr.yp.to
Ed25519 hat den Vorteil, dass Sie denselben Schlüssel für die Unterzeichnung einer Schlüsselvereinbarung verwenden können (normalerweise nicht) mach das). Ich bin mit der Mathematik nicht gut genug vertraut, um zu sagen, ob dies eine Eigenschaft einer Edwards-Kurve ist, obwohl ich weiß, dass sie zur Schlüsselübereinstimmung in das Montgomery-Koordinatensystem (effektiv in Curve25519) konvertiert wird ... Ed25519 ist mehr Als Kurve gibt sie unter anderem auch die deterministische Schlüsselgenerierung an (z. B. Hashing), die berücksichtigt werden sollte. Dies ist eine frustrierende Sache bei DJB-Implementierungen, da diese unterschiedlich behandelt werden müssen, um die Interoperabilität aufrechtzuerhalten.
Etwas, auf das bisher keine Antwort direkt eingegangen ist, ist, dass Ihre Fragen mehrere mehr oder weniger unabhängige Namen miteinander vermischen, als wären dies gleichwertige Alternativen zueinander, was nicht wirklich der Fall ist.
ECDH und ECDSA sind nur Namen kryptografischer Methoden.
ECDH ist eine Schlüsselaustauschmethode, mit der zwei Parteien einen sicheren Schlüssel über einen unsicheren aushandeln können Kommunikationskanal. Es ist eine Variation der DH (Diffie-Hellman) -Schlüsselaustauschmethode. ECDH steht für Elliptic-Curve Diffie-Hellman . ECDH ist jedoch nur eine Methode, dh Sie können es nicht nur mit einer bestimmten elliptischen Kurve verwenden, sondern auch mit vielen verschiedenen elliptischen Kurven.
ECDSA ist ein Signaturalgorithmus, der kann verwendet werden, um ein Datenelement so zu signieren, dass eine Änderung der Daten dazu führen würde, dass die Signaturüberprüfung fehlschlägt. Ein Angreifer kann die Daten nach einer solchen Änderung jedoch nicht korrekt neu signieren. Es ist eine Variation von DSA (Digital Signature Algorithm). ECDSA steht für Elliptic Curve Digital Signature Algorithm . Außerdem beschreibt ECDSA nur eine Methode, die mit unterschiedlichen elliptischen Kurven verwendet werden kann.
Die Sicherheit von ECDH und ECDSA hängt daher von zwei Faktoren ab:
Curve25519 ist der Name einer bestimmten elliptischen Kurve. Andere Kurven heißen Curve448, P-256, P-384 und P-521.
Ed25519 ist der Name einer konkreten Variation von EdDSA . Bei der Durchführung von EdDSA mit SHA-512 und Curve25519 wird diese Variante als Ed25519 bezeichnet. EdDSA ist genau wie ECDSA ein Signaturalgorithmus.
Wenn eine Implementierung nur sagt, dass sie ECDH für den Schlüsselaustausch oder ECDSA zum Signieren von Daten verwendet, ohne eine bestimmte Kurve zu erwähnen, können Sie normalerweise davon ausgehen, dass die NIST-Kurven (P-256, P-384 oder P-) verwendet werden. 512), dennoch sollte die Implementierung die verwendete Kurve eigentlich immer explizit benennen.
Um Ihre Frage zur Sicherheit zu beantworten: ECDH und ECDSA haben sich als konzeptionelle sichere Schlüsselaustausch- und Signaturmethoden erwiesen, daher die Sicherheit von ECDH und ECDSA hängt ziemlich stark von der Tatsache ab, ob jemand einen Weg findet, die elliptische Kryptographie im Allgemeinen zu brechen (wenig wahrscheinlich, aber nicht unmöglich) oder einen Fehler in den verwendeten Kurven zu finden (wahrscheinlicher).
Der Grund, warum manche Leute Curve25519 gegenüber den NIST-Standardkurven bevorzugen, ist die Tatsache, dass das NIST nicht klar dokumentiert hat, warum es diese Kurven zugunsten bestehender Alternativen gewählt hat. Die generische Aussage " Die Kurven wurden angeblich für optimale Sicherheit und Implementierungseffizienz ausgewählt" klingt sehr nach Marketing-Balderdash und wird kryptografische Experten nicht überzeugen.
Das NIST standardisierte 2006 auch eine auf Zufallszahlengeneratoren basierende Kryptographie mit elliptischen Kurven (Dual_EC_DRB), und die New Yorker Zeiten behaupteten (nach Überprüfung der von Edward Snowden durchgesickerten Memos), dass es die NSA war, die das NIST zur Standardisierung beeinflusste dieser spezifische Zufallszahlengenerator. In diesem Generator wurden große Schwachstellen entdeckt, und es wird angenommen, dass es sich um eine absichtliche Hintertür handelt, die von der NSA platziert wurde, um die TLS-Verschlüsselung basierend auf diesem Generator zu unterbrechen. Die ANSI hat die Schwachstelle offenbar entdeckt, als Dual_EC_DRB zum ersten Mal bei ihnen eingereicht wurde. Obwohl sie sich darüber im Klaren waren, wie sie vermieden werden können, haben sie weder den Algorithmus verbessert noch die Schwachstellen veröffentlicht ). Als die Schwäche öffentlich bekannt wurde, wurde der Standard 2014 zurückgezogen.
Mit diesem Hintergrundwissen fragten sich die Leute natürlich, ob die Quelle der mysteriösen NIST-Kurvenparameter tatsächlich auch die NSA ist, da diese Kurven möglicherweise auch verborgene Schwächen aufweisen, die noch nicht öffentlich bekannt sind, die NSA jedoch möglicherweise kennt über sie und somit in der Lage sein, Kryptographie basierend auf diesen Kurven zu brechen. Es gibt keine Beweise für diese Behauptung, nicht einmal einen mutmaßlichen Beweis, aber es scheint sicherlich möglich und realistischer als ein Märchen. Aus diesem Grund haben die Menschen das Vertrauen in diese Kurven verloren und zu Alternativen gewechselt, bei denen es höchst unwahrscheinlich ist, dass diese von einem Geheimdienst auf der ganzen Welt beeinflusst wurden.
Curve25519 wurde vom deutsch-amerikanischen Mathematiker und Kryptologen Daniel J veröffentlicht Bernstein im Jahr 2005, der auch die berühmte Salsa20-Stream-Chiffre und die mittlerweile weit verbreitete ChaCha20-Variante davon entwarf. Er erfand auch die Poly1305-Nachrichtenauthentifizierung. Google entschied, dass ChaCha20 in Kombination mit Poly1305 eine sichere Alternative für TLS darstellt, nachdem RC4 entfernt werden musste, weil der Algorithmus defekt war. Es erfordert viel weniger Rechenleistung als die Verwendung des AES-Blockchiffres (sehr nützlich für mobile Geräte, da es die Batterielaufzeit spart), bietet jedoch vermutlich eine vergleichbare Sicherheit. ChaCha20 / Poly1305 ist in RFC 7905 standardisiert und wird heute in der TLS-Client-Server-Kommunikation häufig verwendet. Wenn Bernstein also ein NSA-Spion wäre, was sehr unwahrscheinlich ist, wären wir alle bereits zum Scheitern verurteilt, da TLS, wie es heute häufig verwendet wird, wahrscheinlich nutzlos wäre, um Daten vor den Augen von Geheimdiensten zu schützen.