Ich untersuche gerade die Verwendung von curve25519 zum Signieren. Originalverteilung und eine C-Implementierung (und eine zweite C-Implementierung ).
Bernstein schlägt vor, ECDSA dafür zu benutzen, aber ich konnte keinen Code finden.
ECDSA wird von ANSI X9.62 spezifiziert. Dieser Standard definiert die Art von Kurven, auf denen ECDSA definiert ist, einschließlich Details, Kurvengleichungen, Schlüsselrepräsentationen und so weiter. Diese stimmen nicht mit Curve25519 überein: Ein Teil der Optimierungen, die Curve25519 schneller machen als Standardkurven derselben Größe, basieren auf der speziellen Kurvengleichung, die nicht in den X9.62-Formalismus eingeht. Entsprechend kann es keine Implementierung von ECDSA geben, die beide ANSI X9.62 entspricht und Curve25519 verwendet. In der Praxis kenne ich keine Implementierung eines ECDSA-artigen Algorithmus auf Curve25519.
Um es kurz zu machen, du bist auf dich allein gestellt. Vielleicht möchten Sie ECDSA über die Curve25519-Implementierung implementieren, indem Sie X9.62 folgen (dort ein Entwurf von 1998, der von verschiedenen Stellen heruntergeladen werden kann, z. B. dort , oder Sie können hundert Dollar ausgeben und erhalten die echte 2005-Version von Techstraße ). Aber sei gewarnt, dass du außerhalb der sorgfältig ausgetretenen Pfade der analysierten Kryptographie gehst; mit anderen Worten leugne ich ausdrücklich jede Art von Garantie, wie sicher diese Art von ECDSA wäre.
Mein Rat wäre, sich an Standardkurven zu halten (wie NIST P-256). Beachten Sie, dass, während Curve25519 schneller ist als die meisten Kurven derselben Größe, kleinere Standardkurven schneller sind und dennoch für die meisten Zwecke ausreichende Sicherheit bieten. NIST P-192 zum Beispiel liefert "96-Bit-Sicherheit", etwas ähnlich wie 1536-Bit-RSA. Außerdem bieten Standardkurven bereits eine Leistung in der Größenordnung von mehreren tausend Zeichen pro Sekunde auf einem kleinen PC, und ich habe Schwierigkeiten, mir ein Szenario vorzustellen, in dem mehr Leistung benötigt wird.
Um Curve25519 dafür zu verwenden, müssten Sie viele Funktionen implementieren, die AFAIK momentan für diese Kurve nicht implementiert, was bedeuten würde, dass Sie sehr weit in die Mathematik der Elliptischen-Kurven-Kryptographie einsteigen würden. Der Grund ist, dass die vorhandenen Funktionen die "y" -Koordinate des Punktes wegwerfen und nur mit der "x" -Koordinate arbeiten. Ohne die "y" -Koordinate sehen die Punkte P und -P gleich aus. Das ist gut für ECDH, für die Curve25519 entworfen wurde, weil | x (yG) | = | x (-yG) |. Aber für ECDSA müssen Sie aG + bP und | aG + bP | berechnen ist im Allgemeinen nicht gleich | aG - bP |. Ich habe untersucht, was daran beteiligt wäre, curve25519-donna zu erweitern, um solche Berechnungen zu unterstützen. es ist machbar, aber alles andere als trivial.
Da Sie vor allem schnelle Verifizierung benötigen, empfehle ich Bernsteins Rabin-Williams-Schema .
Ich habe kürzlich die curve25519-Bibliothek geteilt, die ich vor einiger Zeit entwickelt habe. Es wird auf Ссылка gehostet und bietet mehr Funktionalität, höhere Sicherheit und höhere Leistung als jede andere portable-C-Bibliothek, mit der ich getestet habe. Es übertrifft curve25519-donna um einen Faktor von fast 2 auf 64-Bit-Plattformen und um einen Faktor von fast 4 auf 32-Bit-Zielen.
Heute, viele Jahre nachdem diese Frage gestellt wurde, ist die richtige Antwort das Signaturschema Ed25519 .
Tags und Links encryption signature elliptic-curve