- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于J2MEXML数字签名研究与实现
基于J2MEXML数字签名研究与实现
[摘要]XML数字签名技术可以在无线Web服务应用程序提供轻量级且灵活的安全解决方案。本文讨论了XML数字签名及其应用程序的重要性,并提供了Bouncy Castle密码包的数字签名API,最后给出了在J2ME/MIDP无线客户端和JSP页后台之间的安全XML消息传递环境中的实现示例。
[关键词]J2ME XML 数字签名
一、引言
基于Java的Web服务和无线Java开发是JavaOne的两个最突出的主题。它们代表普及计算领域中未来的后端和前端Java技术。
Java 平台可以在无线 Web 服务应用程序开发中扮演几个重要角色。在无线端,Java 2 Micro Edition(J2ME)为所有无线设备(从蜂窝电话到复杂的家用无线信息家电)提供了跨设备的兼容性、高级语言功能和大量库。J2ME的一个关键组件是移动信息设备框架(Mobile Information Device Profile:MIDP),它在蜂窝电话和低端PDA上定义Java API和运行时环境。由于庞大数量的低端设备,期望在将来能够广泛部署MIDP。
从Web服务端,Java2Enterprise Edition(J2EE)已经具有所有必需的API和库存处理Web服务XML消息。通过Web服务接口或网关,可以方便地将用 EJB技术实现的核心J2EE功能、JDBC API和RMI API用于外部世界。为了将这些特性集合起来并启用无线Web服务应用程序,还提出了J2MEWeb服务规范,目前它应用在JavaCommunityProcess中。
虽然无线Web服务在普及移动商业世界中应用广泛,但当前技术仍不成熟。安全性仍是剩下待解决的问题之一。本文将讨论一种常用的安全性技术――数字签名,研究如何在 XML 消息中使用数字签名来保证端对端的数据完整性,以及在当前 MIDP 设备上使用数字签名的可行性。
二、使用数字签名保证数据完整性
数据完整性是通信安全性的最重要方面之一。数据通信在无线因特网上特别容易受到攻击,而一种及时出现的援救工具是公钥基础设施(Public Key Infrastructure:PKI)和数字签名。在 PKI 数字签名模式中,每一方都有两个密码术密钥:公钥可以被任何人使用;而私钥是保密的,只有某个人本身可以使用。用私钥加密的消息只能由相应的公钥正确解密。当发送方发送消息时,他可以将相同消息的私钥加密版及??的公钥与该消息一起发送。接收方使用发送方的公钥来解密加密版本。如果它与明文消息匹配,那么接收方可以知道该消息确实可信。该消息的私钥加密版用作完整性验证记号,我们将它称为“数字签名”。
因为原始消息可能相当长,而且生成和验证数字签名的公钥算法计算复杂度是指数级的,所以发送方通常计算称为“摘要”的原始消息的短版本并且仅对该版本进行数字形式的签署。摘要具有固定长度,它是任何长度的输入消息的单向散列;其计算速度非常快。接收方首先验证接收的消息是否产生正确摘要。如果该摘要不匹配,则在执行任何公钥算法之前拒绝该消息。这可以有助于防止攻击造成堵塞,在这种攻击中,攻击者通过用伪造的公钥请求填斥服务器,以耗尽它的计算资源。
在大多数实际应用程序中,公钥本身由可信的权威部门进行数字签名,并成为“数字证书”来验证发送方的标识。不过,数字证书的处理不在本文范围内,所以在下列示例中,将假设发送方是可信的并使用未签署的公钥来说明方法。
三、对XML进行数字签名
XML正成为Web服务世界中一个主要的数据交换协议。驱动 Web服务的XML消息在到达目的地之前,通常需要经过多个中间环节。因此,保护从端到端的通信内容是重要的。完成这一任务的最好方法是,将XML文档及其安全性信息(如签名、摘要和密钥等等)都装运在一起,作为单个文档。
XML数字签名是将数字签名添加到XML文档的W3C规范。发送方可以选择对整个文档或者仅它的一部分进行数字签名。数字签名、摘要和公钥被格式化成XML元素。那些安全性信息的额外元素可以封装整个原始XML消息,或者可以将它们嵌入原始消息。为方便起见,将在本文中使用封装格式。另外,将密钥分成几个参数并将那些参数传递到公钥元素KeyInfo下的单独XML元素中,以代替使用编码的公钥证书。这在密钥和处理它们的Java代码之间建立了更明显的连接。
四、使用Bouncy Castle Crypto API进行数字签名和验证的完整实现步骤
由于篇幅有限,本文将简略地论述XML数字签名规范,以及Bouncy Castle密钥生成器、编码引擎、数字签名签名引擎和摘要引擎的
文档评论(0)