5.1.6 Sign (署名)
5.1.6 Sign (署名)
署名手続きの入力は, 秘密鍵 (32 octet の列) と任意の長さのメッセージ M である. Ed25519ctx および Ed25519ph では, さらに最大 255 octet の context C とフラグ F があり, Ed25519ctx では F=0, Ed25519ph では F=1 である.
-
32 octet の秘密鍵を SHA-512 でハッシュする. 結果の digest を h とする. digest の前半から secret scalar s と対応する公開鍵 A を, 前節のとおりに構成する. prefix をハッシュ digest の後半 h[32],...,h[63] とする.
-
SHA-512(dom2(F, C) || prefix || PH(M))を計算する. ここで M は署名対象のメッセージである. 64 octet の digest を little-endian 整数 r として解釈する. -
点 [r]B を計算する. 効率のため, まず r を L (B の群の位数) で約化する. この点の符号化を列 R とする.
-
SHA512(dom2(F, C) || R || A || PH(M))を計算し, 64 octet の digest を little-endian 整数 k として解釈する. -
S = (r + k * s) mod L を計算する. 効率のため, 再びまず k を L で約化する.
-
署名は, R (32 octet) と S の little-endian 符号化 (32 octet; 最終 octet の最上位 3 ビットは常に 0) の連結である.