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

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

毕业论文

论文题目椭圆曲线密码(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 选取参数和确定基点的理论分析

在基于椭圆曲线的加解密和数字签名的实现方案中,首先要给出椭圆曲线域的参数来确定一条椭圆曲线. 但并不是所有的椭圆曲线都适合加密,23

=++是一类

y x ax b

可以用来加密的椭圆曲线,也是最为简单的一类. 下面我们就选用23

=++作为

y x ax b

我们的加密曲线. 这条曲线定义在F q上: 两个满足下列条件的小于p (p为素数) 的非负整数a、b: 32

+≠则满足下列方程的所有点(,)

4270(mod)

a b p

x y,再加上无穷远点∞,构成一条椭圆曲线. 23(mod)

=++其中x, y属于0到p - 1间的整数,并将

y x ax b p

这条椭圆曲线记为(,)

E a b.

p

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

参数a、b的选取: 先随机产生小于p - 1的正整数作为参数a, 然后依据条件32

+≠,判断随机产生的小于p - 1的正整数是否适合作为参数b. 4270(mod)

a b p

基点的确定:随着参数a, b, p确定,这条曲线23

=++就定下来了. 先随机

y x ax b

产生0到p - 1间的整数作为基点x坐标,计算3x ax b

++的结果再开方就得出基点y坐标.

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

具体程序实现如下:

……

{

//32

+≠

a b p

4270 (mod)

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; //满足条件跳出循环}

}

// 23

=++, 随机产生X坐标,根据X坐标计算Y坐标

y x ax b

GetPrime(x1,30); // 随机产生30比特长的X坐标

mp_expt_d(x1, 3, &temp6);

mp_mul(a, x1, &temp7);

mp_add(&temp6, &temp7, &temp8);

mp_add(&temp8, b, &tempx);

mp_sqrt(&tempx, y1); // 得到Y坐标

……

私钥的确定:随机选取1到P - 1之间的素数作为私钥d.

公钥的确定:由d 乘我们所确定的基点得到公钥K,即

K = d.

G

6. 椭圆曲线密码的算法

6.1 椭圆曲线密码算法的特点

6.1.1 离散性

密码算法需要的是离散值的定点运算,而不是连续值的浮点运算,在密码算法中不允许舍入.

6.1.2 大数运算

密码算法往往是大数运算,椭圆曲线密码体制要求160位的大数运算,但现有微机的CPU最多只支持64位的运算.

1)要求大容量的数据存储.

密码运算通常都要利用大容量的数据表,即用空间来换取时间上的加速. 这就要求运算部件具有大容量的存储.

2)包含大量的并行性.

6.2 椭圆曲线密码体制中的有关计算

6.2.1 椭圆曲线密码体制中的运算类型

作为公开密钥算法的一种,椭圆曲线密码体制要用到点乘、点加、模乘、模加、模逆、模幂这些基本运算,它们的执行速度直接决定着椭圆曲线的加密速度. 为了提高它们的速度,可从以下两方面考虑:

(1) 采用高速的算法.

(2) 实现算法的并行性(以便在硬件设计中利用多处理器进行并行运算):

1) 大数乘、大数取模属于整数域上的运算;

2) 模加、模乘、模逆、模幂属于有限域上的运算;

3) 点加和点乘属于椭圆曲线的点加群上的运算[4].

6.2.2 简述椭圆曲线的点加和纯量乘法

由于本人能力有限,短时间内很难做出一些深层次的研究和探讨,因此只能在这里做一点表面文章. 所以本文在这一部分就结合前面对有关大数计算算法进行的阐述,做一些力所能及的事情. 对于一般的椭圆曲线方程

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

设点11(,)P x y , 22(,)Q x y 和33(,)R x y 的坐标. 33(,)R x y 的计算公式如下:

231212x k ka a x x =++++,

3141143()y k x x y a x a =----,

其中1212()/()k y y x x =--.

当P ≠ Q 时,224113(32)/(2)k x a x a a y y a x a =++-++.

当P = Q 时, 对于椭圆曲线方程23Y X aX b =++, 上述的公式变为:

2312x x x θ=--,

3131()y x x y θ=--,

其中1212()/() y y x x θ=-- 当P ≠ Q 时, 211(3)/2x a y θ-=.

当P=Q 时, 由上述运算公式, 可以得出点积mP 的运算, 即mP = P + P + … + P , 共m 个P 相加, 这里m ∈N.

6.3椭圆曲线的点积的具体程序算法

设m 的二进制表示为1210(,,...,,)n n m m m m m --=,其中11n m -=, Q = P , 从左到右依次计算:

