我对 Bouncy CaSTLe 库中的 ECPoint 计算有一些疑问。
ECPoint normalize
函数有什么作用?
坐标 getter (getAffineXCoord
、getXCoord
、getRawXCoord
)之间有什么区别?
最佳答案
椭圆曲线计算可以使用不同的方法进行。一种方法是使用投影坐标系,该坐标系使用 X、Y 和 Z。该系统使 EC 计算速度更快。
这与仅使用 X 和 Y 且 Z 设置为值 1 的普通坐标系不同。normalize
函数计算 Z 设置为 1 的仿射 X 和 Y。
当然可以在每次计算后执行归一化,但这会减慢系统速度;可以使用投影坐标进行下一步计算。
仅使用 getAffineXCoord()
和 getAffineYCoord
函数代替 getXCoord()
和 getYCoord()
确保不使用非标准化的 X 和 Y - 如果不是这种情况,则抛出异常。
否则,如果 Z 不为 1,例如当 X 用作 Diffie-Hellman key 协商的结果时,结果可能不正确。因此建议您在所有计算完成后使用这些函数来检索最终结果。
不同的曲线系统似乎使用特定于曲线的坐标系。如果您在 F(2^m) 上使用二进制曲线,那么实现将具有从“原始”坐标导出坐标的代码。这些坐标是通过 getRawXCoord
和 getRawYCoord
调用检索的。这些被定为final
,因此它们不能在子类中被覆盖。 F(p) 上的质数曲线不会覆盖 getXCoord
或 getYCoord
调用。
我个人认为它们是特定于实现的,不应该公开
。然而,不同包中的其他类也使用它们,因此可以捍卫该选择。在模块化系统(自 Java 9 起)中,您可能会让它们特定于模块。
有关为何使用投影坐标的更多信息,请参阅 here (Nayuki.io)有关标准化
的更多信息可以找到here on cryptography.SE (注意提问的人)。
关于java - ECPoint 坐标系在 Bouncy CaSTLe 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51872914/