【问题标题】:How does the ECPoint coordinate system work in Bouncy Castle?ECPoint 坐标系在 Bouncy Castle 中如何工作?
【发布时间】:2019-01-23 04:04:29
【问题描述】:

我对 Bouncy Castle 库中的 ECPoint 计算有一些疑问。

ECPoint normalize 函数有什么作用?

坐标getter(getAffineXCoordgetXCoordgetRawXCoord)之间有什么区别?

【问题讨论】:

  • 来自评论:“归一化确保任何投影坐标为 1,因此 x、y 坐标反映了仿射坐标系中等效点的坐标。”

标签: java encryption cryptography bouncycastle elliptic-curve


【解决方案1】:

椭圆曲线计算可以使用不同的方法进行。一种方法是使用投影坐标系,它使用X、Y和Z。该系统使EC计算更快。

这与仅使用 X 和 Y 并将 Z 设置为值 1 的普通坐标系不同。normalize 函数计算仿射 X 和 Y,其中 Z 设置为 1。

当然可以在每次计算后执行归一化,但这会减慢系统速度;可以使用投影坐标进行下一次计算。


简单地使用 getAffineXCoord()getAffineYCoord 函数来代替 getXCoord()getYCoord() 以确保不使用非规范化的 X 和 Y - 如果不是这种情况则抛出异常.

否则,如果 Z 不是 1,则结果可能不正确,例如,当 X 用作 Diffie-Hellman 密钥协议的结果时。因此建议您在所有计算完成后使用这些函数来检索最终结果。


不同的曲线系统似乎使用特定于曲线的坐标系统。如果您使用 F(2^m) 上的二进制曲线,则实现将具有从“原始”坐标派生坐标的代码。这些坐标是从getRawXCoordgetRawYCoord 调用中检索的。这些是final,因此它们不能在子类中被覆盖。 F(p) 上的素数曲线不会覆盖 getXCoordgetYCoord 调用。

我个人认为它们是特定于实现的,不应该被设为public。然而,在不同的包中还有其他类使用它们,因此可以为选择辩护。在模块化系统中(自 Java 9 起),您可能会将它们设为特定于模块的。


更多关于为什么使用投影坐标的信息可以在here (Nayuki.io)找到,关于normalize的更多信息可以在here on cryptography.SE找到(注意提问的人)。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多