for( i = n - 2 to 0)

{ Q = 2Q;

if(i m ==1) Q=Q+P ;

}

则Q=mP .

Return;

函数原形为:

bool Ecc_points_mul(mp_int*qx, mp_int*qy, mp_int*px, mp_int*py, mp_int*d, mp_int *a,mp_int *p)

成功返回true.

int Two_points_add(mp_int*x1, mp_int*y1, mp_int*x2, mp_int*y2, mp_int*x3, mp_int *y3, mp_int *a, bool zero, mp_int*p)

成功返回1.

7.加密文件的读入与输出

7.1椭圆曲线的加密体制

在Diffe-Hellman 公钥系统体制中,具体的椭圆曲线、曲线上点P 及P 的周期大素数N 都是公开信息.

A 和

B 要进行通讯,首先得到椭圆曲线E 、点P 及素数N . 然后用户A 将[1, N -1]中随机选取的整数a 作为私钥, A 将pub A K aP 作为自己的公钥传送给用户B , 与此同时B 将 [1, N -1]中随机选取的整数b 作为私钥, 并将pub B K =bP 作为自己的公钥传送给A .

A 、

B 各自将自己的私钥点乘于对方传过来的公钥得到AB K , 这样就完成了密钥的交换

过程.当用户A 需要将待传数据m 传送给用户B 时, A 利用m 和AB K 生成m E , 当用户B

得到m E 后, 利用密钥交换过程自己生成的AB K 和从用户A 处得到的加密数据m E 生成数据m .见下图[5]:

7.2加密文件的读入与输出的具体程序实现

mp_digit 只用28比特,因此一个单元最多可存放三个半字节. 为充分利用存取空间,采用一个单元放三个半字节.

7.2.1函数putin()的实现

函数putin()的实现的作用: 将明文的二进制比特串赋给mp_int 数a . 主要循环部分及说明如下:

// chlong 为要存入的字符数组长

for(j=0; j<<="(mp_digit)CHAR_BIT;" *temp 存入字符 255); 左移8位存入高8位并向左移8位,以便放入下一个字符 temp 跳过前一个单元,先存入后一单元 *++temp 每次跳七个字符 i + ="7"; 的两个单元中以7个字符为单元循环,把七个字符放入的mp_int 7; j++)

