您的当前位置:首页基于J2ME的无线移动商务安全应用研究

基于J2ME的无线移动商务安全应用研究

2020-02-20 来源:乌哈旅游
维普资讯 http://www.cqvip.com 第23卷第4期 计算机应用与软件 Vo1.23,No.4 2006年4月 Computer Applications and Software Apr.2006 基于J2ME的无线移动商务安全应用研究 杨 雄 赵远东 (南京信息工程大学信息与通信系 江苏南京210044) 摘 要 分析比较了点到点与端到端的安全应用,阐述了端到端的安全方案在J2ME无线移动商务上的优势。最后介绍了基于 XML的数据加密和签名在J2ME移动商务中端到端的安全应用,并给出开发实例。 关键词 J2ME XMI 密钥DES加密 RSA数字签名 SECURE APPLICATlON AND RESEARCH 0F WIRELESS MoBILE CoMMERCE BASED oN J2ME Yang Xiong Zhao Yuandong (D印£.oflnfom ation and Communicati。n,№njing University oflnforn ̄ation Science&Technology,Nanjing Jiangsu 210044,China) Abstract This paper firstly analyzes the advantage and disadvantage of point—to—point and end—to—end secure application,then discusses the end.to.end secure resolution’s advantage in J2ME wireless m.commel ̄e.Finally.the solution built on data encryption and signature in XML is given to demonstrate this opinion,Also an example is covered, Keywords J2ME XMI Key DES encryption RSA signature l 引 言 2基于点到点的数据保护链路 WAP技术的发展使得手机具备了依靠WAP,GPRS访问 网络中的数据可以通过建立点到点的安全连接来实现, Internet的能力,而J2ME的出现叉给无线设备的应用开发注 SSI (安全套接字)协议使得两台主机之间可以建立安全的连 入了全新的思想,使得J2ME在该领域的优势得到了全面的体 接。SSL利用公钥算法在两点之间建立并交换会话私钥,使得 现。传统的技术使得在手机上开发应用软件异常困难,而第 双方可以在通信中利用算法加密解密数据。HTTPS是建立在 三方开发商叉无法参与进来,无法满足市场对手机功能多样 SSL上的HTrP协议,目前在电子商务中已广泛采用。SUN 性的需求。目前WAP联网需要WAP网荚且不够智能,与之 J2ME Wireless ToolKit版本1.0.2及之后版本都支持HTYPS一 相比,J2ME具有很强的优势:首先J2ME是基于JAVA的语 个HTI"PS连接形式为: 言,是跨平台的,不同厂商不同平台开发的手机程序可以方便 String url=“https:∥WWW.XXX.corn/”; 的移植到其他的终端,从而使得第三方开发商可以参加程序 HttpConnection 的开发;其次,J2ME无需类似WAP的网关,可以通过HttpCon. hc=(HttpConnection)Connector.open(ur1); nection联网;再者,J2ME可以与目前业界应用最广泛也是最 虽然HTYPS/SSL为网络通信建立了安全点到点的通道,但 完善的企业解决方案J2EE无缝的结合在一起,依靠J2EE服 是当应用在J2ME无线程序时就有其一定的局限性:首先,随着 务器端诸如JSP,Servlet,JavaBean的强大处理功能访问网络 分布式结构在电子商务中的广泛应用,基于WEB服务的网络需 信息。 要多个中间组件(JSP,EJB,JavaBean),多个服务商协调处理,要 因此笔者认为以J2ME手持移动设备为前端,J2EE服务 求产生基于端到端的安全方案;其次SSL用同一密钥强度加密 器体系为后台的无线移动应用将在未来人们的生活中起着重 解密数据对于某些无线应用程序和有限计算能力设备而言,维 要的作用,而最重要的一个方面便是其安全性问题。 护连接和计算开销太大。 本文从基于点到点和基于端到端两方面的安全问题人 所以为了解决端到端的安全需求,我们应该更多地对传输 手,分析了点到点安全方案的不足之处从而着重研究阐述了 内容进行灵活通用的保护而不是保护连接,下面就是一种基于 基于XML的DES加密,RSA数字签名在J2ME中的应用并结 合一个网上银行密码保密实例给出完整的J2ME移动商务系 收稿日期:2004—12—14。杨雄,硕士生,主研领域:网络安全与网 统端到端安全解决方案。 络数据库。 维普资讯 http://www.cqvip.com 第4期 XMI.的端到端安全保护方案。 杨雄等:基于J2ME的无线移动商务安全应用研究 络上传输的密码,我们为保证其安全性利用加密、消息摘要、数 字签名三种措施分别保护密码的机密性、完整性、发送方的可信 性,然后将其嵌入XML格式的数据发出。在接收方首先用 3基于端到端的J2ME XML数据加密和签名 保护方案 3.1 系统结构框架概述 利用xml的缝壮,易理解,通用数据格式的特性我们可以非 常方便地将J2ME前端和J2EE后台的JSP,JavaBean组件完整 的连接起来。例如实际移动商务系统中当用户遗忘自己网上银 KXML解析器解析出各元素,利用本地存储的私钥解出RSA公 钥加密的DES加密钥,再用DES密钥解开加密的数据Data得 到原始值,然后和摘要Digest进行比较验证完整性,最后重新构 造公钥验证数字签名,确认发送方的身份。传输XML数据的框 架如图2。 DES』Ju密钥 加密数据 消息摘要 RSA数字签名 行密码向服务器提交自己用户名查询时,JSP和JavaBean组件 通过JDBC从数据库查询密码返回时出于密码在传输中的安全 性就可以采用基于xml格式的签名和加密方案。系统结构图如 图1所示。 J棚 lD  I 舢 一、 ) 回【 】   I< It誊 网1 系统结构 之所以采用JavaBean存取数据库数据是因为JavaBean组 件的可重用性良好,逻辑处理与JSP文件的数据表示可以良好 的隔离。为丁使服务器端町以生成机密信息的签名和加密的 xml文件以及J2ME客户端可以解析收到的XML文件,我们需 要正确的加密术包和XML解析器。由于MIDP设备不支持 XML和密码APl,所以我们引入第三方密码包Bouncy Castle,该 包使得在服务器端和J2ME端都可以轻松地进行签名,加密和 验证而解析XM[ 文件我们则利用支持MIDP设备的KXML解 析器。 3.2安全实现的具体细节 3.2.1 预处理部分——密钥处理在对JavaBean返回的 银行密码加密前,我们首先需要获取密钥,由于J2ME设备内存 和处理速度有限,通常在加密时选择加密速度较快的对称加密 算法DES,但是由于其加密钥和解密钥是相同的,在传输过程中 可能被监听,所以在此采用DES对称加密+RSA非对称加密相 结合的方法解决速度和密钥保护的问题。 原理为:MIDP端利用Bouncy Castle生成RSA密钥对,私钥 存储在本地,将公钥相关的参数传给服务器,服务器端接收传过 来的公钥,对DES加密钥进行加密。由于利用了RSA密钥体 系,即使RSA公钥在传输中被监听也无法解密DES加密钥。预 处理算法如下: 1)MIDP手持设备端利用Bouncy Castle包牛成RSA密钥对 KeyPairGenerator keyGen= KeyPairGenerator.getlnstanee(”RSA”);∥初始化密钥产生器 KeyGen:initialize(1024):∥初始化密钥长度 KeyPair key=keyGen.generaleKeyPair();∥产生密钥对 2)将公钥公开发给服务器端jsp文件 Stirng pubkey key.getPublic().toStrlng(); HttpConneetion c=(HttpConnection)Connector.open(”http:∥127.0.0.1/ index.jsp?k=” pubkey): 3)Jsp文件接收公钥准备用于加密DES密钥 String publickey request.get Parameter(k); 3.2.2 系统的具体实现本系统由客户端MIDP提供用 户名,Jsp获取用户名,调用JavaBean返回银行密码,对于在网 被加密 Data Digest Signature 图2传输的xml数据格式 系统流程图如3所示。 图3系统流程图 图中标号的几个关键步骤算法如下: 第一步至第三步略。 第4步用Bouncy Castle包对JavaBean返回的银行密码 pwd进行DES加密,生成摘要,数字签名并且加密DES密钥: 1)对返回的银行密码pwd进行SHA一1摘要 SHA1Digest digEng=new SHAI Digest(); byte[]pwdBytes=pwd.getBytes(); digEng.update(pwdBytes,O,pwdBytes.1ength); byte[]digest=new byte[digEng.getDigestSize()]; digEng.doFinal(digest,0); 2)生成RSA密钥对以便可以生成数字签名SeeureRandom sr=new Se. cureRandom();∥随机数 RSAKeyGenerationParameters kgp=new RSAKeyGenerationParameters(pubExp,sr,1024,80); ∥RSA密钥对生成器参数 RSAKeyPairGenerator RSAKeyPairGen=new RSAKeyPairGeneratnr(); RSAKeyPairGen.init(kgp);∥初始化密钥对生成器 AsymmetricCipherKeyPair keyPair=RSAKeyPairGen+generateKeyPair(); privKey=(RsAPrjvateCrtKeyParamelefs) keyPair.getPrivate();∥私钥 pubKey=(RSAKeyParameters) keyPair,getPublic();∥公钥 3)在服务器端用PSSSigner API生成RSA数字签名 SHA1 Digest digEng=new SHAI Digest(); RSAEngine ̄aEng:new RSAEngine(); byte[]pwdBytes pwd.getBytes(); PSSSigner signer=new PSSSigner( ̄aEng,digEng,64); signer.init(true,privKey);∥用私钥进行签名 signer.update(pwdBytes,0。pwdBytes.1ength); 维普资讯 http://www.cqvip.com 112 计算机应用与软件 2006生 byte[]sig=signer.generateSignature();∥生成数字签名 SHA1 Digest digEng=new StIAI Digest(): 4)服务器端生成DES密钥key, 密pwd RSAEngine rsaEng=new RSAEngine(); PSSSigner signer:HeW PSSSigner(maEng,digEng,64); Key key=keyGen.generateKey(); signer.init(false,puhKey); Cipher cipher=Cipher.getlnstance(”DES”): boolean cipher.inil(Ciphel".ENCRYPT—NODE,key); signer.verifySignature(pwd.getBytes().Base6.4.(tecode( ̄signature)) byte【]eipherpwd=cipher.doFinal(pwdBytes);∥加密pwd 5)预处理部分传米的RSA公钥publickey对DES加密钥key进行加密 SeeretKeySpec RSApubkey=new SecretKeySpec(publickey,”RSA”); ∥初始化公钥 byte[]P=key.getEneoded(); Cipher cipherRSA:Cipher.getInstance(”RSA”): cipherRSA.init(Cipher.ENCRYFF—MODE,RSApubkey); ∥加密模式,传人RSA公钥 byte[]cipherkey:eipherRSA.deHnal(P);//DES南钥被加密 第5步以银行密码9901为例,将上述元素嵌入生成XML文 件发送: <xmldata><eipherkey>Kn?J?????d一?\ ? 半e?h??u+rIB? 图4手机解析到的xml 图5验证结果显示 Q??%??:?I??>@??I-A!!?,?s?ks???一(一OVz????o)一?: 密文内容 N??¥口?1 77 3/7 m?N・? </eipherkey>ffDES密钥key的密文 <cipherpwd>?!=卜x?</cipherpwd> 4结束语 ∥银行密码9901的密文 <digest> HRI6v({Nm【1h3 FxiJU6dlq—I r1 JE-= 综上所述,我们可以看到利用XMI 可以很好的解决端到端 </digest>∥摘要 的安全问题,利用J2EE服务器端性能优势可以方便地完成机 <signature>…………</signature>∥RSA篇名 密数据的加密,篇名,嵌入XML后在手机端解析并且解密验证 <mad>・・・・・・</mad> 签名,从图4可以清楚地看到J2ME端解析得到的加密钥,数据 ∥在J2ME端藿构公钥的两个参数之一 本身,签名均是密文,从而保护了数据在传输过程中的机密性、 <exp>……</exp> 完整性、可信性三个方面,图5证明¨『该方案在移动商务安全系 ∥在J2ME端重构公钥的两个参数之一 统中完善的可行性.具有很好的实用性价值。 </xmldata> 第6步J2ME端的kxml解析XML文件,得到各部分内容: 参考文献 Document doe=new Document(); [1]http://java.sun.eom/j2me/. XmlParse parser=new XmlParser(isr); [2]http:∥WWW.1)ouncycastle.ore,/. doc.parse(parser): [3]http:www一106.ibm.conv'developerwork/java. Element root=doe.getRootElement();∥得到根元素 [4]廖旭、凌力,“无线java在移动设备上的安全应用[J ,《计算机工 int child—count=root.getChildCount(); 程》,2003,(19)109~111. for(int i=O;i<child—count;i++){Element kid=root.getElement(i); [5]姚一永、沈玲.“基于Bouncy Castle Crypto API的无线Web Services if(kid,getName().equals(”cipherkey”)){String cipherkey=kid.getText 应用安全[J 。《计算机应用》,2004。(3)53~55 ();}∥解析cipherkey元素 [6]Roger Riggs,J2ME无线设备编程[M].北京:机械工业出版社. …………∥解析xml余下的各元索 [7]MichaelJuntao Yuan,Securing Wireless J2ME[EB/OI ].http:∥WWW一 第7步在J2ME端利用预处理部分的私钥privatekey解密被 900.ibm.cam/developer Works/cn/seeurity/wi—secj2me/.2004—8. 加密的DES密钥cipherkey得到DES明文密钥key,再利用key 解密加密过的银行密码cipherpwd得到明文pwd。 第8步验证解密后的pwd生成的摘要和xml解析出的摘要 (上接第22页) digest是否相等,实现消息完整性确认。 参 考 文 献 第9步在J2ME端利用解析出的mad,exp内容重新构建验证 [1]史美林,计算机支持的协同工作理论与应用[M],北京:电子工业出 RSA数字签名的公钥: 版社,2001. Biglnteger modulus=new [2 J戴琼海等。“组播安全性研究和实现[J]”,《计算机工程与应用》, Biglnteger(Base64.decode(mad)); 2002,12:171—174. Biglnteger exponent=new [3]谭运猛等,“组播通信的安全性研究[J]”,《小型微型计算机系统》, BigInteger(Base64.decode(exp)); 2004,25(12):2190~2193. RSAKeVPammeters pubKey=new 【4]徐明伟等,“组播密钥管理的研究进展[J]'',《软件学报》,2004,15 RsAK yPammeters(false,modulus,exponent);//重构公钥 (1):141 150. 第lO步验证解密后的银行密码pwd与kxml解析得到的数字 [5]朱文涛等,“安全组播中密钥分配问题的研究[J]'',《软件学报》。 签名signature,实现发信方可信性确认: 2003,14(12):2052~2059. 

因篇幅问题不能全部显示,请点此查看更多更全内容