基于JCE的数据加密密钥交换实现技术

时间:2022-10-20 11:15:11

基于JCE的数据加密密钥交换实现技术

摘要:在介绍了XML的安全特性和其加密规范后,从Diffie-Hellman密钥协商的生成原理出发,运用XML加密规范所提供的对数据对象进行密钥协商的机制,并以经典的D-H密钥协商为例,依据规范所制定的原则,运用JCE所具有的安全特性为实现技术,就如何对密钥协商交换进行了探讨,从而为XML加密规范的实际应用探索了一种方式,并以此说明建立自主加密扩展的重要意义。

关键词:XML;数据加密;密钥协商;JCE

中图分类号:TP309文献标识码:A文章编号:1009-3044(2007)03-10596-01

1 引言

密钥管理是建立加密信息安全系统的基础核心,其内容包括密钥生成、密钥存储、密钥分发/协议和密钥验证等基本功能,保证加密系统的有效和安全,需要有相应的安全策略管理和安全服务体系,以建立起数据交换各方安全的信任关系,并实现互操作化的安全协商与信任机制。

XML数据加密规范经W3C多次大规模的讨论和修改,已经于2002年4月成为推荐标准,作为对于XML数据对象的加密规范,该文档定义了XML数据加密的处理流程和结果表示,并运用了XML-Schema来描述加密内容模式结构,以及可粒度化的加密实现等,提供了在应用上的对不同对象不同内容的特殊处理方式,即可在不同敏感级,使XML文档可选择的相异性得以实用。根据W3C提出的XML加密语法与处理规范,EncryptedData是一种抽象类型,从其可派生出与内容模式相关的EncryptedData和EncryptedKey元素以及相应的属性,并扩展以Diffie-Hellman密钥协商为基础的XML密钥协商的处理机制[1]。

与XML安全特性实现密切相关的Java安全体系提供了分布式Java应用程序的可靠方法,成为安全模型建立的基本组件和工具。其中,在Java2.0运行上平台上的Java密码扩展(JCE)为第三方商业级的加密技术提供了可能,可建立起标准服务提供者和应用程序接口的相应模型。

2 XML安全与加密规范

XML安全体系提供了满足Web安全性需要的规范集合,这些规范本身符合XML1.0所规定的样式要求并延展了XML标准的特性:

(1)XML安全使用相应的安全技术(如XMLSchema),定义了表示XML安全信息的XML词汇表以及共享该词汇表的机制。

(2)提供了应用上的可扩展性与灵活性,允许安全特性应用到XML文档、元素、元素内容以及任意的二进制数据对象,并能通过命名空间和类型定义扩展XML词汇表。

(3)可应用到端一端的加密,并始终保持安全与内容相关而与传输管道无关。

(4)通过URI联系机制与安全处理模式定义,尽可能地利用现有的加密与安全技术。例如,对于X.509证书,被简单地编码为文本格式,而无需重新定义。

核心的XML安全规范包括以下五个部分:

(1)为完整性和鉴别而考虑的XML数字签名规范。

(2)为机密性保护所提供的XML加密规范。

(3)用于密钥管理的XKMS。

(4)提供鉴别和权限断言的SAML,即安全断言标识语言。

(5)声明授权规则的XACML,即XML访问控制标识语言[2]。

XML数据加密混合密码体制,即所谓的电子信封(envelope)技术。但是,以上系统需要对公钥进行验证,面临着公钥的分发和合法身份的绑定等问题,要由第三方信任才能得以完成。为此,本文正是基于以上背景,根据XML加密规范,运用jce安全特性,实现了通信双方无需知道对方内容的密钥协商管理协议。

3 协议的JCE实现

Diffie-Hellman算法其安全性是建立在有限域中计算离散对数困难性的基础上,运用该算法可用于通信双方(或多方)的密钥交换,即各方按照Diffie-Hellman协议所规定的通信规则互换算法生成数,最后产生共用的对称密钥。

首先,甲乙通信双方约定一个大素数n和一个数g,g为模n的原根,因此g与模n互质。这样,任何1到期n-1之间的整数k都有一个对应整数q使得k=gq(mod)n,n和g的值可以公布或在甲乙方之间交换。g和n的选择对系统安全性有较大影响,应选择较大的n(512位以上),数(n-1)/2也应该是一个素数。

JCE通过javax.crypto的Keyagreement类支持密钥协商。其getInstance( )方法可以指定密钥协商算法和可选提供者,JCE支持Diffie-Hellman密钥协商协议。要让双(多)方达成密钥协商,各方应生成和初始化对象:

Keyagreement K=Keyagreement.getInstance("DH")

然后,参与密钥协商的各方执行密钥协商的不同阶段,这些阶段随所用的密钥协商协议不同而不同,对于Diffie-Hellman密钥协商只有一个阶段,即用另一方的公开密钥(y值)更新Keyagreement对象,doPhase( )调用之后,可以由generateScret( )产生双方通信的密钥[3]。

4 加密实例

用双方的私有密钥调用(即甲方的x值,乙方的y值)调用对象init( )方法,init( )方法有四种形式,可以组合Keyagreement中要指定的SecureRandom与AlgorithmParameterSpec对象,产生的具体密钥随每个程序调用而不同,但各方最后生成的共享(秘密)密钥值完全相同。至此,可以运用该密钥值对设定的某个具体文档进行加密,以下是加密后,加密文档的生成例子:

是从抽象类型中派生的XML核心元素,元素不仅包含加密数据,而且在替换加密文档后作为新文档的根元素[4]。

5 结束语

以上实例反映了运用JCE在实现XML加密规范中的实际应用,其技术机制即保留了规范所规定要求又不失有效性,是WEB数据加密的可选技术之一。

JCE加密扩展(JCA,Java Cryptography Architecture)是建立在JCA(加密体系结构)基础上以提供基本数据机密性、完整性和源标识为主要目的安全扩展,尽管加密是任何安全系统的核心部分,但在JDK中却把JCE作为扩展放在安全体系结构之外,其原因是为了巧妙避开美国出口政策的限制[5]。

此外,JCE还提供了标准的安全服务提供者和应用程序接口模型,使得许多商业级的加密技术得以第三方实现,因此,开发自主的加密扩展体系成为可能,同时,由于加密涉及到国家政治、经济、军事、科技等方面的需要,所以,建立自主的加密体系实现技术更显得尤为迫切。

参考文献:

[1]P.Samarati,E.Bertino,S.Jaiodia. An Authorization Model for a Distributed Hypertext System. IEEE Transactions on Knowledgeand Data Engineering,Vol8,No4,Augest1999:275-278.

[2]Elisa,Barbara,Carminati. XML Security Specification On Key Agreement. Information Security Technical Report,Vol.6No.2,2004:230-237.

[3]Atul Kahate. 密码学与网络安全安全. 北京:清华大学出版社,2005:56-78.

[4](英)Mark Birbeck, 等. XML高级编程(第二版). 北京:机械工业出版社,2002:125-128.

[5]龚力. XML数据加密的Diffle-Hellman实现. 现代计算机,2003,5: 62-63.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:“赤手空拳”也能截取视频画面等 下一篇:《黄易群侠传》狂飙60级超快速佛门升级全攻略