Java ECPoint坐标系在Bouncy Castle中是如何工作的?

Java ECPoint坐标系在Bouncy Castle中是如何工作的?,java,encryption,cryptography,bouncycastle,elliptic-curve,Java,Encryption,Cryptography,Bouncycastle,Elliptic Curve,我对Bouncy Castle库中的ECPoint计算有一些疑问 ECPoint标准化功能的作用是什么 坐标getter(getAffineXCoord,getXCoord,getRawXCoord)之间的区别是什么?可以使用不同的方法执行椭圆曲线计算。一种方法是使用投影坐标系,该坐标系使用X、Y和Z。该系统使EC计算更快 这与仅使用X和Y且Z设置为值1的法线坐标系不同。normalize函数计算Z设置为1的仿射X和Y 当然可以在每次计算后执行标准化,但这会减慢系统的速度;可以在下一次计算中使用

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

ECPoint
标准化功能的作用是什么


坐标getter(
getAffineXCoord
getXCoord
getRawXCoord
)之间的区别是什么?

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

这与仅使用X和Y且Z设置为值1的法线坐标系不同。
normalize
函数计算Z设置为1的仿射X和Y

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


只需使用
getAffineCoord()
getAffineCoord
函数而不是
getXCoord()
getYCoord()
来确保不使用非规范化的X和Y-如果不是这样,则引发异常

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


不同的曲线系统似乎使用特定于曲线的坐标系。如果使用F(2^m)上的二元曲线,则实现将具有从“原始”坐标推导坐标的代码。这些坐标是从
getRawXCoord
getRawYCoord
调用中检索的。它们是final的,因此不能在子类中重写。F(p)上的素数曲线不会覆盖
getXCoord
getYCoord
调用

我个人认为它们是特定于实现的,不应该公开。然而,在不同的包中还有其他类使用它们,因此这种选择是可以辩护的。在模块化系统中(自Java9以来),您可能会使它们特定于模块


可以找到有关为什么使用投影坐标的更多信息,也可以找到有关
normalize
的更多信息(请注意提问者)。

评论:标准化确保任何投影坐标为1,因此x、y坐标反映仿射坐标系中等效点的坐标