{(>> 4); //存放被切分的字符的高四位,temp 跳回前一个单元 //存入第一单元

*temp |= (mp_digit) (ch[i-4] & yy); //存放被切分的字符的低四位

yy=(mp_digit)15;

*temp <<= (mp_digit)CHAR_BIT; //向左移8位,以便放入下一个字符

*temp |= (mp_digit)(ch[i-5] & 255); //存入字符

*temp <<= (mp_digit)CHAR_BIT; //左移8位

*temp |= (mp_digit)(ch[i-6] & 255); //存入字符

*temp <<= (mp_digit)CHAR_BIT; //左移8位

*temp++ |= (mp_digit)(ch[i-7] & 255);

//存放被切分的字符的低四位,temp跳到后一个单元temp++; //再向后跳一单元,这样和下次的++temp实现每次循环跳两个单元}

函数原型为:int putin(mp_int*a, char*ch, int chlong)

成功返回0.

7.2.2函数chdraw( )的实现

函数chdraw()实现将mp_int数a中的比特串还原为字符串并赋给字符串ch:chdraw和putin是相反过程,将putin存入字符的过程反过来取出字符.

函数原型为:int chdraw(mp_int* a, char*ch)

成功返回0.

8.密文的存取和读入

此过程难点是如何保证存入文件后,再从文件中读取密文并存入mp_int型数后,和原存放密文的mp_int型数不能有一个比特位的改变.

存取时先存*mp->dp的最高8位,再依次往下存后面3个8位. 依据*mp->dp的特点,最高8位为0000xxxx,因此,可将255作为一个密文段的结束标志,把前一密文段和后一密文段区分开. 这样在密文文件中,密文的存取结构为:

0000xxxx|xxxxxxxx|xxxxxxxx|xxxxxxxx|0000xxxx|……|11111111|0000xxxx|xxxxxxxx|….. 0字节1字节2字节3字节4字节4x字节下一加密段x为1或0

利用fgetc每次读取一个字符,并赋值给一个字符数组. 当a[i]=255,且i%4=0时截止.

读出之后赋值就简单了.

存密文:int chmistore(mp_int*a, FILE*fp) 成功返回0

把密文赋给mp_int型数a: int miwendraw(mp_int*a, char*ch, int chlong) 成功返回0.

9. ECC 加密的实现

9.1 ECC 加密实现的理论依据

加密时因P 长度取值为200比特,所以所取明文长度应在0到199比特之间,另外需要一个附加的标志字节char(255),所以一次取明文最大长为191比特. 在本程序中一次取20字节. 和RSA 不同,ECC 运算是基于点的运算. 一个点有两个参数,一个X 坐标,一个Y 坐标. 所以取明文时需一次取两段,前一段做X 坐标,后一段做Y 坐标. 因此,一次加密明文为40字节. 由于每次加密要取两段,引发了另外一个问题:当加密文件末尾所剩明文长度小于20字节时的处理. 在本程序中,我们的解决是将剩余明文取作X ,而将Y 取作0,且不加标志字节char(255),这样解密时,程序在Y 中找不到标志字节char(255),就不会往解密文中存任何东西.

取得明文后,产生一个随机整数r , 计算点1K C M r =+;2G C r =. 将点1C 、2C 坐标1c x , 1c y , 2c x , 2c y 依次存入密文文件[6].

9.2 ECC 加密的具体程序实现

for(i=0; i 0) // Residue 为剩余字符数

{

if (Residue <= enlongtemp )

{

fread(miwenx,1, Residue, fp); //读入字符串

miwenx[Residue]=char(255);

putin(&mx, miwenx,Residue+1); //文件存入

mp_zero(&my);

}

else

{

fread(miwenx,1,enlongtemp,fp); //读入字符串

miwenx[enlongtemp]=char(255);

fread(miweny,1,Residue-enlongtemp,fp); //读入字符串

miweny[Residue-enlongtemp]=char(255);

putin(&mx, miwenx,enlongtemp+1); //文件存入

putin(&my, miweny,Residue-enlongtemp+1); //文件存入

}

//加密

Ecc_points_mul(&c2x,&c2y,px,py,&r,a,p); //C2=rG

Ecc_points_mul(&tempx,&tempy,qx,qy,&r,a,p); // rK

Two_points_add(&mx,&my,&tempx,&tempy,&c1x,&c1y,a,zero,p);

// C1=M+rK

//保存密文

chmistore(&c1x,fq);

chmistore(&c1y,fq);

chmistore(&c2x,fq);

chmistore(&c2y,fq);

}

函数原型为:void Ecc_encipher(mp_int*qx, mp_int*qy, mp_int*px, mp_int*py, mp_int*a, mp_int*p);

10.ECC 解密的实现

10.1ECC 解密实现的理论依据

解密时,依据存密文时放入的结束标志255,读入密文. 依次取4段, 调用miwendraw 将密文存入mp_int 型数中,还原为加密时存入的点C 1和C 2坐标c 1x, c 1y, c 2x, c 2y . 依据12()()G G C dC M rK k r M rK r r M -=+-=+-=. 计算12C dC - (d 为私钥),得

到明文点坐标x m ,y m . 其中两点减的计算可如下:

(,);();Q X Y P Q P Q Y P Y -=-=+--=--;

计算12C dC -完毕后调用chdraw 取出mp_int 中的明文比特串,依次存入解密文件

中,完成解密[6].

10.2 ECC 解密的具体程序实现

while(!feof(fp))

{

//取C1点X 坐标

i=0;

while(1)

{

stemp[i]=fgetc(fp);

if(i%4==0)

{

if(int(stemp[i]&0xFF) == 255 ) goto L1;

}

i++;

}

L1: miwendraw(&1c x , stemp, i); //取其他坐标

Ecc_points_mul(&tempx, &tempy, &2c x , &2c y , k, a, p); // 计算2dC

mp_neg(&tempy, &temp); // -Q=(X ,-Y ) Two_points_add(&1c x ,&1c y , &tempx, &temp, &x m , &y m , a, zero, p);

int chtem;

chtem=chdraw(&

m,stemp); //从ming中取出字符串

x

//保存解密结果for(int kk=0;kk < chtem;kk++)

{

fprintf(fq,"%c",stemp[kk]);

}

chtem=chdraw(&

m,stemp); //从ming中取出字符串

y

//保存解密结果for(kk=0; kk < chtem; kk++)

{

fprintf(fq, "%c", stemp[kk]);

}

}

函数原型为:void Ecc_decipher(mp_int*k, mp_int*a, mp_int*p);

11. 测试结果及分析

为验证系统的加密解密功能,对系统进行了如下测试:

测试环境

Intel p4; CPU 1.5G; 256M RAM; Windows XP DEV - C++

测试结果

利用系统对文本文件、BMP、WORD、EXCEL、EXE等文件进行加密,然后解密. 验证结果表明,给定的明文经系统加密后再解密的结果完全一致, 没有一个比特的偏差,较好的实现了ECC的功能.

12.结束语

目前,国际上公认的比较安全实用的公钥密码体制是1985年Koblitz和Miller 分别独立提出的建立在椭圆曲线上的离散对数难题基础上的椭圆曲线密码体制(ECC). 经过长期的理论研究和科学实践,ECC得到了迅猛的发展. 现在椭圆曲线密码体制不仅是一个重要的理论研究领域,而且已经从理论研究转化为实际可用的密码算法,促使民用安全技术走向产业化. 当前,国内外很多生产密码产品的公司都在致力于ECC 产品的开发. 椭圆曲线加密算法ECC的安全性,是基于计算有限域上椭圆曲线点集所构成的可交换群上定义的离散对数的困难性. 该算法具有安全性能高,计算量小,处理速度快,存储空间占用小和带宽要求低等特点,已在强调速度的领域如PDA,手机,智能卡等方面得到应用.

参考文献:

[1] 杨超, 高海燕. 椭圆曲线密码体制理论与其安全性研究[J]电脑知识与技术, 2006,(17).

[2] 孙跃刚. 椭圆曲线密码体制中若干问题的研究[D]. 吉林大学2009.

[3] 于彬. 椭圆曲线密码算法的研究与实现[D]. 沈阳工业大学.

[4] 王庆先. 有限域运算和椭圆曲线数乘运算研究[D]. 电子科技大学2006.

[5] 李学俊. 基于椭圆曲线离散对数问题的公钥密码及其算法研究[D].

[6] 杨君辉, 戴宗铎, 杨栋毅, 刘宏伟. 关于椭圆曲线密码的实现[J]通信技术, 2001(06).

On the Realization of the Elliptic Curve Encryption Algorithm

Yan Meiting

Abstract: In this paper, we first introduce the elliptic curve encryption algorithm, then give the definition of the elliptic curve briefly. The ElGamal public encryption system is based on the elliptic curve theory, and we analyze the process and the security of this encryption system. At last we realize it in c++ and offer the source code.

Keywords: elliptic curve encryption algorithm; public-key password, digital signatures

椭圆曲线密码 概述: 椭圆曲线密码学(ECC, Elliptic curve cryptography )是基于椭圆曲线数学的一种公钥密码的方法。1985年,Neal Koblitz 和Victor Miller 分别独立提出了椭圆曲线密码体制(ECC),其依据就是定义在椭圆曲线点群上的离散对数问题的难解性。 引言: ECC 被广泛认为是在给定密钥长度的情况下,最强大的非对称算法,因此在对带宽要求十分紧的连接中会十分有用。 ECC 的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA ——提供相当的或更高等级的安全。ECC 的另一个优势是可以定义群之间的双线性映射,基于Weil 对或是Tate 对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。 国家标准与技术局和ANSI X9已经设定了最小密钥长度的要求,RSA 和DSA 是1024位,ECC 是160位,相应的对称分组密码的密钥长度是80位。NIST 已经公布了一列推荐的椭圆曲线用来保护5个不同的对称密钥大小(80, 112, 128, 192, 256)。一般而言,二进制域上的ECC 需要的非对称密钥的大小是相应的对称密钥大小的两倍。 椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的困难性上,对应有限域上椭圆曲线的群。 引理及有关概念: (1) 无穷远元素(无穷远点,无穷远直线)平面上任意两相异直线的位置关系 有相交和平行两种。引入无穷远点,是两种不同关系统一。AB ⊥L1, L2∥L1,直线AP 由AB 起绕A 点依逆时针方向转动,P 为AP 与L1的交点,如图1。Q=∠BAP →π /2则AP → L2,可设想L1上有一点P ∞,它为L2和L1的交点,称之为无穷远点。直线L1上的无穷远点只能有一个(因为过A 点只能有一条平行于L1的直线L2,而两直线的交点只能有一个)。 图1 结论: 1. 平面上一组相互平行的直线,有公共的无穷远点(为与无穷远点相区别,把

椭圆曲线加密算法 椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。 ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA 加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长 1.椭圆曲线 在数学上,椭圆曲线(英语:Elliptic curve,缩写为EC)为一代数曲线,被下列式子所定义 y2=x3+ax+b 其是无奇点的;亦即,其图形没有尖点或自相交。 满足此条件的a b满足:4a3+27b2≠0 图1 在基础上需要定义一个无穷远的点,将此点作为零点:此时椭圆曲线定义为:{(x,y)∈?2|y2=x3+ax+b,4a3+27b2≠0}∪{0} 在椭圆曲线中的群的运算律: 1. 所有的点都在椭圆曲线上 2. 0点作为群上的单元点即 P+0=P 3. P点关于X轴的对称点为P点的逆即 P+(?P)=0

4.对于位于同一条直线上的三个点P,Q,R.则有 P+Q+R=0 图2 P+Q+R=0(无限远点 P Q R三个点的位置是任意的,他们满足加法的结合律,因为这个群是一个阿贝尔群。 2.椭圆曲线加法 当P和Q不相等时(x P≠x Q) 由于是在阿贝尔群上可以将P+Q+R=0改写为P+Q=?R所以在椭圆曲线上的加法定义为P Q 两点加法为P,Q两点连线与曲线的交点R的关于X轴对称点?R 图2-3 P+Q=-R P Q两点的直线的斜率为: m=y P?y Q x P?x Q 这条线与曲线的交点为:R=(x R,y R) x R=m2?x P?x Q y R=y P+m(x R?x P) 因此(x P,y P)+(x Q,y Q)=(x R,?y R)如果在图上表示即为上述的P+Q=?R

计算机研究生开放研究 《椭圆曲线密码的C语言设计与实现》 美国GeneChiu基金资助 基于TOM算法库的ECC加密算法的C语言设计与实现 研究生徐立均 内容: 一、源代码下载 二、ECC算法的设计思想 三、椭圆曲线参数的选取和基点的确定 四、椭圆曲线的点加和纯量乘法 五、加密文件的读入与输出 六、密文的存取和读入 七、ECC加密的实现

八、ECC解密的实现 九、测试结果及分析 一、源代码下载 本文使用了TOM算法库实现了椭圆曲线公钥密码体制,能对各类不同的磁盘文件进行加密和解密。 1 请下载可执行程序MY_ECC.exe,此程序无需任何额外的LIB或DLL,可在Windows下独立运行,运行情况如下:

2 请下载源代码source.rar: 编译此源代码需要使用TOM的高精度算法库 MathLib.lib 和相关的头文件 tommath.h tommath_class.h tommath_superclass.h 一并打包在source.rar中,请下载

3 对于TOM的高精度算法库的详细说明,请看本站C语言: 二、 ECC算法的设计思想 根据椭圆曲线进行加密通信的过程,首先选定一个适合加密的椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。选择一个私有密钥k,并生成公开密钥K=kG。加密时,将明文编码到Ep(a,b)上一点M,并产生一个随机整数r(r < n)。计算点C1=M+rK;C2=rG。将C1、C2存入密文。解密时,从密文中读出C1、C2,计算C1-kC2,根据:C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M, 解得的结果就是点M,即明文。 三、椭圆曲线参数的选取和基点的确定 并不是所有的椭圆曲线都适合加密,y^2=x^3+ax+b是一类可以用来加密的椭圆曲线,也是最为简单的一类。下面我们就选用 y^2=x^3+ax+b作为我们的加密曲线。这条曲线定义在Fp上:两个满足下列条件的小于p(p为素数)的非负整数a、b:4a3+27b2≠0 (mod p) 则满足下列方程的所有点(x,y),再加上无穷远点∞ ,构成一条椭圆曲线。y^2=x^3+ax+b(mod p) 其中 x,y属于0到p-1间的整数,并将这条椭圆曲线记为Ep(a,b)。

旺旺:旺我旺:能我过能软过软考考

主要内容
? ??公钥密码使用的几个单向性很好的函数 ? ??ElGamal密码回顾 ? ??椭圆曲线概述 ? ??椭圆曲线及解点 ? ??椭圆曲线的几何意义 ? ??椭圆曲线的解点等计算 ? ??椭圆曲线密码体制 ? ??利用椭圆曲线密码加解密实例
旺旺:我能过软考

公钥密码使用的几个单向性很好的函数
版权所有:我能过软考
1)大合数的因子分解问题: 大素数的乘积容易计算,如(p*q=n),而大合数 的因子分解困难(n推出p和q) 代表:RSA密码
2)有限域上的离散对数问题: 有限域上大素数的幂乘容易计算(ab
对数计算困难(logac b) 乘法群: ElGamal密码
加法群:ECC密码
c),而
3 旺旺:我能过软考

ElGamal密码回顾
版权所有:我能过软考
ElGamal密码是建立在有限域GF(p)之上,其中p是一个大素数, 选取有限域GF(p)的一个本原元α ,并将GF(p)和α公开。
注意:p是大素数,且p-1有大素数因子。
1、密钥生成 用户随机选取一个整数d: 1≤d ≤p-2,并计算出 y= αd mod p
将y作为公开的加密密钥,将d作为保密的解密密钥。
由公钥y求出私钥d,必须求解离散对数,非常困难
4 旺旺:我能过软考

椭圆曲线概述
版权所有:我能过软考
? 受ELGamall密码启发,在其它离散对数问题难解的群中,同样可以构成ELGamal 密码
? 有限域GF(p)上的椭圆曲线的解点构成交换群,而且离散对数问题是难解的,于是 可在此群上建立ELGamal密码,并称为椭圆曲线密码
? 它密钥短、签名短、软件实现规模小、硬件实现电路省电。
? 应用:基于智能卡的多种应用,如电子商务中的数字签名与认证,移动通讯中的安 全保密等方面
? 普遍认为160位长的椭圆曲线密码的安全性相当于1024位的RSA密码,而且运算速 度也较快。
6 旺旺:我能过软考

国产密码算法及应用 商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。 商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如各种安全认证、网上银行、数字签名等。 为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法等等。其中SSF33、SM1、SM4、SM7、祖冲之密码 是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。 目前已经公布算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法等。 一、国密算法简介 1.SM1对称密码 国密SM1算法是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度为128位,密钥长度都为128比特,算法安全

保密强度及相关软硬件实现性能与AES相当,算法不公开,仅以IP 核的形式存在于芯片中。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。 2.SM2椭圆曲线公钥密码算法 SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。国密SM2算法标准包括4个部分,第1部分为总则,主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述,第2部分为数字签名算法,这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧,第3部分为密钥交换协议,与ECDH功能相同,但复杂性高,计算量加大,第4部分为公钥加密算法,使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。对于SM2算法的总体感觉,应该是国家发明,其计算上比国际上公布的ECC算法复杂,相对来说算法速度可能慢,但可能是更安全一点。 设需要发送的消息为比特串M,len为M的比特长度。为了对明文M进行加密,作为加密者的用户应实现以下运算步骤: 步骤1:用随机数发生器产生随机数k∈[1,n -1];

SM2椭圆曲线公钥密码算法 第5部分:参数定义 Public key cryptographic algorithm SM2 based on elliptic curves-- Part 5: Parameter definitions

目次 1 符号缩略语 (1) 2 参数定义 (1) 附 录 A 数字签名与验证示例 (2) A.1 综述 (2) A.2SM2椭圆曲线数字签名 (2) 附 录 B 密钥交换及验证示例 (4) B.1 一般要求 (4) B.2SM2椭圆曲线密钥交换协议 (4) 附 录 C 消息加解密示例 (8) C.1 一般要求 (8) C.2SM2椭圆曲线消息加解密 (8)

SM2椭圆曲线公钥密码算法 第5部分:参数定义 1 符号缩略语 p大于3的素数。 a, b F q中的元素,它们定义F q上的一条椭圆曲线E。 n基点G的阶(n是#E(F q)的素因子)。 x G 生成元的x坐标 y G 生成元的y坐标 2 参数定义 SM2使用素数域256位椭圆曲线。 椭圆曲线方程:y2 = x3 + ax + b 曲线参数: p = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF a = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC b = 28E9FA9E 9D9F5E34 4D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93 n = FFFFFFFE FFFFFFFF FFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123 x G= 32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7 y G= BC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0

10.3椭圆曲线算术 椭圆曲线理论是一个古老而深奥的数学分支,已有100多年的历史,一直作为一门纯理论学科被少数数学家掌握。它被广大科技工作者了解要归功于20世纪80年代的两件重要的工作。第一,Weil应用椭圆曲线理论证明了著名的费尔玛大定理。第二,Neal Koblitz和https://www.360docs.net/doc/e717696862.html,ler把椭圆曲线群引入公钥密码理论中,提出了基于椭圆曲线的公钥密码体制ECC(Elliptic Curves Cryptosystem),取得了公钥密码理论和应用的突破性进展。 20世纪90年代,最通用的公钥密码体制是RSA公钥密码体制和DH公钥密码交换算法。其密钥长度一般为512比特。1999年8月22日RSA-512被攻破,所以,这些公钥不得不被加长。为了达到对称密钥128比特的安全水平,NIST推荐使用3072比特的RSA密钥。显然这种密钥长度的增长,对本来计算速度缓慢的RSA来说,无疑是雪上加霜。ECC的提出改变了这种状况,实现了密钥效率的重大突破。大有以强大的短密钥优势取代RSA成为新一代公钥标准(事实标准)之势。 ECC的安全性和优势得到了业界的认可和广泛的应用:

(1)1998年ECDSA(椭圆曲线数字签名算法)被确定为ISO/IEC数学签名标准ISO14888-3; (2)1999年2月ECDSA被ANSI确定为数字签名标准ANSI X9.62-1998,ECDH(椭圆曲线 Diffie-Hellman)被确定为ANSI X9.63; (3)2000年2月ECDSA被确定为IEEE标准IEEE1363-2000,同期,NIST确定其为联邦数 字签名标准FIPS186-2。 1.椭圆曲线 椭圆曲线并非椭圆,之所以称为椭圆曲线是因为它的曲线方程与计算椭圆周长的方程类似,一般来计,椭圆曲线的曲线方程是以下形式的三次方程:y2+axy+by=x3+cx2+dx+e (1) 其中a,b,c,d,e是满足某些简单条件的实数。其中包括称为无穷远点的元素。 密码中普遍采用的是有限域上的椭圆曲线,有限域上的椭圆曲线是指曲线方程定义式(1)中,所有系数都是某一有限域GF(p)中的元素(其中p为一大素数)。其中最为常用的是由方程 y2≡x3+ax+b (mod p) 定义的曲线。(a,b∈GF(p), 4a2+27b3≠0 mod p) 椭圆曲线上的加法运算定义如下:

椭圆曲线加密算法代码及解析

在椭圆曲线加密中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。其方程如下: y2=x3+ax+b(mod p) 这里p是素数,a和b为两个小于p的非负整数,它们满足: 4a3+27b2(mod p)≠0 其中,x,y,a,b ∈Fp,则满足式(2)的点(x,y)和一个无穷点O就组成了椭圆曲线E。 椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对 Q=kP,在已知P,Q的情况下求出小于p的正整数k。 现在我们描述一个利用椭圆曲线进行加密通信的过程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私有密钥k,并生成公开密钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后,将待传输的明文编码到Ep(a,b)上一点M(将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。),并产生一个随机整数r(r using namespace std; //求两数的最小公倍数 int f1(int a, int b) { int c=a; while( c%a!=0 || c%b!=0) c++;

ECC算法的应用 1 数据加密/解密 ECC(Elliptic Curves Cryptography)加密算法是一种公钥加密算法,与主流的RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。ECC 加密算法允许用户选择具有唯一性的身份标识(如Email地址或网络帐号)作为公钥,并通过可信的中央服务器接受到自己的私钥,在安全通信过程不采用数字证书的概念,而直接将安全方案与加密或验证方法联系起来。

图1 加解密过程 ECC加密算法的计算量小并且处理速度快。在一定的相同的计算资源条件下,虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。同时ECC系统的密钥生成速度比RSA快百倍以上,以163位的ECC加密算法与1024位的RSA加密算法比较,ECC加密算法的签名时间为3.0ms,密钥对生成时间为3.8ms,但RSA加密算法却分别高达228.4ms和4708.3ms,因此在相同条件下,ECC加密算法则有更高的加密性能。 2数字签名 由于ECC加密算法是建立在公钥加密体系基础上的,所以它不但可以应用于通信加密,而且还可以应用于数字签名领域。 ECC加密算法的带宽要求低,当对长消息进行加解密时,两类密码系统有相同的带宽要求,但应用于短消息时ECC加密算法带宽要求却低得多,而数字签名正是基于短消息的通讯传输,因此基于ECC加密算法的数字签名系统带宽要求比RSA低很多,易于在各种网络环境下推广应用。 3ECC在银行系统中的应用 ECC在我国的产业化正处于起步阶段,我国的商用密码管理政策规定商用核心密码算法和技术必须采用国内自主研究的成果而不得采用国外的,我国应当开发和应用属于自己的商用ECC技术和产品。 ECC加密算法在银行系统可应用于数据加密传输及身份认证。

毕业论文 论文题目椭圆曲线密码(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].

龙源期刊网 https://www.360docs.net/doc/e717696862.html, 椭圆曲线公钥在网络安全密码体系中的应用作者:高建明 来源:《计算机时代》2013年第08期 摘要:移动设备和无线设备的大量使用需要一种新的公钥密码方案,来适应这些设备在计算能力和带宽方面的限制,同时要满足安全性级别的要求。椭圆曲线密码体制作为一种新兴的加密及身份认证技术,以其自身的多项特点,已从学术理论研究阶段逐步走向实际应用阶段,成为目前最有前途的一种公钥密码体系,极有可能成为现存公钥密码体系RSA的替代者。椭圆曲线密码算法具有高安全性、低消耗、运算速度快的特点,具有良好的应用前景。文章对椭圆曲线方程、算法的原理、加密算法、安全性进行了分析,实现了椭圆曲线公钥在网络Diffie-Hellman密钥交换中的应用。 关键词:椭圆曲线;密码学;编码;密钥;安全性 中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2013)08-25-03 0 引言 目前,大多数使用公钥密码学进行加密和数字签名的产品和标准都使用RSA算法。为了保证RSA在使用中的安全性,最近这些年来密钥设置的位数一直在增加,这对使用RSA的应用是一个很重的负担,近年来,出现了一种具有较强竞争力的椭圆曲线密码学(ECC),它对RSA提出了挑战[1]。ECC突出的优点是可以使用比RSA短得多的密钥,但却能得到相同的安全性,因此在应用上可以大大减少运行负荷。 1 椭圆曲线方程概述 1.1 椭圆曲线方程 一般地说,椭圆曲线是由方程y2+dxy+ey=x3+ax2+bx+c定义的曲线,其中定义a,b,c,d,e为系数,从数学上讲,椭圆曲线的形状并非椭圆,之所以被称为椭圆曲线,是因为该方 程右边的多项式x3+ax2+bx+c与椭圆曲线的积分有关。 现分析以下椭圆曲线类方程: 令K(b,c)为式⑴的椭圆曲线上所有(x,y)的不同点组成的集合。 这类椭圆曲线的特征是曲线上的点具有加法性质,一般可用于构造交换群,交换群(M,+)满足以下5个性质的代数结构,其中M为集合,集合上元素的加法运算用符号“+”表示。 ⑴对任意x,y∈M,x+y∈M,则满足集合上的封闭性。

椭圆加密算法 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。 优点 与经典的RSA,DSA等公钥密码体制相比,椭圆密码体制有以下优点: 1、安全性高 有研究表示160位的椭圆密钥与1024位的RSA密钥安全性相同。 处理速度快 2、在私钥的加密解密速度上,ecc算法比RSA、DSA速度更快。 存储空间占用小。 带宽要求低. 原理 椭圆曲线密码体制来源于对椭圆曲线的研究,所谓椭圆曲线指的是由韦尔斯特拉斯(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比较容易,反之已知点Q和点P求m却是相当困难的,这个问题称为椭圆曲线上点群的离散对数问题。椭圆曲线密码体制正是利用这个困难问题设计而来。椭圆曲线应用到密码学上最早是由Neal Koblitz和Victor Miller在1985年分别独立提出的。椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。解椭圆曲线上的离散对数问题的最好算法是Pollard rho方法,其时间复杂度为,是完全指数阶的。其中n为等式(2)中m的二进制表示的位数。当n=234, 约为2117,需要1.6x1023 MIPS 年的时间。而我们熟知的RSA所利用的是大整数分解的困难问题,目前对于一般情况下的因数分解的最好算法的时间复杂度是子指数阶的,当n=2048时,需要2x1020MIPS年的时间。也就是说当RSA的密钥使用2048位时,ECC的密钥使用234位所获得的安全强度还高出许多。它们之间的密钥长度却相差达9倍,当ECC的密钥更大时它们之间差距将更大。更ECC 密钥短的优点是非常明显的,随加密强度的提高,密钥长度变化不大。 德国、日本、法国、美国、加拿大等国的很多密码学研究小组及一些公司实现了椭圆曲线密码体制,我国也有一些密码学者

密码学中两种常见的密码算法为对称密码算法(单钥密码算法)和非对称密码算法(公钥密码算法)。 对称密码算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加密解密。只要通信需要保密,密钥就必须保密。对称算法的加密和解密表示为: Ek(M)=C Dk(C)=M 对称算法可分为两类。一次只对明文中的单个位(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64位――这个长度大到足以防止分析破译,但又小到足以方便作用。 这种算法具有如下的特性: Dk(Ek(M))=M 常用的采用对称密码术的加密方案有5个组成部分(如图所示) l)明文:原始信息。 2)加密算法:以密钥为参数,对明文进行多种置换和转换的规则和步骤,变换结果为密文。 3)密钥:加密与解密算法的参数,直接影响对明文进行变换的结果。 4)密文:对明文进行变换的结果。 5)解密算法:加密算法的逆变换,以密文为输入、密钥为参数,变换结果为明文。 对称密码术的优点在于效率高(加/解密速度能达到数十兆/秒或更多),算法简单,系统开销小,适合加密大量数据。 尽管对称密码术有一些很好的特性,但它也存在着明显的缺陷,包括: l)进行安全通信前需要以安全方式进行密钥交换。这一步骤,在某种情况下是可行的,但在某些情况下会非常困难,甚至无法实现。 2)规模复杂。举例来说,A与B两人之间的密钥必须不同于A和C两人之间的

相关文档
最新文档