跳到主要内容

5.1.5 Key Generation (密钥生成)

5.1.5 Key Generation (密钥生成)

私钥为 32 个 octet (256 位, 对应 b) 的密码学安全随机数据. 关于随机性见 [RFC4086].

32 字节的公钥按下列步骤生成.

  1. 用 SHA-512 对 32 字节私钥做哈希, 将 digest (摘要) 存入大小为 64 octet 的缓冲区, 记为 h. 仅低 32 字节用于生成公钥.

  2. Prune (修剪) 缓冲区: 清除第一个 octet 的最低 3 位, 清除最后一个 octet 的最高位, 并将最后一个 octet 的次高位设为 1.

  3. 将缓冲区解释为小端整数, 得到 secret scalar (秘密标量) s. 执行 fixed-base scalar multiplication (固定基点标量乘法) [s]B.

  4. 公钥 A 为点 [s]B 的 encoding (编码). 先将 y 坐标 (在 0 <= y < p 范围内) 编码为 32 个 octet 的小端串. 最后一个 octet 的最高位恒为 0. 为得到点 [s]B 的编码, 将 x 坐标的最低位复制到最后一个 octet 的最高位. 结果即为公钥.