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

时间:2018-08-16 08:37:38

标签: java encryption cryptography bouncycastle elliptic-curve

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

ECPoint normalize函数有什么作用?

坐标获取器(getAffineXCoordgetXCoordgetRawXCoord)之间有什么区别?

1 个答案:

答案 0 :(得分:2)

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

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

当然可以在每次计算后执行标准化,但这会使系统变慢;可以将投影坐标用于下一次计算。


仅使用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)的使用投影坐标的更多信息,可以here on cryptography.SE找到有关normalize的更多信息(请注意询问问题的人)。