Zum Hauptinhalt springen

3. EdDSA Algorithm (EdDSA-Algorithmus)

3. EdDSA Algorithm (EdDSA-Algorithmus)

EdDSA ist ein digitales Signatursystem mit 11 Parametern.

Das generische EdDSA-Digitalsignatursystem mit seinen 11 Eingabeparametern ist nicht für eine direkte Implementierung vorgesehen. Die Wahl der Parameter ist entscheidend für einen sicheren und effizienten Betrieb. Stattdessen würden Sie eine bestimmte Parameterwahl für EdDSA implementieren (wie Ed25519 oder Ed448), manchmal leicht verallgemeinert, um Code-Wiederverwendung zu erreichen und Ed25519 und Ed448 abzudecken.

Daher ist eine präzise Erklärung des generischen EdDSA für Implementierer nicht besonders nützlich. Für Hintergrund und Vollständigkeit wird hier eine prägnante Beschreibung des generischen EdDSA-Algorithmus gegeben.

Die Definition einiger Parameter, wie n und c, kann helfen, einige Schritte des Algorithmus zu erklären, die nicht intuitiv sind.

Diese Beschreibung folgt eng [EDDSA2].

EdDSA hat 11 Parameter:

  1. Eine ungerade Primzahlpotenz p. EdDSA verwendet eine elliptische Kurve über dem endlichen Körper GF(p).

  2. Eine ganze Zahl b mit 2^(b-1) > p. EdDSA öffentliche Schlüssel haben genau b Bits, und EdDSA-Signaturen haben genau 2*b Bits. Es wird empfohlen, dass b ein Vielfaches von 8 ist, sodass öffentliche Schlüssel- und Signaturlängen eine ganzzahlige Anzahl von Oktetten sind.

  3. Eine (b-1)-Bit-Kodierung von Elementen des endlichen Körpers GF(p).

  4. Eine kryptographische Hash-Funktion H, die 2*b-Bit-Ausgabe erzeugt. Konservative Hash-Funktionen (d.h. Hash-Funktionen, bei denen es unmöglich ist, Kollisionen zu erstellen) werden empfohlen und haben keinen großen Einfluss auf die Gesamtkosten von EdDSA.

  5. Eine ganze Zahl c, die 2 oder 3 ist. Geheime EdDSA-Skalare sind Vielfache von 2^c. Die ganze Zahl c ist der Logarithmus zur Basis 2 des sogenannten Cofaktors.

  6. Eine ganze Zahl n mit c <= n < b. Geheime EdDSA-Skalare haben genau n + 1 Bits, wobei das oberste Bit (die 2^n Position) immer gesetzt und die unteren c Bits immer gelöscht sind.

  7. Ein Nicht-Quadrat-Element d von GF(p). Die übliche Empfehlung ist, es als den Wert zu nehmen, der am nächsten bei Null liegt und eine akzeptable Kurve ergibt.

  8. Ein von Null verschiedenes Quadrat-Element a von GF(p). Die übliche Empfehlung für beste Leistung ist a = -1, wenn p mod 4 = 1, und a = 1, wenn p mod 4 = 3.

  9. Ein Element B != (0,1) der Menge E = { (x,y) ist ein Mitglied von GF(p) x GF(p), sodass a * x^2 + y^2 = 1 + d * x^2 * y^2 }.

  10. Eine ungerade Primzahl L, sodass [L]B = 0 und 2^c * L = #E. Die Zahl #E (die Anzahl der Punkte auf der Kurve) ist Teil der Standarddaten, die für eine elliptische Kurve E bereitgestellt werden, oder sie kann als Cofaktor * Ordnung berechnet werden.

  11. Eine "Prehash"-Funktion PH. PureEdDSA bedeutet EdDSA, wobei PH die Identitätsfunktion ist, d.h. PH(M) = M. HashEdDSA bedeutet EdDSA, wobei PH eine kurze Ausgabe erzeugt, egal wie lang die Nachricht ist; zum Beispiel PH(M) = SHA-512(M).

Punkte auf der Kurve bilden eine Gruppe unter Addition, (x3, y3) = (x1, y1) + (x2, y2), mit den Formeln

         x1 * y2 + x2 * y1                y1 * y2 - a * x1 * x2
x3 = --------------------------, y3 = ---------------------------
1 + d * x1 * x2 * y1 * y2 1 - d * x1 * x2 * y1 * y2

Das neutrale Element in der Gruppe ist (0,1).

Im Gegensatz zu vielen anderen Kurven, die für kryptographische Anwendungen verwendet werden, sind diese Formeln "vollständig"; sie sind für alle Punkte auf der Kurve gültig, ohne Ausnahmen. Insbesondere sind die Nenner für alle Eingabepunkte von Null verschieden.

Es gibt effizientere Formeln, die immer noch vollständig sind und homogene Koordinaten verwenden, um die teuren Modulo-p-Inversionen zu vermeiden. Siehe [Faster-ECC] und [Edwards-revisited].