Einführung in die asymmetrische Kryptographie
Die asymmetrische Kryptographie oder Public-Key-Kryptographie ist der Grundstein der modernen digitalen Sicherheit. Im Gegensatz zur symmetrischen Verschlüsselung, bei der ein einziger Schlüssel gemeinsam genutzt wird, verwenden asymmetrische Systeme ein Schlüsselpaar: einen öffentlichen Schlüssel zur Verschlüsselung oder Signaturprüfung und einen privaten Schlüssel zur Entschlüsselung oder Signaturerstellung.
Dieser Leitfaden untersucht die Entwicklung von traditionellem RSA zu moderner elliptischer Kurvenkryptographie (ECC) und deckt Standards wie Ed25519, X25519 sowie fortgeschrittene Verfahren wie RSA-PSS und HKDF ab.
1. RSA-Varianten: OAEP, PSS und PKCS1-v1.5
RSA (Rivest–Shamir–Adleman) ist seit Jahrzehnten der Industriestandard. Die Art und Weise, wie RSA implementiert wird, ist jedoch für die Sicherheit von entscheidender Bedeutung.
RSA-PKCS1-v1.5 (Der Legacy-Standard)
Das älteste Padding-Verfahren. Obwohl es immer noch weit verbreitet ist, ist es anfällig für Padding-Oracle-Angriffe (wie den Bleichenbacher-Angriff). Für neue Anwendungen wird im Allgemeinen davon abgeraten.
RSA-OAEP (Optimal Asymmetric Encryption Padding)
Wird für die Verschlüsselung verwendet. OAEP fügt ein auf einem Feistel-Netzwerk basierendes Padding hinzu, das „Plaintext Awareness“ bietet. Es verhindert, dass ein Angreifer den Geheimtext ändern und Informationen über den Klartext gewinnen kann.
- Empfehlung: Verwenden Sie RSA-OAEP anstelle von PKCS1-v1.5 zur Verschlüsselung von Daten.
RSA-PSS (Probabilistic Signature Scheme)
Wird für digitale Signaturen verwendet. Im Gegensatz zu älteren Verfahren ist PSS im Random-Oracle-Modell beweisbar sicher. Es fügt dem Signaturprozess Salt hinzu, was ihn probabilistisch statt deterministisch macht.
- Empfehlung: Moderne Protokolle wie TLS 1.3 erfordern oder bevorzugen RSA-PSS gegenüber älteren PKCS1-v1.5-Signaturen.
2. Deep Dive in die elliptische Kurvenkryptographie (ECC)
ECC bietet das gleiche Sicherheitsniveau wie RSA, jedoch mit viel kleineren Schlüsseln. Beispielsweise entspricht ein 256-Bit-ECC-Schlüssel in etwa einem 3072-Bit-RSA-Schlüssel.
ECDSA (Elliptic Curve Digital Signature Algorithm)
Das Gegenstück zum Digital Signature Algorithm (DSA) auf Basis elliptischer Kurven.
- ECDSA-P256: Die am weitesten verbreitete NIST-Kurve. Sie wird breit unterstützt, aber es gibt Bedenken hinsichtlich möglicher „Backdoors“ in den NIST-Parametern.
- ECDSA-P384: Wird für höhere Sicherheitsstufen (Top Secret) verwendet.
EdDSA und Twisted Edwards Curves
Die moderne Kryptographie bewegt sich in Richtung EdDSA (Edwards-curve Digital Signature Algorithm).
- Ed25519: Basierend auf der Curve25519. Es ist auf hohe Geschwindigkeit und hohe Sicherheit ausgelegt. Es ist deterministisch (kein Zufallszahlengenerator während der Signierung erforderlich), was eine häufige Fehlerquelle bei ECDSA eliminiert.
- Ed448: Eine „Goldilocks“-Kurve, die eine noch höhere Sicherheit (224-Bit-Sicherheitsniveau) als Ed25519 bietet.
3. Schlüsselaustauschprotokolle
Wie etablieren zwei Parteien ein gemeinsames Geheimnis über einen unsicheren Kanal?
Diffie-Hellman (DH)
Das ursprüngliche Schlüsselaustauschprotokoll. Heute wird es meist durch seine Version auf Basis elliptischer Kurven ersetzt.
ECDH (Elliptic Curve Diffie-Hellman)
- ECDH-P256 / P384: Verwendung von NIST-Kurven zur Etablierung von Geheimnissen.
- X25519: Der moderne Goldstandard für den Schlüsselaustausch. Es ist eine ECDH-Funktion unter Verwendung der Curve25519. Es ist schneller, sicherer und einfacher korrekt zu implementieren als NIST-Kurven.
- X448: Das höher gesicherte Gegenstück zu X25519.
4. Schlüsselableitung: HKDF
Sobald ein gemeinsames Geheimnis etabliert ist (z. B. über X25519), sollte es nicht direkt als Verschlüsselungsschlüssel verwendet werden. Stattdessen verwenden wir eine Schlüsselableitungsfunktion (Key Derivation Function, KDF).
HKDF-SHA256 (HMAC-based Extract-and-Expand KDF)
HKDF folgt einem zweistufigen Prozess:
- Extract: Nimmt das „rohe“ gemeinsame Geheimnis und ein optionales Salt, um einen „pseudozufälligen Schlüssel“ (PRK) zu erzeugen.
- Expand: Wandelt diesen PRK in mehrere Schlüssel der gewünschten Längen um (z. B. einen AES-Schlüssel und einen IV).
Die Verwendung von HKDF-SHA256 stellt sicher, dass die endgültigen Schlüssel kryptographisch stark und unabhängig sind.
5. Vergleichstabelle
| Algorithmus | Schlüsselgröße (Sicherheit) | Performance | Standard | Anwendungsfall |
|---|---|---|---|---|
| RSA 2048 | 112-Bit | Langsam | Legacy | Kompatibilität |
| RSA 3072 | 128-Bit | Sehr langsam | Stark | Legacy/Unternehmen |
| ECDSA-P256 | 128-Bit | Schnell | NIST | Allgemein Mobil/Web |
| Ed25519 | 128-Bit | Sehr schnell | Modern | Empfohlen für Signaturen |
| X25519 | 128-Bit | Sehr schnell | Modern | Empfohlen für Schlüsselaustausch |
| Ed448 | 224-Bit | Mittel | Hochsicher | Ultra-sichere Systeme |
6. Sicherheitsempfehlungen: Warum Ed25519?
Warum wenden sich Experten von RSA und NIST-Kurven ab und Ed25519 zu?
- Resistenz gegen Seitenkanalangriffe: Ed25519-Implementierungen sind oft bauartbedingt in konstanter Zeit (constant-time), was vor Timing-Angriffen schützt.
- Kein „Pech“ mit dem Zufall: ECDSA erfordert für jede Signatur eine neue, hochwertige Zufallszahl. Wenn dieser Zufallszahlengenerator (RNG) auch nur geringfügig versagt, kann Ihr privater Schlüssel wiederhergestellt werden. Ed25519 ist deterministisch und vermeidet dies vollständig.
- Performance: Ed25519 ist beim Signieren und Verifizieren deutlich schneller, was für Server mit hohem Datenverkehr entscheidend ist.
- Kleine Schlüssel: 32-Byte-Schlüssel sind in QR-Codes, Datenbankindizes und Headern viel einfacher zu handhaben als 512-Byte-RSA-Schlüssel.
7. Code-Beispiele
Node.js: Ed25519-Signierung
Verwendung des integrierten crypto-Moduls:
const crypto = require('crypto');
// Ed25519-Schlüsselpaar generieren
const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519');
const message = Buffer.from('Hallo, Sicherheit!');
// Signieren
const signature = crypto.sign(null, message, privateKey);
// Verifizieren
const isVerified = crypto.verify(null, message, publicKey, signature);
console.log('Signatur verifiziert:', isVerified);
Python: X25519-Schlüsselaustausch
Verwendung der cryptography-Bibliothek:
from cryptography.hazmat.primitives.asymmetric import x25519
# Alices Seite
alice_private = x25519.X25519PrivateKey.generate()
alice_public = alice_private.public_key()
# Bobs Seite
bob_private = x25519.X25519PrivateKey.generate()
bob_public = bob_private.public_key()
# Berechnung des gemeinsamen Geheimnisses
alice_shared = alice_private.exchange(bob_public)
bob_shared = bob_private.exchange(alice_public)
assert alice_shared == bob_shared
print("Gemeinsames Geheimnis etabliert!")
8. FAQ: Häufige Fehler
Q: Kann ich denselben Schlüssel für RSA-OAEP und RSA-PSS verwenden?
A: Technisch möglich, aber dringend davon abgeraten. Die Verwendung desselben Schlüssels für verschiedene Zwecke (Verschlüsselung und Signierung) kann zu protokollübergreifenden Angriffen führen. Verwenden Sie immer separate Schlüssel für separate Rollen.
Q: Ist Ed25519 quantencomputerresistent?
A: Nein. Wie RSA und alle aktuellen ECC-Verfahren ist Ed25519 anfällig für groß angelegte Quantencomputer, die den Shor-Algorithmus verwenden. Für Quantenresistenz sollten Sie sich mit Post-Quanten-Kryptographie (PQC) wie ML-KEM oder ML-DSA befassen.
Q: Warum SHA-256 mit HKDF verwenden?
A: SHA-256 bietet eine hohe Sicherheitsmarge und wird weltweit unterstützt. Während SHA-3 oder BLAKE2 exzellent sind, bleibt SHA-256 der Industriestandard für die HKDF-Implementierung.
Zusammenfassung
Der Übergang von RSA zur elliptischen Kurvenkryptographie stellt einen großen Sprung in Bezug auf Sicherheit und Effizienz dar. Für moderne Anwendungen gilt:
- Verwenden Sie Ed25519 für digitale Signaturen.
- Verwenden Sie X25519 für den Schlüsselaustausch.
- Verwenden Sie HKDF-SHA256 für die Schlüsselableitung.
- Verwenden Sie RSA-OAEP/PSS nur dann, wenn Abwärtskompatibilität zwingend erforderlich ist.
Durch die Übernahme dieser modernen Standards stellen Sie sicher, dass Ihre Anwendung schnell und sicher ist und den aktuellen kryptographischen Best Practices entspricht.