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.
-
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].
-
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. -
Berechne den Punkt [r]B. Reduziere r zuerst modulo L, der Gruppenordnung von B. Sei R die Kodierung dieses Punktes.
-
Berechne
SHA512(dom2(F, C) || R || A || PH(M))und interpretiere den 64-Oktett-Digest als Little-Endian-Ganzzahl k. -
Berechne S = (r + k * s) mod L. Reduziere k der Effizienz halber wieder zuerst modulo L.
-
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).