跳到主要内容

7. Security Considerations (安全考虑)

7. Security Considerations (安全考虑)

curve25519的安全级别 (即对原语进行暴力攻击所需的"操作"次数) 略低于标准128位级别。这是可以接受的, 因为标准安全级别主要由简单得多的对称原语驱动, 其中安全级别自然落在2的幂上。对于非对称原语, 严格遵守2的幂的安全级别将需要在设计的其他部分进行妥协, 我们拒绝这样做。此外, 在可以同时攻击多个目标的常见威胁模型下, 比较不同类型原语之间的安全级别可能会产生误导 [bruteforce]。

curve448的约224位安全级别是性能和偏执之间的权衡。大型量子计算机 (如果曾经被创造出来) 将破坏curve25519和curve448, 而对经典计算机能力的合理预测得出结论, curve25519是完全安全的。然而, 一些设计具有宽松的性能要求, 并希望对椭圆曲线的某些分析进展进行对冲, 因此也提供了curve448。

使用本文档中定义的曲线上的Diffie-Hellman的协议设计者不得假设"贡献行为"。具体来说, 贡献行为意味着双方的私钥都对结果共享密钥有贡献。由于curve25519和curve448的余因子分别为8和4, 小阶的输入点将消除另一方私钥的任何贡献。可以通过检查全零输出来检测这种情况, 实现可以按照第6节中的规定执行此操作。然而, 大量现有实现并未这样做。

使用这些曲线的设计者应该意识到, 对于每个公钥, 有几个可公开计算的公钥与之等价, 即它们产生相同的共享密钥。因此, 使用公钥作为标识符并将共享密钥的知识作为所有权证明 (而不在密钥派生中包含公钥) 可能会导致细微的漏洞。

设计者还应该意识到, 这些曲线的实现可能不使用本文档中规定的蒙哥马利阶梯, 而是可以使用通用的椭圆曲线库。这些实现可能会拒绝扭曲上的点, 并可能会拒绝非最小域元素。虽然不推荐, 但此类实现将与此处指定的蒙哥马利阶梯互操作, 但可能很容易与之区分。例如, 发送非规范值或扭曲上的点可能会导致此类实现产生可观察的错误, 而遵循本文设计的实现将成功产生共享密钥。