eff算法
基于Java的IDEA加密算法探讨
随着Internet的迅速发展,电子商务的浪潮势不可挡,日常工作和数据传输都放在Internet网上进行传输,大大提高了效率,降低了成本,创造了良好的效益。但是,由于 Internet网络协议本身存在着重要的安全问题(IP包本身并不继承任何安全特性,很容易伪造出IP包的地址、修改其内容、重播以前的包以及在传输途中拦截并查看包的内容),使网上的信息传输存在巨大的安全风险电子商务的安全问题也越来越突出。加密是电子商务中最主要的安全技术,加密方法的选取直接影响电子商务活动中信息的安全程度,在电子商务系统中,主要的安全问题都可以通过加密来解决。数据的保密性可通过不同的加密算法对数据加密来实现。
对我国来讲,虽然可以引进很多的外国设备,但加密设备不能依靠引进,因为它涉及到网络安全、国家机密信息的安全,所以必须自己研制。当前国际上有许多加密算法,其中DES(Data Encryption Standard)是发明最早的用得最广泛的分组对称加密算法,DES用56位蜜钥加密64位明文,输出64位密文,DES的56位密钥共有256 种可能的密钥,但历史上曾利用穷举攻击破解过DES密钥,1998年电子边境基金会(EFF)用25万美元制造的专用计算机,用56小时破解了DES的密钥,1999年,EFF用22小时完成了破解工作,使DES算法受到了严重打击,使它的安全性受到严重威胁。因为JAVA语言的安全性和网络处理能力较强,本文主要介绍使用IDEA(Internation Data Encryption Algorithm )数据加密算法在Java环境下实现数据的安全传输。
一、IDEA数据加密算法
IDEA数据加密算法是由中国学者来学嘉博士和着名的密码专家 James L. Massey 于1990年联合提出的。它的明文和密文都是64比特,但密钥长为128比特。IDEA 是作为迭代的分组密码实现的,使用 128 位的密钥和 8 个循环。这比 DES 提供了更多的 安全性,但是在选择用于 IDEA 的密钥时,应该排除那些称为“弱密钥”的密钥。DES 只有四个弱密钥和 12 个次弱密钥,而 IDEA 中的弱密钥数相当可观,有 2 的 51 次方个。但是,如果密钥的总数非常大,达到 2 的 128 次方个,那么仍有 2 的 77 次方个密钥可供选择。IDEA 被认为是极为安全的。使用 128 位的密钥,蛮力攻击中需要进行的测试次数与 DES 相比会明显增大,甚至允许对弱密钥测试。而且,它本身也显示了它尤其能抵抗专业形式的分析性攻击。
二、Java密码体系和Java密码扩展
Java是Sun公司开发的一种面向对象的编程语言,并且由于它的平台无关性被大量应用于Internet的开发。Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factory方法来创建类的例程,然后把实际的加密函数委托给提供者指定的底层引擎,引擎中为类提供了服务提供者接口在Java中实现数据的加密/解密,是使用其内置的JCE(Java加密扩展)来实现的。Java开发工具集1.1为实现包括数字签名和信息摘要在内的加密功能,推出了一种基于供应商的新型灵活应用编程接口。Java密码体系结构支持供应商的互操作,同时支持硬件和软件实现。Java密码学结构设计遵循两个原则:(1)算法的独立性和可靠性。(2)实现的独立性和相互作用性。算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器。Java运行环境Sun版本时,提供一个缺省的提供器Sun。
三、Java环境下的实现
1.加密过程的实现
void idea_enc( int data11[], /*待加密的64位数据首地址*/ int key1[]){
int i ;
int tmp,x;
int zz[]=new int[6];
for ( i = 0 ; i < 48 ; i += 6) { /*进行8轮循环*/
for(int j=0,box=i; j<6; j++,box++){
zz[j]=key1[box];
}
x = handle_data(data11,zz);
tmp = data11[1]; /*交换中间两个*/
data11[1] = data11[2];
data11[2] = tmp;
}
tmp = data11[1]; /*最后一轮不交换*/
data11[1] = data11[2];
data11[2] = tmp;
data11[0] = MUL(data11[0],key1[48]);
data11[1] =(char)((data11[1] + key1[49])%0x10000);
data11[2] =(char)((data11[2] + key1[50])%0x10000);
data11[3] = MUL(data11[3],key1[51]);
}
2.解密过程的实现
void key_decryExp(int outkey[])/*解密密钥的变逆处理*/
{ int tmpkey[] = new int[52] ;
int i;
for ( i = 0 ; i < 52 ; i++) {
tmpkey[i] = outkey[ wz_spkey[i] ] ; /*换位*/
}
for ( i = 0 ; i < 52 ; i++) {
outkey[i] = tmpkey[i];
}
for ( i = 0 ; i < 18 ; i++) {
outkey[wz_spaddrever[i]] = (char)(65536-outkey[wz_spaddrever[i]]) ; /*替换成加法逆*/
}
for ( i = 0 ; i < 18 ; i++){
outkey[wz_spmulrevr[i]] =(char)(mulInv(outkey[wz_spmulrevr[i]] )); /*替换成乘法逆*/
}
}
四、总结
在实际应用中,我们可以使用Java开发工具包(JDK)中内置的对Socket通信的支持,通过JCE中的Java流和链表,加密基于Socket的网络通信.我们知道,加密/解密是数据传输中保证数据完整性的常用方法,Java语言因其平台无关性,在Internet上的应用非常之广泛.使用Java实现基于IDEA的数据加密传输可以在不同的平台上实现并具有实现简洁、安全性强等优点。
B. 矩形脉冲电流的有效值算法
矩形脉冲电流的有效值悄枣做启衡算法岩祥是指计算矩形脉冲电流的有效值的算法。有效值是指一个信号的平均值,它可以用来衡量信号的强度。矩形脉冲电流的有效值可以用下面的公式来计算:
I_eff = I_p/√2
其中,I_p是矩形脉冲电流的峰值值。
C. 信息加密技术的加密技术分析
加密就是通过密码算术对数据进行转化,使之成为没有正确密钥任何人都无法读懂的报文。而这些以无法读懂的形式出现的数据一般被称为密文。为了读懂报文,密文必须重新转变为它的最初形式--明文。而含有用来以数学方式转换报文的双重密码就是密钥。在这种情况下即使一则信息被截获并阅读,这则信息也是毫无利用价值的。而实现这种转化的算法标准,据不完全统计,到现在为止已经有近200多种。在这里,主要介绍几种重要的标准。按照国际上通行的惯例,将这近200种方法按照双方收发的密钥是否相同的标准划分为两大类:一种是常规算法(也叫私钥加密算法或对称加密算法),其特征是收信方和发信方使用相同的密钥,即加密密钥和解密密钥是相同或等价的。比较着名的常规密码算法有:美国的DES及其各种变形,比如3DES、GDES、New DES和DES的前身Lucifer; 欧洲的IDEA;日本的FEAL N、LOKI?91、Skipjack、RC4、RC5以及以代换密码和转轮密码为代表的古典密码等。在众多的常规密码中影响最大的是DES密码,而最近美国NIST(国家标准与技术研究所)推出的AES将有取代DES的趋势,后文将作出详细的分析。常规密码的优点是有很强的保密强度,且经受住时间的检验和攻击,但其密钥必须通过安全的途径传送。因此,其密钥管理成为系统安全的重要因素。另外一种是公钥加密算法(也叫非对称加密算法)。其特征是收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推导解密密钥。比较着名的公钥密码算法有:RSA、背包密码、McEliece密码、Diffe Hellman、Rabin、Ong Fiat Shamir、零知识证明的算法、椭圆曲线、EIGamal算法等等⑷。最有影响的公钥密码算法是RSA,它能抵抗到目前为止已知的所有密码攻击,而最近势头正劲的ECC算法正有取代RSA的趋势。公钥密码的优点是可以适应网络的开放性要求,且密钥管理问题也较为简单,尤其可方便的实现数字签名和验证。但其算法复杂,加密数据的速率较低。尽管如此,随着现代电子技术和密码技术的发展,公钥密码算法将是一种很有前途的网络安全加密体制。这两种算法各有其短处和长处,在下面将作出详细的分析。 在私钥加密算法中,信息的接受者和发送者都使用相同的密钥,所以双方的密钥都处于保密的状态,因为私钥的保密性必须基于密钥的保密性,而非算法上。这在硬件上增加了私钥加密算法的安全性。但同时我们也看到这也增加了一个挑战:收发双方都必须为自己的密钥负责,这种情况在两者在地理上分离显得尤为重要。私钥算法还面临这一个更大的困难,那就是对私钥的管理和分发十分的困难和复杂,而且所需的费用十分的庞大。比如说,一个n个用户的网络就需要派发n(n-1)/2个私钥,特别是对于一些大型的并且广域的网络来说,其管理是一个十分困难的过程,正因为这些因素从而决定了私钥算法的使用范围。而且,私钥加密算法不支持数字签名,这对远距离的传输来说也是一个障碍。另一个影响私钥的保密性的因素是算法的复杂性。现今为止,国际上比较通行的是DES、3DES以及最近推广的AES。
数据加密标准(Data Encryption Standard)是IBM公司1977年为美国政府研制的一种算法。DES是以56 位密钥为基础的密码块加密技术。它的加密过程一般如下:
① 一次性把64位明文块打乱置换。
② 把64位明文块拆成两个32位块;
③ 用机密DES密钥把每个32位块打乱位置16次;
④ 使用初始置换的逆置换。
但在实际应用中,DES的保密性受到了很大的挑战,1999年1月,EFF和分散网络用不到一天的时间,破译了56位的DES加密信息。DES的统治地位受到了严重的影响,为此,美国推出DES的改进版本-- 三重加密(triple Data Encryption Standard)即在使用过程中,收发双方都用三把密钥进行加解密,无疑这种3*56式的加密方法大大提升了密码的安全性,按现在的计算机的运算速度,这种破解几乎是不可能的。但是我们在为数据提供强有力的安全保护的同时,也要化更多的时间来对信息进行三次加密和对每个密层进行解密。同时在这种前提下,使用这种密钥的双发都必须拥有3个密钥,如果丢失了其中任何一把,其余两把都成了无用的密钥。这样私钥的数量一下又提升了3倍,这显然不是我们想看到的。于是美国国家标准与技术研究所推出了一个新的保密措施来保护金融交易。高级加密标准(Advanced Encryption Standard)美国国家技术标准委员会(NIST)在2000年10月选定了比利时的研究成果Rijndael作为AES的基础。Rijndael是经过三年漫长的过程,最终从进入候选的五种方案中挑选出来的。
AES内部有更简洁精确的数学算法,而加密数据只需一次通过。AES被设计成高速,坚固的安全性能,而且能够支持各种小型设备。AES与3DES相比,不仅是安全性能有重大差别,使用性能和资源有效利用上也有很大差别。虽然到现在为止,我还不了解AES的具体算法但是从下表可以看出其与3DES的巨大优越性。
还有一些其他的一些算法,如美国国家安全局使用的飞鱼(Skipjack)算法,不过它的算法细节始终都是保密的,所以外人都无从得知其细节类容;一些私人组织开发的取代DES的方案:RC2、RC4、RC5等。 面对在执行过程中如何使用和分享密钥及保持其机密性等问题,1975年Whitefield Diffe和Marti Hellman提出了公开的密钥密码技术的概念,被称为Diffie-Hellman技术。从此公钥加密算法便产生了。
由于采取了公共密钥,密钥的管理和分发就变得简单多了,对于一个n个用户的网络来说,只需要2n个密钥便可达到密度。同时使得公钥加密法的保密性全部集中在及其复杂的数学问题上,它的安全性因而也得到了保证。但是在实际运用中,公共密钥加密算法并没有完全的取代私钥加密算法。其重要的原因是它的实现速度远远赶不上私钥加密算法。又因为它的安全性,所以常常用来加密一些重要的文件。自公钥加密问世以来,学者们提出了许多种公钥加密方法,它们的安全性都是基于复杂的数学难题。根据所基于的数学难题来分类,有以下三类系统目前被认为是安全和有效的:大整数因子分解系统(代表性的有RSA)、椭圆曲线离散对数系统(ECC)和离散对数系统 (代表性的有DSA),下面就作出较为详细的叙述。
RSA算法是由罗纳多·瑞维斯特(Rivet)、艾迪·夏弥尔(Shamir)和里奥纳多·艾德拉曼(Adelman)联合推出的,RAS算法由此而得名。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的着名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。它得具体算法如下:
① 找两个非常大的质数,越大越安全。把这两个质数叫做P和Q。
② 找一个能满足下列条件得数字E:
A. 是一个奇数。
B. 小于P×Q。
C. 与(P-1)×(Q-1)互质,只是指E和该方程的计算结果没有相同的质数因子。
③ 计算出数值D,满足下面性质:((D×E)-1)能被(P-1)×(Q-1)整除。
公开密钥对是(P×Q,E)。
私人密钥是D。
公开密钥是E。
解密函数是:
假设T是明文,C是密文。
加密函数用公开密钥E和模P×Q;
加密信息=(TE)模P×Q。
解密函数用私人密钥D和模P×Q;
解密信息=(CD)模P×Q。
椭圆曲线加密技术(ECC)是建立在单向函数(椭圆曲线离散对数)得基础上,由于它比RAS使用得离散对数要复杂得多。而且该单向函数比RSA得要难,所以与RSA相比,它有如下几个优点:
安全性能更高 加密算法的安全性能一般通过该算法的抗攻击强度来反映。ECC和其他几种公钥系统相比,其抗攻击性具有绝对的优势。如160位 ECC与1024位 RSA有相同的安全强度。而210位 ECC则与2048bit RSA具有相同的安全强度。
计算量小,处理速度快 虽然在RSA中可以通过选取较小的公钥(可以小到3)的方法提高公钥处理速度,即提高加密和签名验证的速度,使其在加密和签名验证速度上与ECC有可比性,但在私钥的处理速度上(解密和签名),ECC远比RSA、DSA快得多。因此ECC总的速度比RSA、DSA要快得多。
存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。
带宽要求低 当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。而公钥加密系统多用于短消息,例如用于数字签名和用于对对称系统的会话密钥传递。带宽要求低使ECC在无线网络领域具有广泛的应用前景。
ECC的这些特点使它必将取代RSA,成为通用的公钥加密算法。比如SET协议的制定者已把它作为下一代SET协议中缺省的公钥密码算法。