【发布时间】:2012-06-22 13:06:22
【问题描述】:
如何在 Java 中为椭圆曲线生成基点或生成器?
我正在开发一个可用于实现一些椭圆曲线加密算法的 Java 包,我想使用我自己的曲线。但是,我被困在必须为曲线获取生成器基点的地方,这样我才能拥有一组域参数。
非常感谢任何帮助。
【问题讨论】:
标签: java cryptography elliptic-curve
如何在 Java 中为椭圆曲线生成基点或生成器?
我正在开发一个可用于实现一些椭圆曲线加密算法的 Java 包,我想使用我自己的曲线。但是,我被困在必须为曲线获取生成器基点的地方,这样我才能拥有一组域参数。
非常感谢任何帮助。
【问题讨论】:
标签: java cryptography elliptic-curve
给定一条“近似素数”阶的椭圆曲线 u = k r,您应该:
P
G = k P
G = 0 转到 1rG不为0(如果为0,则曲线无序kr)。r。【讨论】:
这对于 java、C 或其他任何东西都是一样的......
让我首先假设您自己创建了一个具有素数组顺序 q 的 ECC 域,并希望将其用于加密。 然后选择一个随机的x坐标,然后根据weierstrass形式的椭圆曲线方程计算y^2。 希望您选择了一个素数模 p,它是 3 mod 4。在这种情况下,确定平方根 mod p 如果存在,那么它是微不足道的。如果它不存在,请尝试另一个 x。 我很少需要超过 2 次尝试,大多数情况下第一次尝试会导致新创建的域中已经有一个有效的生成器。
您可以为此目的使用我的开源程序“学术签名”。 Manual and link to download page。 如果您将一个新域导入到域列表中,您可以尝试为该域使用任意生成器。生成器在导入学术签名时进行检查。如果它不是椭圆曲线上的有效点,则增加测试点的 x 坐标,直到遇到有效的 x y 坐标对。如果您随后导出域,新生成器将包含在域参数的纯文本文件中。
在这个页面ECC Domain page你可以找到我创建的一些域,如果我使用上述过程来获取包含一些“十六进制文字”的生成器。
如果您没有自己创建域,如果它是质数,并且如果您已经在某些实现中使用了生成器,则更容易:将旧实现生成器与随机数相乘,您得到您自己是一个新的生成器,您可以使用它来将您的密钥空间与其他实现的密钥空间分开。
问候 迈克尔·安德斯
【讨论】: