5.2.6 Sign (签名)
5.2.6 Sign (签名)
签名过程的输入为: 私钥 (57 个八位组的串), 标志 F (Ed448 为 0, Ed448ph 为 1), 至多 255 个八位组的上下文 C, 以及任意长度的消息 M。
-
用 SHAKE256(x, 114) 对 57 字节私钥做哈希。令 h 表示所得摘要。按上一节从摘要的前一半构造秘密标量 s 及对应公钥 A。令 prefix 表示哈希摘要的后一半 h[57],...,h[113]。
-
计算 SHAKE256(dom4(F, C) || prefix || PH(M), 114), 其中 M 为待签名消息, F 对 Ed448ph 为 1, 对 Ed448 为 0, C 为所用上下文。将 114 个八位组的摘要解释为小端整数 r。
-
计算点 [r]B。为提高效率, 可先令 r 对 L (B 的群阶) 取模。令串 R 为该点的编码。
-
计算 SHAKE256(dom4(F, C) || R || A || PH(M), 114), 并将 114 个八位组的摘要解释为小端整数 k。
-
计算 S = (r + k * s) mod L。为提高效率, 可先将 k 对 L 取模。
-
签名由 R (57 个八位组) 与 S 的小端编码 (57 个八位组; 最后一个八位组的最高十位恒为 0) 拼接而成。