一种基于Java2的数字签名系统的设计与实现

发布时间:   来源:文档文库   
字号:
维普资讯http://www.cqvip.com
2005年第12期 
中图分类号:TP314 
文献标识码:A 
文章编号:1009—2552(2005)12—0132—04 

种基于Java2的数字签名系统的设计与实现 
杨春金,倪福银 
(武汉理工大学信息工程学院,武汉430063) 
要:文章融合两种算法,利用DES算法对原文加密,利用ECC加密管理密钥实现数字签名, 
设计了一种基于DES和ECC的混合型数字签名方案,并通过Java2编程实现。该设计可用于电子 商务,电子政务中。 
关键词:DES算法;SHA算法;数字签名;ECC;Ja2 
Design and implementaton of digital signature system based on Java2 
YANG Chun.in.NI Fu.yin 
(School ofInformaton Engin ̄rng,Wuhan Univ.0f Technology,Wuhan 40063,Qlm) 
Abstract:Thi paper proposes a kind of mixed di舀tal sgnature scheme based on DES and ECC,which uses he DES algorihm to encrypt orginal document,USeS ECC to manage key in order to reale te ai ̄signa— 
ure,ad i i implemented by Java2.This design Ca be used in elctonic business and elronic gover 
ment. 
Key words:DES algorhm;SHA algorhm;digial signature;ECC;Java2 
0 引言 
随着Interct的发展,安全性已经引起人们越来 
(Data Encrypton Stand)…和ECC(Elpt Curve Cryp— 
phy) 。DE加密速度快,适合加密较长明文, 
越大的关注。如何安全的在网络上传输信息,实现 
信息鉴别和数字签名(即鉴别信息来源的真实性,确 保信息的完整性和信息的不可抵赖性)成为人们研 究的热点。通过对传统信息加密和现代信息加密技 术的研究,提出了一种DE和ECC的混合型数字签 
名方案。 
从Java语言出现以来,安全就一直是一个主要 
而ECC可以很好的实现数字签名,这样整体的提高 了数字签名过成中的速度与安全问题,提高了数字 
签名的实用性。 
假设发送端A向接收端B发送文件P并进行 
数字签名。 
1.1曲线定义与密钥的分配 
(1)发送端A确立散列函数SHA,用于生成消 息摘要; 
(2)发送端A确定椭圆曲线参数T=(P,a,b, G,n,h),并将此参数和散列函数给B; 
的设计目的。Java提供了开发语言、运行时环境、 以及非常适用于安全系统开发的工具。由于 
va开发包(DK)1.4包含许多加密组件和支持与 
开发安全解决方案相关的技术,因而成为技术标准。 
3)两端A和B分别建立密钥对(Ia,Q )和 (Kb,Qb),其中K日,b为私钥,Q =Ka G,Qb=Kb G 
是公钥; 
va2的库具有一个显著的优点,包括对联网、文件 输入/输出、多线程、高级同步图元、GUI(gphi 
user interface,图形用户界面)和密钥安全服务的全 
4)发送端A将Q 传给接收端B,接收端B将 Qb传给A,其流程如图1所示,其中CA(Cer 
收稿日期:2005—06—27 
面支持。本文将基于Jva2对提出的签名方案如何 实现作进一步探讨。 
 签名方案 
所设计的签名方案采用了两类加密算法:DES 

作者简介:杨春金,男,副教授,研究方向为信号与信息处理。 
 32 

维普资讯http://www.cqvip.com
Autory)证书管理机构,作为第三方管理公钥; 
1.签名生成 
(1)A选择—个随机数或伪随机数N,≤N≤n—l 2)计算N (mod n); 
3)A用SHA函数将原文P形成信息摘要M,其 
值e=SHA(P); 
4)A使用A方私钥Ia对信息摘要M进行加 密得Cm,计算s=N (e+Ka )(rod ),如果s=0, 则转向(3); 5)A使用密钥K,使用DES算法对Cn与原文 
P进行加密形成混合密文ch,计算NG=(X ,Y1), r=X1(rd n),如果r=0,则转向(1); 
图1密钥管理 
(6)A将(4)、(5)步形成的结果(Ch,s,r)传送给 
B,如图2所示的流程图。 
5)取DEs对称密钥为K=lQb=I a=l G。 
图2签名流程 
1.签名验证 2.2功能模块设计 
用户B收到用户A的密文Ch和签名文(s,r)后 软件子系统由通信模块、签名模块、验证模块、 杂凑模块、加解密模块和密钥生成模块组成 。其 
组成如图3所示。 
操作如下: 
(1)B收到(Ch,s,r)后,将Ch,s,r分开; 2)B对密文Ch用K进行DES解密得Cm与原 文P,验证s,r是否为[1,n—1]间的整数,若是继续 下一步;否则,该签名无效,系统停止; 
3)B利用SHA函数对解密得到的原文P产生 
摘要M’,即e=SHA(P); 
4)计算W=s (mod n); 
5)计算Ul=ew(mod n),U2=rw(mod n); 6)利用A的公钥Q。计算x=u G+U Q。= 
(X1,Y1),v=X1(mod n); 
图3数字签名功能模块不意图 
7)如果r=v,则签名正确,接受签名。 
注:通信模块:负责系统的信息的发送和接收; 
2 系统组成 
2.1硬体配置设计 
摘要模块:生成待发送的信息摘要; 
签名模块:对待发送的信息的杂凑码进行签名; 验证模块:对接收的信息签名进行验证; 加解密模块:对待发送的信息进行加密,属于可 选部分,有无该模块只是影响信息信是否能被 其他人读出,对信息签名的安全性没有影响; 

