Überblick
Elliptic Curve Cryptography (ECC) ist eine Form der asymmetrischen Kryptographie, die mit deutlich kürzeren Schlüsseln dieselbe Sicherheit bietet wie ältere Verfahren (z. B. RSA). Ein 256-Bit-ECC-Schlüssel entspricht in seiner Sicherheit einem 3072-Bit-RSA-Schlüssel. Das macht ECC ideal für ein System wie Bitcoin, in dem Effizienz und kompakte Daten entscheidend sind.
Bitcoin verwendet eine spezifische elliptische Kurve namens secp256k1. Sie definiert die mathematischen Regeln, nach denen Schlüsselpaare erzeugt und Signaturen erstellt werden.
Was sind elliptische Kurven?
Eine elliptische Kurve ist eine mathematische Kurve, die durch die Gleichung y² = x³ + ax + b beschrieben wird. In der Kryptographie arbeitet man nicht mit reellen Zahlen, sondern mit ganzen Zahlen in einem endlichen Körper (modular arithmetic) – die Punkte bilden eine endliche Menge.
Das Besondere an elliptischen Kurven ist die Punktaddition: Man kann zwei Punkte auf der Kurve „addieren" und erhält einen dritten Punkt, der ebenfalls auf der Kurve liegt. Geometrisch entspricht das dem Ziehen einer Geraden durch zwei Punkte, dem Finden des dritten Schnittpunkts mit der Kurve und dessen Spiegelung an der x-Achse.
Addiert man einen Punkt zu sich selbst, spricht man von Punktverdopplung. Diese Operationen bilden die Grundlage für die skalare Multiplikation – den Kern der Bitcoin-Kryptographie.
secp256k1
Die Kurve secp256k1 wird durch die vereinfachte Gleichung y² = x³ + 7 definiert (also a = 0, b = 7). Der Name steht für: SEC (Standards for Efficient Cryptography), p (prime field), 256 (256-Bit-Primzahl), k (Koblitz-Kurve), 1 (erste Kurve dieser Art).
Die Kurve operiert über einem endlichen Körper mit der Primzahl p = 2256 − 232 − 977. Zusätzlich ist ein Generatorpunkt G definiert – ein fester Punkt auf der Kurve, der als Ausgangspunkt für alle Berechnungen dient. Die Ordnung n (die Anzahl möglicher Punkte) ist ebenfalls eine 256-Bit-Zahl.
Warum secp256k1? Satoshi wählte diese Kurve, weil ihre spezielle Struktur (a = 0) besonders effiziente Berechnungen ermöglicht. Im Gegensatz zu den von NIST empfohlenen Kurven hat secp256k1 transparente, nachvollziehbare Parameter – es gibt keinen Verdacht auf eingebaute Hintertüren.
Vom Private Key zum Public Key
Der Private Key ist eine zufällige Zahl k zwischen 1 und n−1 (wobei n die Ordnung der Kurve ist). Der Public Key wird berechnet als:
K = k × G
Dabei ist „×" die skalare Multiplikation: Der Generatorpunkt G wird k-mal mit sich selbst addiert. Das klingt rechenintensiv, ist aber dank des „Double-and-Add"-Algorithmus effizient lösbar – selbst für 256-Bit-Zahlen braucht es nur etwa 256 Additionen und Verdopplungen.
Die entscheidende Eigenschaft: Die Berechnung von K aus k und G ist einfach (Millisekunden). Aber die Umkehrung – k aus K und G zu bestimmen – ist das Diskrete-Logarithmus-Problem auf elliptischen Kurven (ECDLP). Für secp256k1 gibt es keinen bekannten effizienten Algorithmus. Selbst der schnellste bekannte Angriff (Pollard's Rho) bräuchte ungefähr 2128 Operationen – weit jenseits jeder realistischen Rechenkapazität.
Von der Kurve zur Adresse
Der Public Key ist ein Punkt auf der Kurve, bestehend aus einer x- und einer y-Koordinate (jeweils 256 Bit). In unkomprimierter Form ist er 65 Bytes gross (Präfix 04 + x + y). Die komprimierte Form speichert nur die x-Koordinate plus ein Byte für die Parität von y – insgesamt 33 Bytes.
Aus dem Public Key wird die Bitcoin-Adresse in mehreren Schritten abgeleitet:
- SHA-256-Hash des Public Keys berechnen
- RIPEMD-160-Hash des Ergebnisses berechnen (ergibt den 20-Byte „Public Key Hash")
- Versions-Byte voranstellen und Prüfsumme anhängen
- Base58Check-Kodierung (Legacy) oder Bech32-Kodierung (SegWit/Taproot)
Das doppelte Hashing fügt eine zusätzliche Sicherheitsschicht hinzu: Selbst wenn ECDSA gebrochen würde, müssten Angreifer zuerst den Hash umkehren, um an den Public Key zu gelangen.
ECDSA-Signaturverfahren
Das Signieren einer Bitcoin-Transaktion nutzt den Elliptic Curve Digital Signature Algorithm (ECDSA). Der Ablauf:
- Ein zufälliger k-Wert (Nonce) wird erzeugt – für jede Signatur ein neuer.
- Der Punkt R = k × G wird berechnet. Die x-Koordinate von R ergibt den Signaturwert r.
- Mit r, dem Hash der Transaktion (z) und dem Private Key (d) wird der zweite Signaturwert berechnet: s = k⁻¹ × (z + r × d) mod n.
- Die Signatur (r, s) wird an die Transaktion angehängt.
Kritisch: Der k-Wert darf niemals wiederverwendet werden. Wird derselbe k-Wert für zwei verschiedene Signaturen mit demselben Private Key verwendet, lässt sich der Private Key trivial berechnen. Moderne Wallets verwenden RFC 6979 (deterministisches k), um dieses Risiko auszuschliessen.
Sicherheit
Die Sicherheit von secp256k1 beruht auf der Schwierigkeit des Discrete Logarithm Problem (DLP) auf elliptischen Kurven. Der beste bekannte klassische Angriff (Pollard's Rho) hat eine Komplexität von O(√n) – bei einer 256-Bit-Kurve sind das circa 2128 Operationen. Zum Vergleich: Die geschätzte Anzahl der Atome im beobachtbaren Universum liegt bei etwa 2266.
Ein theoretisches Risiko stellen Quantencomputer dar. Shor's Algorithmus könnte das DLP effizient lösen. Allerdings bräuchte man dafür einen fehlerkorrigierten Quantencomputer mit mehreren Millionen Qubits – die aktuelle Technologie liegt bei wenigen Tausend verrauschten Qubits. Mehr dazu im Artikel Bitcoin und Quantencomputer.
Quellen
- SEC 2: Recommended Elliptic Curve Domain Parameters (secg.org)
- Bitcoin Wiki – secp256k1
- Andreas M. Antonopoulos – «Mastering Bitcoin», Kapitel 4: Keys, Addresses