椭圆曲线密码(ECC)加解密算法的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

毕业论文

论文题目椭圆曲线密码(ECC)加解密算法的实现学生姓名

学号

院别数学与信息科学学院

专业信息与计算科学

班级

指导教师

完成时间2011 年04 月

椭圆曲线密码(ECC )加解密算法的实现

摘 要 本文首先介绍椭圆曲线密码体制(ECC);并简明地给出了椭圆曲线的定义;接

着以ElGamal 公钥体制的ECC 加解密的实现为例具体说明了其实现流程;最后分析了实

现结果,安全性能和概述了ECC 的发展现状,并对其未来的发展作了展望.

关键词 椭圆曲线密码;公钥密码,数字签名

1引言

随着政府部门和行业对网络环境和网络资源依赖程度的增强,涉及国家安全和社会公共安全的所有重大问题都在网络上表现出来. 为了确保信息的保密性,完整性,可用性,可控性,避免国家或个人的信息受到非法获取,破坏,篡改等形式的威胁,人们便提出了用密码技术来保障以电子形式保存或传送的数据. 1985年,N. Koblitz 和V . Miller 分别独立提出了椭圆曲线密码体制 (ECC),这是一种高安全性,高效率的公钥密码体系,它在密钥强度,加解密的处理速度和存储开销上都有着明显的优势. 采用椭圆曲线密码技术使密钥协商协议可充分利用椭圆曲线密码的优势,在更小密钥量下提供了更大的安全性,所需带宽明显减少,而且还大大降低了用户端的计算负担和存储要求.

2椭圆曲线密码体制

2.1密码体制的含义

密码体制分为对称密码体制和非对称密码体制.非对称密码体制是指在加密过程中,密钥被分为一对.这对密钥中的任何一个密钥都可以作为公开密钥通过非保密方式向他人公开, 而另一把作为私有密钥加以保存. 这对密钥具有这样一个特点: 当知道密钥对中的一个密钥时, 要检测出另一个密钥, 在计算上是不可能的. 公开密钥用来对信息进行加密, 则私有密钥用来对信息进行解密, 反之亦然. 在这个系统中, 每个通信实体都有一个加密密钥和一个紧密相关的解密密钥.通信的双方只要知道对方的公钥,就可以进行安全的通信.

2.2 椭圆曲线密码体制

椭圆曲线密码体制,即基于椭圆曲线离散对数问题的各种公钥密码体制. 最早由Miller 和Koblitz [1] 于1985年分别独立地提出. 它是利用有限域上椭圆曲线的有限点群代替基于离散对数问题密码体制中的有限循环群所得到的一类密码体制. 对于椭圆曲线密码系统(ECC )的安全性,其数学基础是计算椭圆曲线离散对数问题(ECDLP )的难解性[2] . 一般来说,ECC 没有亚指数攻击,所以它的密钥长度大大地减少,256bit 的ECC 密码体制成为目前已知公钥密码体制中每位提供加密强度最高的一种体制.

3.椭圆曲线的定义

所谓椭圆曲线指的是由韦尔斯特拉斯 (Weierstrass)方程:

23213246y a xy a y x a x a x a ++=+++

所确定的平面曲线[1].

若F 是一个域, ,1,2,,6i a F i ∈=⋯满足方程的数偶(,)x y 称为域F 上的椭圆曲线 E 的点. F 域可以是有理数域, 也可以是复数域, 还可以是有限域()GF p . 椭圆曲线通常用 E 表示.

4.ECC 算法的设计思想

设23213246y a xy a y x a x a x a ++=+++, 称

23213246(()))(,,F x y z y a xy a y x a x a x a ++-+++=

为Weierstrass 多项式. 当在任意点P 成立, 则椭圆曲线称为光滑的或非奇异的. 若E 是定义在有限域F q 上的椭圆曲线且其m q =p (p 为素数), 这样的p 称为有限域F q 的特征值. E 中恰好有一个Z 坐标为0的点(0, 1, 0), 我们称它为椭圆曲线的无穷远点, 用O 表示. 椭圆曲线上有理点的个数称为该椭圆曲线的阶, 若亦|()|q E F 表示椭圆曲线的阶, 则由|()| 1q E F q t =+-(其中2t ≤), 即Hasse 定理. 如果椭圆曲线E 定义在域F q 上, 其特征值不等于2和3, 则E 的Weierstrass 等式可以简化, 做变换, 进而Weierstrass 等式变换为23Y X aX b =++, 其中q a,b F ∈, 判别式324270a b ∆=+≠, 此式为椭圆曲线的一

般形式. 若令/,x X Z = /y Y Z =, 则等式变为33213246

y a xy a y x a x a x a ++=+++. 根据椭圆曲线进行加密通信的过程:

1) 用户A 选定一条椭圆曲线(,)p E a b ,并取椭圆曲线上一点, 作为基点G .

2) 用户A 选择一个私有密钥k , 并生成公开密钥G K =k .

3) 用户A 将(,)p E a b 和点K , G 传给用户B .

4) 用户B 接到信息后, 将待传输的明文编码到(,)p E a b 上一点M (编码方法很多,这

里不作讨论),并产生一个随机整数r ( r < n ).

5) 用户B 计算点12;C M rK C rG =+=.

6) 用户B 将C 1、C 2传给用户A .

7) 用户A 接到信息后,计算12C kC -, 结果就是点M , 即明文.

因为12()(),G C kC M rK k rG M rK r k M -=+-=+-= 再对点M 进行解码就可以得到明文. 密码学中,描述一条q F 上的椭圆曲线,常用到六个参量:

(,,,,,)T p a b G n h =,

其中p 、a 、b 用来确定一条椭圆曲线,G 为基点,n 为点G 的阶,h 是椭圆曲线上所有点的个数m 与n 相除的整数部分[3].

5. 椭圆曲线参数的选取和基点的确定

5.1 选取参数和确定基点的理论分析

在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线. 但并不是所有的椭圆曲线都适合加密,23y x ax b =++是一类可以用来加密的椭圆曲线,也是最为简单的一类. 下面我们就选用23y x ax b =++作为我们的加密曲线. 这条曲线定义在F q 上: 两个满足下列条件的小于p (p 为素数) 的非负整数a 、b : 324270(mod )a b p +≠ 则满足下列方程的所有点(,)x y ,再加上无穷远点∞,构成一条椭圆曲线. 23(mod )y x ax b p =++其中 x , y 属于0到p - 1间的整数,并将这条椭圆曲线记为(,)p E a b .

参数p 的选取:p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求,我们将p 取为200比特位的素数.

参数a 、b 的选取: 先随机产生小于p - 1的正整数作为参数a , 然后依据条件324270(mod )a b p +≠,判断随机产生的小于p - 1的正整数是否适合作为参数b .

基点的确定:随着参数a, b, p 确定,这条曲线23y x ax b =++就定下来了. 先随机产生0到p - 1间的整数作为基点x 坐标,计算3x ax b ++的结果再开方就得出基点y 坐标.

5.2 选取参数和确定基点的具体程序实现

具体程序实现如下:

……

{

//324270 (mod )a b p +≠

GetPrime(b,40); //先随机产生一个参数B

mp_expt_d(a, 3, &temp1);

mp_sqr(b, &temp2);

mp_mul_d(&temp1, 4, &temp3);

mp_mul_d(&temp2, 27, &temp4);

mp_add(&temp3, &temp4, &temp5);

mp_mod(&temp5,p,&temp);

if(mp_cmp(&temp, &compare)!=0 )

{

break; //满足条件跳出循环

}

}

相关文档
最新文档