ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:29.02KB ,
资源ID:5720110      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-5720110.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ECC加密算法.doc)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

ECC加密算法.doc

1、c+ 容易的实现椭圆曲线加密算法c+ 简单的实现椭圆曲线加密算法椭圆曲线算法椭圆曲线密码体制来源于对椭圆曲线的研究,所谓椭圆曲线指的是由韦尔斯特拉斯(Weierstrass)方程:y2+a1xy+a3y=x3+a2x2+a4x+a6 (1)所确定的平面曲线。其中系数 ai(I=1,2,6)定义在某个域上,可以是有理数域、 实数域、复数域,还可以是有限域 GF(pr),椭圆曲线密码体制中用到的 椭圆曲线都是定义在有限域上的。椭圆曲线上所有的点外加一个叫做无穷远点的特殊点构成的集合连同一个定义的加法运算构成一个 Abel 群。在等式mP=P+P+P=Q (2)中,已知 m 和点 P 求点 Q 比较

2、容易,反之已知点 Q 和点 P 求 m 却是相当困难的,这个问题称为椭圆曲线上点群的离散对数问题。椭圆曲线密码体制正是利用这个困难问题设计而来。公钥算法是基于数学函数(如单向陷门函数),公钥密码体制根据其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。本文是在素域 Zp上的,以 Menezes-Vanstone形式的椭圆加密算法。在素域上的曲线函数为y2 = x 3 +a* x + b a,b 为小于 p 的非负数,且 4*a3+ 27*b2 !=0对于在素域上的加法中,对于所有的点 P,Q 属于 E(Zp),有加法 规则:1。P + O = O + P = P ,P

3、+ (-P) = O;O 为椭圆曲线上的零点或者称为无限远的点,但是 O 在椭圆曲线的加法域上。2.加法的分配率和结合律,对 于 s,t 属于 Zp,有(s + t )* P = s * P + t* P;3.对于 P = (x1,y1),Q = (x2,y2) ,并且 P != - Q,则 P + Q=(x3,y3),x3 = k2 - x1 -x2;y3 = k*(x1-x3) - y1;k = (y2-y1)/(x2-x1) if P != Q;k = (3x12 + a)/(2*y1) if P = Q;椭圆曲线在素域上的运算用到除法,而在除法的规则是 a / b = c mod p

4、即计算 a x b-1 = c mod p ,其中 b-1 为 b 的乘法逆元, 即 b x b-1 = 1 mod p。对于乘法逆元,当 b 与 p 互素时,存在唯一解,而这里 p 是一个素数,且 b 不可能为 1,则肯定有解。对于求乘法逆元,一般使用欧几里德算法,如下:int getX_1(int x,int mod)int Q,X1,X2,X3,Y1,Y2,Y3,T1,T2,T3;X1 = 1;X2 = 0;X3 = mod;Y1 = 0;Y2 = 1;Y3 = (x%mod + mod) %mod;/获得正整数while(Y3 != 1) Q = X3 / Y3;T1 = X1 - Q

5、 * Y1;T2 = X2 - Q * Y2;T3 = X3 - Q * Y3;X1 = Y1;X2 = Y2;X3 = Y3;Y1 = T1;Y2 = T2;Y3 = T3;return Y2;乘法运算规则:1. 对于任意 k 属于 Zp,有 k * P = P + . + P (k 个 P 相加)2. 对于任意 s,t 属于 Zp,有 s *(t *P) = (s*t)*P对于 Menezes-Vanstone 的椭圆加密算法:1. 产生密钥,任选一个整数 k ,0#include using namespace std;const int k = 9;const int a = 5;co

6、nst int b = 37;const int p = 127;const int r =7;int getX_1(int x,int mod)int Q,X1,X2,X3,Y1,Y2,Y3,T1,T2,T3;X1 = 1;X2 = 0;X3 = mod;Y1 = 0;Y2 = 1;Y3 = (x%mod + mod) %mod;/获得正整数while(Y3 != 1) Q = X3 / Y3;T1 = X1 - Q * Y1;T2 = X2 - Q * Y2;T3 = X3 - Q * Y3;X1 = Y1;X2 = Y2;X3 = Y3;Y1 = T1;Y2 = T2;Y3 = T3;r

7、eturn Y2;/获得其乘法逆元struct pointint x;int y;point A,B;/公钥typedef pair twopoint;bool operator = (point pa,point pb)return pa.x = pb.x point operator + (point pa , point pb)int k;if(pa = pb)k = (3 * pa.x * pa.x + a) * getX_1(2* pa.y ,p) % p ;/必须使用正整数。这里 pa.y的值不能取 0./当取 0时,这就不能进行这个计算了,因为 pa = -pb 了,则,应该进行

8、一个判断。但是,这样的结果是 O,是不在椭圆曲线上的,不能进行输出的值。/这里是有一个周期数在,对于容易一个基值的也就是先给出的 A来说,它有一个周期 n,使 nA = O,而这里所有参数的选取值/都小于 n,使其不会达到 O,保证了不会出错,应该是这样吧。elsek = (pb.y - pa.y) * getX_1(pb.x - pa.x , p) %p;point c;c.x = (k*k - pa.x -pb.x) %p;c.y = (k * (pa.x - c.x) - pa.y)%p ;c.x = (c.x + p) %p; c.y = (c.y + p) %p; return c;point operator * (point n = n -1;for(int i = 1 ; i s;couts;return 0;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报