Zum Hauptinhalt springen

5.1.6 Sign (Signieren)

5.1.6 Sign (Signieren)

Die Eingaben des Signaturverfahrens sind der private Schlüssel, eine 32-Oktett-Zeichenkette, und eine Nachricht M beliebiger Größe. Für Ed25519ctx und Ed25519ph gibt es zusätzlich einen Kontext C von höchstens 255 Oktetten und ein Flag F, 0 für Ed25519ctx und 1 für Ed25519ph.

  1. Hashe den Privatschlüssel, 32 Oktette, mit SHA-512. Bezeichne den Digest mit h. Konstruiere den geheimen Skalar s aus der ersten Hälfte des Digests und den zugehörigen öffentlichen Schlüssel A wie im vorherigen Abschnitt beschrieben. Bezeichne die zweite Hälfte des Hash-Digests mit prefix, h[32],...,h[63].

  2. Berechne SHA-512(dom2(F, C) || prefix || PH(M)), wobei M die zu signierende Nachricht ist. Interpretiere den 64-Oktett-Digest als Little-Endian-Ganzzahl r.

  3. Berechne den Punkt [r]B. Reduziere r zuerst modulo L, der Gruppenordnung von B. Sei R die Kodierung dieses Punktes.

  4. Berechne SHA512(dom2(F, C) || R || A || PH(M)) und interpretiere den 64-Oktett-Digest als Little-Endian-Ganzzahl k.

  5. Berechne S = (r + k * s) mod L. Reduziere k der Effizienz halber wieder zuerst modulo L.

  6. Die Signatur ist die Verkettung von R (32 Oktetten) und der Little-Endian-Kodierung von S (32 Oktetten; die drei höchstwertigen Bits des letzten Oktetts sind stets null).