java - ECPoint 坐标系在 Bouncy CaSTLe 中如何工作?

标签 java encryption cryptography bouncycastle elliptic-curve

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

ECPoint normalize 函数有什么作用?

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

最佳答案

椭圆曲线计算可以使用不同的方法进行。一种方法是使用投影坐标系,该坐标系使用 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) 上使用二进制曲线,那么实现将具有从“原始”坐标导出坐标的代码。这些坐标是通过 getRawXCoordgetRawYCoord 调用检索的。这些被定为final,因此它们不能在子类中被覆盖。 F(p) 上的质数曲线不会覆盖 getXCoordgetYCoord 调用。

我个人认为它们是特定于实现的,不应该公开。然而,不同包中的其他类也使用它们,因此可以捍卫该选择。在模块化系统(自 Java 9 起)中,您可能会让它们特定于模块。


有关为何使用投影坐标的更多信息,请参阅 here (Nayuki.io)有关标准化的更多信息可以找到here on cryptography.SE (注意提问的人)。

关于java - ECPoint 坐标系在 Bouncy CaSTLe 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51872914/

相关文章:

encryption - 如何结合对称加密和非对称加密?

java - Java : Input strings with keyboard class

java - 每次重新启动时 Eclipse 都会将 Java 编译器合规性级别重置为 1.7

java - 将 pop() 的对象存储为变量

java - 按加密字段对数据库表进行排序

iphone - 设备上的 iPhone kccparamerror 中的 AES 加密

java - 使用单独的资源导出 lwjgl 程序

java - 读取受密码保护的工作表(版本 - excel 95,97-2003)Java

java - 如何使用 Java 或 AWSKmsClient 使用 AWS 加密开发工具包解密 AWS KMS 密码

encryption - 当我有 IV、纯文本和加密文本时获取 AES CBC key