Elliptic Curve DSA
Der Elliptic Curve Digital Signature Algorithmus (ECDSA) (deutsch: digitaler Signatur-Algorithmus mit elliptischen Kurven) ist eine Variante des Digital Signature Algorithm (DSA), der Elliptische-Kurven-Kryptographie verwendet.
Inhaltsverzeichnis |
[Bearbeiten] Unterschiede zum normalen DSA-Verfahren
Generell gilt bei der Elliptische-Kurven-Kryptographie die Faustregel, dass die Bitlänge des Erzeugers der verwendeten Untergruppe etwa dem Doppelten des Sicherheitsniveaus t entsprechen sollte. Bei einem Sicherheitsniveau von t = 80 Bit, bei dem ein Angreifer 280 elementare Operationen durchführen muss um den privaten Schlüssel zu finden, hätte ein DSA-Schlüssel eine Länge von circa 1024 Bit, ein ECDSA-Schlüssel aber nur eine Länge von 160 Bit. Eine Signatur ist jedoch bei beiden Verfahren gleich lang: 4t Bit, also 320 Bit für ein Sicherheitsniveau von 80 Bit.
[Bearbeiten] Algorithmus zur Erzeugung einer Signatur
Alice möchte eine signierte Nachricht an Bob schreiben. Zu Beginn muss man sich auf die Kurvenparameter (q,FR,a,b,DomainParameterSeed,G,n,h) einigen. Die ersten Parameter beschreiben die verwendete Kurve: q ist die Ordnung des Körpers, auf dem die Kurve definiert ist; FR ist die Angabe der verwendeteten Basis; a und b sind zwei Körperelemente, die die Gleichung der Kurve beschreiben; DomainParameterSeed ist eine mögliche, zufällig erzeugte Zeichenkette, die vorliegt, wenn die Kurve nachweislich zufällig erzeugt wurde. Weiterhin werden benötigt:
- G, ein fester Erzeuger der n-Torsionsuntergruppe der Kurve (i.e., G = (xG,yG));
- n, die Ordnung des Punktes G, und h, der Cofaktor (gleich der Ordnung der Kurve geteilt durch die Gruppenordnung n);
- Ln, die Bitlänge der Gruppenordnung n;
- eine kryptologische Hashfunktion HASH, wie z.B. SHA-1.
Alice muss im Besitz eines geeigneten Schlüsselpaars sein, das aus einem geheimen Schlüssel dA (einer zufällig gewählten Ganzzahl im Intervall [1,n − 1]) und dem zugehörigen öffentlichen Schlüssel QA = dAG) besteht.
Wenn Alice die Nachricht m signieren möchte, geht sie folgendermaßen vor:
- Berechne e = HASH(m) und definiere z als die Ln höchstwertigen Bits von e.
- Wähle eine zufällige Ganzzahl k von [1,n − 1].
- Berechne r = x1(mod n), wobei (x1,y1) = kG. Wenn r = 0, gehe zum Schritt 2 zurück.
- Berechne s = k − 1(z + rdA)(mod n). Wenn s = 0, gehe zum Schritt 2 zurück.
- Die Signatur ist das Paar (r,s).
Wenn s berechnet wird, sollte der Wert z, der aus HASH(m) stammt, in eine Ganzzahl umgewandelt werden. Dabei ist zu beachten, dass z größer als n sein kann, aber nicht länger.[1]
Es ist entscheidend, dass für verschiedene Signaturen auch verschiedene k-Werte verwendet werden, ansonsten kann die Gleichung im Schritt 4 nach dem geheimen Schlüssel dA aufgelöst werden: Aus zwei Signaturen (r,s) und (r,s'), die mit demselben, unbekannten k verschiedene bekannte Nachrichten m und m' signieren, kann ein Angreifer kann z und z' berechnen. Weil s − s' = k − 1(z − z') entspricht (alle Operationen in diesem Absatz werden mit modulo n durchgeführt), kann dann auch
berechnet werden. Aus k kann der Angreifer wegen s = k − 1(z + rdA) auch den privaten Schlüssel
berechnen. Dieser Fehler in der Verschlüsselung wurde z.B. verwendet, um die Verschlüsselung in der Spielkonsole PlayStation 3 zu berechnen und damit den Kopierschutz auszuhebeln.[2]
[Bearbeiten] Überprüfung einer Signatur
Wenn Bob die Echtheit einer von Alice erzeugten Signatur prüfen möchte, muss er eine Kopie ihres öffentlichen Schlüssels QA besitzen. Wenn er der Quelle von QA nicht vertraut, muss er überprüfen, ob es sich wirklich um einen Schlüssel handelt (das neutrale Element wird mit O bezeichnet):
- Überprüfe, ob QA ungleich O ist und dass die Koordinaten ansonsten valide sind
- Überprüfe, ob QA auf der Kurve liegt
- Überprüfe, ob nQA = O
Danach führt Bob folgende Schritte durch:
- Überprüfe, ob r und s ganze Zahlen sind und im Intervall [1,n − 1] liegen. Wenn dies nicht der Fall ist, ist die Signatur ungültig.
- Berechne e = HASH(m), wobei HASH die gleiche Funktion wie bei der Erzeugung der Signatur ist. Bezeichne mit z die Ln höchstwertigen Bits von e.
- Berechne w = s − 1(mod n).
- Berechne u1 = zw(mod n) und u2 = rw(mod n).
- Berechne (x1,y1) = u1G + u2QA.
- Die Signatur ist gültig, wenn r = x1(mod n), ansonsten ist sie ungültig.
Mit Hilfe von Straus' Algorithmus (auch bekannt als der Shamir's Trick) kann die Summe zweier skalarer Multiplikationen (u1G + u2QA) schneller berechnet werden. [3][4]
[Bearbeiten] Normen und Standards
[Bearbeiten] NIST
Das US-amerikanische National Institute of Standards and Technology empfiehlt im Standard FIPS 186-3 fünfzehn elliptische Kurven.[5]
[Bearbeiten] SECG
Die "Standards for Efficient Cryptography Group" (SECG) ist ein 1998 gegründetes Konsortium zur Förderung des Einsatzes von ECC-Algorithmen.[6]
[Bearbeiten] ANSI
ANSI X9.62-2005 ist die aktuelle Standardisierung des ECDSA.[7]
[Bearbeiten] EC-GDSA
Das Bundesamt für Sicherheit in der Informationstechnik (BSI) hat in Kooperation mit Brainpool und secunet im März 2010 IETF-RFC 5639 herausgebracht. In diesem Vorschlag "Elliptic Curve Cryptography (ECC) Brainpool Standard - Curves and Curve Generation" ist besonders die unterschiedliche Wahl der Bitlänge 512 zu erwähnen, ein Gegensatz zur von vielen anderen Institutionen (z.b. NIST, SECG) präferierten Bitlänge 521.
[Bearbeiten] EC-KCDSA
Kurven welche der koreanische Staat als Standard definiert hat.[8]
[Bearbeiten] Implementierungen
[Bearbeiten] Open Source
- OpenSSH: Seit Version 5.7 (24. Januar 2011) ist ECDSA und der Schlüsselaustausch via Elliptic Curve Diffie-Hellman (ECDH) aus dem RFC 5656 implementiert. [9][10]
- OpenSSL: Seit Version 0.9.8 (5. Juli 2005) implementiert.[11]
[Bearbeiten] Einzelnachweise
- ↑ FIPS 186-3, pp. 19 and 26
- ↑ http://events.ccc.de/congress/2010/Fahrplan/attachments/1780_27c3_console_hacking_2010.pdf, page 123–128
- ↑ http://www.lirmm.fr/~imbert/talks/laurent_Asilomar_08.pdf Das Doppel-Basen-Zahlen-System in der Elliptischen Kurven-Kryptographie (engl.)
- ↑ http://caccioppoli.mac.rub.de/website/papers/multiexp.pdf On the complexity of certain multi-exponentiation techniques in cryptography
- ↑ NIST: Digital Signature Standard (DSS). (http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf).
- ↑ http://www.secg.org/index.php?action=secg,about
- ↑ ANSI X9.62-2005, Public Key Cryptography for the Financial Services Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA)
- ↑ KCDSA
- ↑ OpenSSH 5.7 has just been released. OpenBSD, abgerufen am 19. August 2011.
- ↑ OpenSSH 5.7: Schneller durch die Kurve. Heise.de, 25. Januar 2011, abgerufen am 19. August 2011.
- ↑ http://www.openssl.org/news/changelog.html
[Bearbeiten] Literatur
- Accredited Standards Committee X9, American National Standard X9.62-2005, Public Key Cryptography for the Financial Services Industry, The Elliptic Curve Digital Signature Algorithm (ECDSA), November 16, 2005.
- Certicom Research, Standards for efficient cryptography, SEC 1: Elliptic Curve Cryptography, Version 2.0, May 21, 2009.
- López, J. and Dahab, R. An Overview of Elliptic Curve Cryptography, Technical Report IC-00-10, State University of Campinas, 2000.
- Daniel J. Bernstein, Pippenger's exponentiation algorithm, 2002.
- Daniel R. L. Brown, Generic Groups, Collision Resistance, and ECDSA, Designs, Codes and Cryptography, 35, 119-152, 2005. ePrint version
- Ian F. Blake, Gadiel Seroussi, and Nigel P. Smart, editors, Advances in Elliptic Curve Cryptography, London Mathematical Society Lecture Note Series 317, Cambridge University Press, 2005.
- Darrel Hankerson, Alfred Menezes and Scott Vanstone, Guide to Elliptic Curve Cryptography, Springer, Springer, 2004.