我对Bouncy Castle库中的ECPoint计算有一些疑问。
ECPoint normalize
函数有什么作用?
坐标获取器(getAffineXCoord
,getXCoord
,getRawXCoord
)之间有什么区别?
答案 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)上使用二进制曲线,则该实现将具有从“原始”坐标派生坐标的代码。这些坐标是从getRawXCoord
和getRawYCoord
调用中检索的。它们被制成final
,因此它们不能在子类中被覆盖。 F(p)上的质数曲线不会覆盖getXCoord
或getYCoord
调用。
我个人认为它们是特定于实现的,因此不应设为public
。但是,在不同的程序包中还有其他使用它们的类,因此可以捍卫选择。在模块化系统(自Java 9开始)中,您可能会使其成为特定于模块的。
可以找到关于here (Nayuki.io)的使用投影坐标的更多信息,可以here on cryptography.SE找到有关normalize
的更多信息(请注意询问问题的人)。