所设计的数字认证签名系统的硬件体系结构采 
用总线结构。其中,网络服务器选用COM PAQ的 
PL 3000,工作站选用COM PAQ的A P 200,使用 3COM的网络接口卡,同轴电缆。 
133— 

维普资讯http://www.cqvip.com
密钥生成模块:生成签名所需密钥。 
3 Java2的实现 
3.1编程思路 
根据软件子系统功能模块的划分,对密钥生成 模块,摘要模块,签名模块,验证模块等进行模块化 
设计,而Ja2提供的jvax.crpto. x.crpto.n. acs. ,va.cuy.pec. ,a.io. 类库,给程 序的编写带来极大的方便。 
在Jav2里,函数称为方法,在程序中重要方法 
主要包括: 
RichDSA()DSA签名方法 
niKeys()密钥对生成方法 
e[]sgn()签名方法 y(bye[]daa)验证方法 
这里给出签名方法的程序,如下所示: publ bye[]s() 
 
I)r 
 
//Calculate te digest,number 
bye[]diget=md一.di(); 
BigInteger m=new Biglnteger(1,digest); 
//Generate k,a random number,0<k<q 
BigInteger k=new BigInteger(qBiLength一 

1,secureRandom

); 
whie(k.compareTo(q一)>=0)  
 
k=new BigInteger(qBiLength一一1,secure- 
Random

); 
 
//Inverse of K 
BigInteger kInv=k.modInverse(q一); /r=( k mod P)mod q 
BigInteger r=(g一.mdPow(k,P一)).moa(q一); is=(k 一1(S} (M)+xr))rod q 
BigInteger S=klnv.mulply((m.add(x一 

mulply(r)))).moa(q一); 
3.2利用DES。ECC进行数字签名 
程序s voi main(Stng[]as)有以下重要 
过程: 
生成密钥 
RichDSA dsa=new RichDSA(); 
KeyPairGenemtor kpg KeyPairGenerator.get- 
nstance(“DSA”): 

】34一 
/得到DE私钥 
 
System.out.printn(“\nStart generatng DE 
key”); 
KeyGenerator keyGen=KeyGenerator.getln- 
ance(“DES”); 
keyGen.ini(56); 
Key key=k ̄yGen.generateKey(); 
System.out.prntn(“Finih generatg DES 
key”); 
SecureRandom r=new SeeureRandom(): kpg.inize(1024,r); KeyPai kp=kpg.genKeyPair(); PrvateKey prvKey kp.getPrvate(); 
PucKey puKey=kp.getPublc(); 
//加解密过程 
Siature dsaSign=Siature.getnstance 
(“SHAlwiDSA”); 
Siature dsaVery=Signatre.getnstance 
(“SHA1wihDSA”); 
dsaSi.iniSi(prvKey); dsaVery.iniVery(pubKey); 
读明文 
Fie inputTextFie=new Fie(1ocaIFile); 
FieInputSteam fs=new FieInputSteam(in・ 
putTextFie); 
BuferedInputStream bis=new Buferedlnput 
Steam(fs); 
bye[]buf=new bye[(int)inpuTeFie. 
ng()]; 
nt len; 
whie(bis.avaiable()!=0) 
 
