Aller au contenu principal

5.2.6 Sign (Signature)

5.2.6 Sign (Signature)

Les entrées de la procédure de signature sont la clé privée, une chaîne de 57 octets, un drapeau F valant 0 pour Ed448 et 1 pour Ed448ph, un contexte C d'au plus 255 octets, et un message M de taille arbitraire.

  1. Hacher la clé privée, 57 octets, avec SHAKE256(x, 114). Soit h le digest résultant. Construire le scalaire secret s à partir de la première moitié du digest, et la clé publique A correspondante, comme décrit à la section précédente. Soit prefix la seconde moitié du digest de hachage, h[57],...,h[113].

  2. Calculer SHAKE256(dom4(F, C) || prefix || PH(M), 114), où M est le message à signer, F vaut 1 pour Ed448ph et 0 pour Ed448, et C est le contexte à utiliser. Interpréter le digest de 114 octets comme un entier little-endian r.

  3. Calculer le point [r]B. Pour l'efficacité, réduire d'abord r modulo L, l'ordre du groupe de B. Soit R la chaîne encodant ce point.

  4. Calculer SHAKE256(dom4(F, C) || R || A || PH(M), 114), et interpréter le digest de 114 octets comme un entier little-endian k.

  5. Calculer S = (r + k * s) mod L. Pour l'efficacité, réduire encore k modulo L d'abord.

  6. Former la signature comme la concaténation de R (57 octets) et de l'encodage little-endian de S (57 octets ; les dix bits de poids fort des derniers octets sont toujours zéro).