电子政务中基于ECC的数字签名算法的研究
2014-11-27宋佳倩
宋佳倩
摘 要 本论文描述了椭圆曲线密码体制,论述了ECC椭圆曲线的概念以及基于ECC的加密、解密技术和基于椭圆曲线的数字签名算法。最后,采用ECDSA算法,通过编程简单实现电子政务系统的部分功能。
关键词 数字签名;电子政务;椭圆曲线数字签名
中图分类号:TP399 文献标识码:A 文章编号:1671-7597(2014)19-0058-01
1 椭圆曲线密码体制
1.1 椭圆曲线的概念
椭圆曲线是在射影平面上满足方程Y2Z+a1XYZ+a3YZ2=X3+
1)选取ECDSA域参数。2)产生密钥对。3)生成ECDSA签名。4)验证ECDSA签名。
3.2 ECDSA的安全性分析
ECDSA算法是通过ECC来实现的,故可以用ECC的安全性来形容ECDSA的安全性。所谓安全性即算法本身的抗攻击强度,在此以RSA算法的安全性作为比对。增加RSA的密钥长度,其解密速率将大幅度降低,且对硬件的实现也造成了一定的困难。而在同等密钥长度的条件下,ECC的安全性就要高得多,这也使得ECC只需使用较短的密钥即可保证算法的安全性。
4 系统的具体实现
4.1 基本流程
ECDSA的基本流程如图2所示。
图2 ECDSA的生成和验证
4.2 ECDSA算法的实现
首先调用int privateKey = rand()随机生成私钥,在此上调用Point publicKey = privateKey * mEncoder.GetGPoint()生成公钥。其中GetGPoint()函数是用来取G点的函数。
4.3 文件的签名操作
1)计算SHA1值:
int SHA1Reset(SHA1Context *context);//初始化,计算新sha1消息摘要
void SHA1ProcessMessageBlock(SHA1Context *context);
2)产生签名:
Int k(rand() % 128);//随机产生私钥
Point p = k.i() * GetGPoint(); //根据私钥计算公钥
tmp[i + SHA1HashSize] = s.i();//计算(r,s)
4.4 签名的验证
Int r = Int((unsigned char)sig[i]);//从签名中获取r
Int s = Int((unsigned char)sig[i + SHA1HashSize]);//从签名中获取s
Int e = Int(sha1[i]);得到sha1值
if (x.x() == 0 || x.x() != r)return false;//r=0或者v不等于r,返回非法签名
5 结束语
椭圆曲线密码体制可使通信系统安全性提高,签名方案可以同时完成数字签名和公钥加密。本文提出的以椭圆曲线为基础的数字签名方案,能够实现收发双方的相互认证;当双方发生争议时,可由仲裁者去仲裁,这在通信应用场合中有一定实用价值。
参考文献
[1]张先红.数字签名原理及技术[M].北京:机械工业出版社,2004.
[2]曹莉,刘志镜.椭圆曲线密码体制与电子政务[J].计算机安全,2005.
[3]杨义先,孙伟.现代密码新理论[M].北京:科学出版社,2002.
[4]于海峰.政府信息化建设中的信息安全管理[J].计算机世界,2001.
[5]胡道元.Intranet网络技术及应用[M].北京:清华大学出版社,1998.
[6]于慧龙,解玲.基于保护轮廓的数据库系统安全性[J].信息网络安全,2002.
[7]Chicurel M .C ell Migration Research is on the Move[J].Science, 2002.
[8]牛少彰,崔宝江,李剑.信息安全概论[M].北京:北京邮电大学出版社,2004.
[9]江翔,袁辉.Visual C++实践与提高网络编程篇[M].北京:中国铁道出版社,2001.endprint