en=bis.rad(bu); dsa.update(buf,0,len); &aSi.update(bu,0,len); 
 
bis.close(); s.close(); 
/进行签名 
System.out.printn(“\nStrt encrypton”); cipher.init(Cipher.ENCRYPT
MODE,key); 
bye[]cipheText=cipher.doFina(inputTexFie): 
System.out. ndn(“Finish encrypton:”); Sysm.out.prntn(new Stng(inputTextFie, s)); 

维普资讯http://www.cqvip.com
byte[.]text—sgnature=dsa.sign(); byte[]jdkature=dsaSi.si(); 

s.close(); 
 
catch(Excepton ex)  
//打开并阅读文件 
nputTextFie=new Fie(1 ̄alFie): 
s=new FieInputSteam(inputTextFie); bis=new BuferedInputSteam(ts); 
ex.prntStackTrace(); 
 
以上是签名和验证的核心过程,在应用时可以 buf=new bye[(int)inputTeFie.ngh()]; 
whie(bis.avaiable()!=0) 根据实际情况灵活运用。 
 
 
4 结束语 
en=bis.read(buf); 基于Java2的DES,ECC混合签名方案通过在计 dsa.update(buf,0,len); 算机上的实际验证,该方案具有运算速度快,安全性 
dsaVery.upate(buf,0,len); 强等优点,所以具有较高的实用性,可用于电子商 务,电子政务中。随着电子商务的更广泛应用,如何 
/验证签名 
实现抗攻击性更强,运算速度更快的签名算法,如何 System.out.prntn(“\nStart decrypton”); 
用Ja2来实现算法从而确保信息安全仍是今后研 
byte[]newPlainText=cipher.doFinal(cipherText); 究的趋势。 System.out.prntn(“Finih decrypton:”); 参考文献: 
System.out.prnfn(new Stng(inputTextFie, 1]吴世忠,祝世雄,张文政,等.应用密码学[M].北京:机械工 
s)); 
业出版社,1999. 
boolean veres=dsa.very(text—siature); 2]Miae Rosg.Impmentg Elpt Cur Crpt2 G, ̄hy[M]. 
boolea dk—veres=dsaVery.very(jdk—sia— USA:ManningPublcatons Co.,1999. 
3]汤海风.基于J2的数字签名技术[J].大理学院学报,2003。 
ure); 
2(5). 
System.out.prntn(“RichDSA Ver:”+veres); 4]徐晓迎.J a安全性编程实例[M].北京:清华大学出版社, 
Sysem.out.prnfn(“JDK Ver:”+jdk—vei 2003. 
es); 
5](美)海尔顿.a安全解决方案[M].北京:清华大学出版社, 
bis.close(); 
2003. 
责任编辑:杨立民 
 
、 
(上接第84页) 
表1时空道路网络最近邻查询表 
4 结束语 
参考文献: 
时空道路网络里移动查询点的最近邻查询的难 l1  Shahabi C,Kolahdouzan M R,Sharizadeh M.A Road Network Em— 
bedding Technique for K—Nearest Neighbor Search in Moving object 
点在于查询点在连续的改变位置,解决此类查询的 
Databases[M J.Sb3"D,2001. 
关键是在于要有效的定位路径上的分裂点。本文提 
[2]Feng WaabeT.A FatMehodfrCouousNeartTagetOb— 
 Que On Ro Newok[J].In VSMM’02.Koa,2O2。(9): 
出了一个有效的基于交叉点检查(IE)方法来解决时 182—191. 
空道路网里的最近邻查询问题,从而提高了查询效 
3]Kohduzn M,Shahabi C.VonoBad K Ne Nebo Searh 
 at Newor Daba[M].n VLDB 2004,Tonto,Canada. 
率,减少了系统资源的消耗。 
责任编辑:杨立民 

135— 

本文来源:https://www.2haoxitong.net/k/doc/d2057e661ed9ad51f01df231.html

《一种基于Java2的数字签名系统的设计与实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式