生成椭圆曲线加密的椭圆曲线的基点(G)

时间:2012-06-22 13:06:23

标签: java cryptography elliptic-curve

如何在Java中为椭圆曲线生成基点或生成器?

我正在开发一个可用于实现一些椭圆曲线加密算法的Java包,我想使用自己的曲线。但是,我陷入了必须为曲线获取生成器基点的位置,以便我可以拥有一组域参数。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

给定“近似”订单u = k r的椭圆曲线,您应该:

  1. 生成随机点P
  2. 设置G = k P
  3. 如果G = 0转到1
  4. 确认r G不为0(如果为0,则曲线没有订单k r)。
  5. 否则G是按订单点r

答案 1 :(得分:0)

对于java,C或其他任何内容都是一样的....

首先假设您自己创建了具有素数组q的ECC域,并希望将其用于加密。 然后选择一个随机x坐标,然后从weierstrass形式的椭圆曲线方程计算y ^ 2。 希望你选择了一个质数模数p,它是3 mod 4.在这种情况下,如果它存在,确定squareroot mod p是微不足道的。如果它不存在,请尝试另一个x。 我很少需要超过2次尝试,大多数情况下,第一次尝试会导致新创建的域中存在有效的生成器。

您可以使用我的开源程序“学术签名”来实现此目的。 Manual and link to download page。 如果将新域导入域列表,则可以尝试使用该域的任意生成器。导入到学术签名时检查生成器。如果它不是椭圆曲线上的有效点,则测试点的x坐标将增加,直到遇到有效的x y坐标对。如果您随后导出域,则新生成器将包含在域参数的纯文本文件中。

在这个页面上ECC Domain page你可以找到我创建的一些域名,我使用上面提到的程序来获取包含一些“hex wordart”的生成器。

如果您没有自己创建域,如果它是主要的顺序,并且如果您已经在某些实现中使用了生成器,则更容易:将旧的实现生成器与随机数相乘并得到你自己一个新的生成器,你可以用来将你的密钥空间与其他实现的密钥空间分开。

此致   迈克尔安德斯