求椭圆曲线基点G的阶?
求椭圆曲线基点G的阶?
已知椭圆曲线Ep(a,b)的参数:
有限域 p 是: 1514632635174592562243141915959568687003144559398080982579809
曲线参数 a 是: 791107111
曲线参数 b 是: 1077150514903
曲线G点的X坐标是: 644644487
曲线G点的Y坐标是: 16367426894330
私钥 k 是: 3573213943246244755044103700527078272835564256634324140533
公钥的X坐标是: 300926926446137873574058245124271641822522762978019682442886
公钥的Y坐标是: 526316386840250105483025593133809754064234349343842898534047
注释:
椭圆曲线参数的选取和基点的确定:
并不是所有的椭圆曲线都适合加密,y2=x3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就选用y2=x3+ax+b作为我们的加密曲线。这条曲线定义在Fp上:两个满足下列条件的小于p(p为素数)的非负整数a、b:4a3+27b2≠0 (mod p) 则满足下列方程的所有点(x,y),再加上 无穷远点O∞ ,构成一条椭圆曲线。
y2=x3+ax+b(mod p) 其中 x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。
1、参数P的选取:p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;我们将p取为200比特位的素数。
2、参数a、b的选取:先随机产生小于P-1的正整数作为参数a
3、依据条件4a3+27b2≠0 (mod p)判断随机产生的小于P-1的正整数是否适合作为参数b
4、基点的确定:随着参数a,b,p确定,这条曲线y2=x3+ax+b就定下来了。先随机产生0到p-1间的整数作为基点x坐标,计算x3+ax+b的结果再开方就得出基点y坐标。
5、私钥的确定:随机选取1到P-1之间的素数作为私钥d.
6、公钥的确定:由k乘我们所确定的基点得到公钥K,即K=kG
请问:如何求基点G的阶n啊???????????
我是想根据下面的方案给软件加密:(椭圆曲线在软件注册保护的应用)
下面是利用Fp(a,b)椭圆曲线进行软件注册的方法。
一、软件作者按如下方法制作注册机(也可称为签名过程)
1、选择一条椭圆曲线Ep(a,b),和基点G;
2、选择私有密钥k(k<n,n为G的阶),利用基点G计算公开密钥K=kG;
3、产生一个随机整数r(r<n),计算点R=rG;
4、将用户名和点R的坐标值x,y作为参数,计算SHA(Secure Hash Algorithm 安全散列算法,类似于MD5)值,
即Hash=SHA(username,x,y);
5、计算sn≡r - Hash * k (mod n)
6、将sn和Hash作为 用户名username的序列号
二、软件验证过程如下:(软件中存有椭圆曲线Ep(a,b),和基点G,公开密钥K)
1、从用户输入的序列号中,提取sn以及Hash;
2、计算点R≡sn*G+Hash*K ( mod p ),如果sn、Hash正确,其值等于软件作者签名过程中点R(x,y)的坐标,因为
sn≡r-Hash*k (mod n)
所以
sn*G + Hash*K
=(r-Hash*k)*G+Hash*K
=rG-Hash*kG+Hash*K
=rG- Hash*K+ Hash*K
=rG=R ;
3、将用户名和点R的坐标值x,y作为参数,计算H=SHA(username,x,y);
4、如果H=Hash 则注册成功。如果H≠Hash ,则注册失败(为什么?提示注意点R与Hash的关联性)。
简单对比一下两个过程:
作者签名用到了:椭圆曲线Ep(a,b),基点G,私有密钥k,及随机数r。
软件验证用到了:椭圆曲线Ep(a,b),基点G,公开密钥K。
Cracker要想制作注册机,只能通过软件中的Ep(a,b),点G,公开密钥K ,并利用K=kG这个关系获得k后,才可以。而求k是很困难的。