5.2.5 Key Generation (密钥生成)
5.2.5 Key Generation (密钥生成)
私钥为 57 个八位组 (456 位, 对应 b) 的密码学安全随机数据。关于随机性讨论见 [RFC4086]。
57 字节公钥按下述步骤生成:
-
用 SHAKE256(x, 114) 对 57 字节私钥做哈希, 将摘要存入大小为 114 个八位组的缓冲区, 记为 h。仅使用较低的 57 字节来生成公钥。
-
修剪 (prune) 缓冲区: 清除第一个八位组的最低两位, 清除最后一个八位组的全部八位, 并置倒数第二个八位组的最高位为 1。
-
将缓冲区解释为小端整数, 得到秘密标量 (secret scalar) s。执行已知基点 (known-base-point) 标量乘法 [s]B。
-
公钥 A 为点 [s]B 的编码。先将 y 坐标 (在 0 <= y < p 范围内) 编码为 57 个八位组的小端串。最后一个八位组的最高位恒为 0。为得到点 [s]B 的编码, 将 x 坐标的最低有效位复制到最后一个八位组的最高有效位。结果即为公钥。