资源描述:
《椭圆曲线密码的C语言设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机研究生开放研究《椭圆曲线密码的C语言设计与实现》美国GeneChiu基金资助基于TOM算法库的ECC加密算法的C语言设计与实现研究生徐立均内容:一、源代码下载二、ECC算法的设计思想三、椭圆曲线参数的选取和基点的确定四、椭圆曲线的点加和纯量乘法五、加密文件的读入与输出六、密文的存取和读入七、ECC加密的实现八、ECC解密的实现九、测试结果及分析 一、源代码下载本文使用了TOM算法库实现了椭圆曲线公钥密码体制,能对各类不同的磁盘文件进行加密和解密。1请下载可执行程序MY_ECC.exe,此程序无需任何额外的LI
2、B或DLL,可在Windows下独立运行,运行情况如下: 2请下载源代码source.rar: 编译此源代码需要使用TOM的高精度算法库MathLib.lib和相关的头文件tommath.htommath_class.htommath_superclass.h一并打包在source.rar中,请下载3对于TOM的高精度算法库的详细说明,请看本站C语言: 二、ECC算法的设计思想 根据椭圆曲线进行加密通信的过程,首先选定一个适合加密的椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。选择一个私有密钥
3、k,并生成公开密钥K=kG。加密时,将明文编码到Ep(a,b)上一点M,并产生一个随机整数r(r4、条曲线定义在Fp上:两个满足下列条件的小于p(p为素数)的非负整数a、b:4a3+27b2≠0(modp)则满足下列方程的所有点(x,y),再加上无穷远点∞,构成一条椭圆曲线。y^2=x^3+ax+b(modp)其中x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。 参数P的选取:p当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;我们将p取为200比特位的素数。 参数a、b的选取:先随机产生小于P-1的正整数作为参数a,依据条件4a3+27b2≠0(modp)判断随机产生
5、的小于P-1的正整数是否适合作为参数b. 基点的确定:随着参数a,b,p确定,这条曲线y^2=x^3+ax+b就定下来了。先随机产生0到p-1间的整数作为基点x坐标,计算x^3+ax+b的结果再开方就得出基点y坐标。上述具体程序实现如下:……while(1){ //4a3+27b2≠0(modp) GetPrime(b,40);//先随机产生一个参数B mp_expt_d(a,3,&temp1); mp_sqr(b,&temp2); mp_mul_d(&temp1,4,&temp3); mp_mul_d
6、(&temp2,27,&temp4); mp_add(&temp3,&temp4,&temp5); mp_mod(&temp5,p,&temp); if(mp_cmp(&temp,&compare)!=0) {break;//满足条件跳出循环 }} //y2=x3+ax+b,随机产生X坐标,根据X坐标计算Y坐标 GetPrime(x1,30);//随机产生30比特长的X坐标 mp_expt_d(x1,3,&temp6); mp_mul(a,x1,&temp7); mp_add(&temp6,&te
7、mp7,&temp8); mp_add(&temp8,b,&tempx); mp_sqrt(&tempx,y1);//得到Y坐标 ……..私钥的确定:随机选取1到P-1之间的素数作为私钥d.公钥的确定:由d乘我们所确定的基点得到公钥K,即K=dG。 四、椭圆曲线的点加和纯量乘法 对于一般的椭圆曲线方程y^2+a1xy+a3y=x^3+a2x^2+a4x+a6,设点P(x1,y1),Q(x2,y2)的和R(x3,y3)的坐标。R(x3,y3)的计算公式如下:x3=k^2+ka1+a2+x1+x2;y3=k(x
8、1-x4)-y1-a1x4-a3;其中k=(y1-y2)/(x1-x2)当P≠Q时k=(3x2+2a2x+a4-a1y)/(2y+a1x+a3)当P=Q时,对于椭圆曲线方程Y^2=X^3+aX+b,上述的公式变为:x3=θ2-x1-x2;y3=θ(x1-x3)-y1其中θ=(y1-y2)/(x1-x2)当P≠Q时;θ=(3x1^2-a)/2y1