7.1.2. SerializePrivateKey and DeserializePrivateKey (序列化和反序列化私钥)
7.1.2. SerializePrivateKey and DeserializePrivateKey (序列化和反序列化私钥)
根据 [SECG], P-256, P-384 和 P-521 私钥是所使用曲线的标量域中的域元素。对于本节和第 7.1.3 节, 假设这些曲线上的 ECDH 实现者使用与 OS2IP() 函数兼容的私钥整数表示。
对于 P-256, P-384 和 P-521, KEM 的 SerializePrivateKey() 函数根据 [SECG] 执行域元素到八位字节串转换。如果私钥是 [0, order-1] 范围之外的整数, 其中 order 是所使用曲线的阶数, 则在序列化之前必须将私钥减少到其在 [0, order-1] 中的代表。DeserializePrivateKey() 根据 [SECG] 执行八位字节串到域元素转换。
对于 X25519 和 X448, 私钥与其字节串表示相同, 因此几乎不需要处理。SerializePrivateKey() 函数必须对其输出进行 clamp (限位), DeserializePrivateKey() 函数必须对其输入进行 clamp, 其中 clamping 是指在 [RFC7748] 第 5 节中定义的 decodeScalar25519() 和 decodeScalar448() 函数中对 k 执行的按位操作。
为了尽早捕获无效密钥, DHKEM 的实现者应该检查反序列化的私钥不等价于 0 (mod order), 其中 order 是 DH 群的阶数。请注意, 对于 X25519 和 X448 群, 此属性是显然成立的, 因为限位值永远不能为 0 (mod order)。