如何在Java中为椭圆曲线生成基点或生成器?
我正在开发一个可用于实现一些椭圆曲线加密算法的Java包,我想使用自己的曲线。但是,我陷入了必须为曲线获取生成器基点的位置,以便我可以拥有一组域参数。
非常感谢任何帮助。
答案 0 :(得分:4)
给定“近似”订单u
= k
r
的椭圆曲线,您应该:
P
G
= k
P
G
= 0转到1 r
G
不为0(如果为0,则曲线没有订单k
r
)。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”的生成器。
如果您没有自己创建域,如果它是主要的顺序,并且如果您已经在某些实现中使用了生成器,则更容易:将旧的实现生成器与随机数相乘并得到你自己一个新的生成器,你可以用来将你的密钥空间与其他实现的密钥空间分开。
此致 迈克尔安德斯