加密算法的目的是为了保护信息的保密性、完整性和安全性,简单地说就是信息的防伪造与防窃取,这一点在网上付费系统中特别有意义。那么我今天就给大家介绍一下变长密钥的IDEA加密算法是如何实现的。

变长密钥的IDEA加密算法的研究与实现

一、数据加密标准DES的衰落

DES加密算法是由美国国家标准局于1977年公布的由IBM公司研制的一种加密算法,规定作为非机要部门使用的数据加密标准。自公布以来,它一直超越国界成为国际上商用保密通信和计算机通信的最常用的加密算法。多年来,它活跃在国际保密通信舞台上。进入20世纪90年代以来,密码学家Shamir等人提出了“差分分析法”、 “线性逼近法等攻击法”。DES加密算法,其密钥实际长度是56比特,作256次穷举,就肯定能找刭加密使用的密钥。1993年国外有人建造的穷举DES破译了平均只用3.5个小时成功破解一个DES加密算法的密钥。因为密码学在不断发展变化之中,人类的计算能力也像摩尔定律提到的一样飞速发展,所以,DES正逐步淡出保密通信的舞台。

二、国际数据加密算法IDEA的提出

IDEA加密算法最早于1991年欧洲密码学会议上由中国学者来学嘉博士与著名的密码学家James Massey联合提出的。这是一个块加密算法,加密的数据块为64比特,密钥长度是128比特。该加密算法在硬件和软件上均可高速进行加解密。

该加密算法加密过程与解密过程相同,仅加密密钥与解密密钥不同(解密密钥可由加密密钥得到,它们不是相互独立的,因此,它仍然是对称密钥。

三、IDEA加密算法简介

IDEA是一个分组长度为64位的分组加密算法,密钥长度为128位,同一个算法既可用于加密又可用于解密。IDEA既用混乱又用扩散。该加密算法的设计原则是一种来自于不同代致群的混合运算,且这3个代敦群进行的运算,无论用硬件还是软件都易于实现。算法输入的64位数据被分成4个16位子分组作为第一轮的输入,总共有8轮迭代。在每一轮中,相互间进行运算同时也与6个16位的子密钥进行运算(每轮
均不同),最后还与4个16位的子密钥进行输出变换,产生输出,其中共52个16位的子密钥参与运算。

(1)子密钥的产生

输入:128比特密钥;输出:52个16比特的子密钥。

(2)加密过程

输入:52个子密钥和64比特数据;输出:64比特数据。

(3)解密过程

IDEA加密算法的加密过程与解密过程是相同的,仅加密子密钥与解密予密钥不相同,且加密子密钥与解密子密钥一一对应。

四、 IDEA加密算法的弱密钥

尽管IDEA加密算法有很强的抗攻击能力,但其中也存在大量的弱密钥。在标准IDEA算法产生的密钥中,其中的一类(2的23次方个)密钥存在一个线性因子;另一类(2的35次方个)具有一个概率为1的环形阶;还有一类(2的51次方个),可以解一组含有12个变量的16个非线性布尔等式测试出所使用的密钥是否属于这一类,若使用的密钥属于这一类,那么就有高效破译这一密钥的方法,见表1。

变长密钥的IDEA加密算法的研究与实现

通过这些特别选定的密文可以测试和观察出密钥所含的线性因子,而且在这8轮的迭代中,线性因子不断地扩展进入密钥,最后可得出其中的55位密钥的值,具体为第26-40,72-83和99-122,这也就是说原来设想的密钥空间为2的128次方,但现在有2的51次方个为弱密钥,最后密钥空间为2的77次方。

五、变长密钥的IDEA加密算法

纵观IDEA加密解密的整个过程,可以发现在整个加解密过程中并没有直接使用这个128比特的密钥,而是使用由它产生的那52个子密钥(共52*16=832比特),并且在整个迭代过程中没有两个子密钥直接进行运算,也就是说这52个子密钥是相对独立的(笔者已在机器上实现了整个算法,并且任意改变其中的一个或多个子密钥均不影响加密,只要解密子密钥由对应的加密子密钥生成就可以进行解密)。那
么,就可以在保证安全的前提下改进IDEA算法,使密钥的长度成为可变的,以满足不同用户的需求,并且在算法中除去了标准IDE加密短发A中的弱密钥。

这52个子密钥的生成将是变长密钥的突破口。那么要怎样生成这52个子密钥呢?

为了提高密钥的安全性,我们提出了新的方法。

算法VLK://Variable Lcngth of Keys

输入:可变长的密钥password

输出:52个16比特的子密钥sub_key

Step1、接收用户输入的变长密钥password,t:=O(计数器)。

Stcp2、计算密钥的长度,即r:=length(password)。

Step3、考察r是否与Max(值为832)互素,即gcd( r,Max)=1?是则转Step4,否则处理password的长度(如:可在串尾加入一位原申最后一位相反。例:若原串为100110,处理后为1001101),转Step2。

Step4、计算k,使k满足 k⊙r=1mod Max。//k为r的逆。

SLep5、考察password的首位,若为1则将password循环左移k比特,否则将password循环右移k比特。

Step6、将password逐位赋值给tmp_kcy[t],t:=t+1,t>832?是则转Step7,否则转Slep2。

Stcp7、输出:将rmp_key(共832比特,52个16比特)存入二维数组sub_key中,前8组每组6个,第9组4个。

六、算法VLK的讨论与分析

(1)在第四部分中介绍了IDEA的弱密钥,它的主要依据就是表1,根据这些不断重复出现的位,用特别选择的密文进行加密可以分析得出其中的51位的值。在算法VLK中,由于对初始密钥password的不断改变,而且密钥移动的长度与password的长度是密切相关的,并且左移或是右移还由具体的值来决定,也就是说,类似表1是由password的长度和具体的值来决定的,只有知道了具体的password,才能得出表1,而且还要注意在这个表巾并不是所有的位都来自下初始的password(算法有补位处理)。

前面我们已经给定了密钥的固定长度(128)就可以得出表1;而在算法VLK中,即使给定了password的长度,仍无法得出表1(密钥的左移、右移以及补位操作都与具体的password的值有关),无法进行分析。由此可见,算法VLK产生的52个子密钥没有固定的位置生成表1(即使给定password的长度),因此也就没有一套固定的分析方法(即使是对固定长度的password的也没有固定的分析方法),所以算法VLK消除了分析弱密钥的基础,故解决了标准的IDEA加密算法中存在的弱密钥问题。

(2)该加密算法的复杂性没有改变,循环次数为832/r(标准IDEA算法是F128, k=25的一个特例)。只是在循环内部的运算量有所增加,因而对系数有影响,但数量级没有发生改变,均为O(n)级。

(3)该算法通过巧妙地引入k(每次循环k均在变),尽可能地避免了子密钥相同的情况,从而加大了密钥的强度。

(4)该算法对于length( password)< 832 0r length(passWDrd)> 832均有效。对于小于等于832位的password是显然的;而对于大干832位的password刚由Step4保证并不是简单地取出前832位来作为子密钥,也就是说对于前832位相同的两个不同的password经此算法生成的子密钥仍是不同的。

(5)该算法没有改变标准IDEA算法的加密过程,而是在用户密钥与子密钥的生成上给予了加强。用户可以随意输入密钥,通过该算法可以生成较强的子密钥;同时也可以满足对密钥强度要求较高的用户,做到密钥窀间为832位(而不是128位),因而安全性不会低于标准的IDEA算法。

七、变长IDEA加密算法的抗攻击能力

主要的攻击方式可以分为以下3种:

(1)唯密文攻击

在这种攻击中,主要采用强攻击(穷举式攻击)方式:对于长度为l的密钥的攻击次数为21,长度为2的攻击次数为22.…,长度为n的攻击次数为2n,对于变长IDEA算法的攻击次数为:21+22+23+…+2i(i=1.2.3,..)(注意这里的i理论上可以取到无穷)。熟悉IDEA加密算法的攻击者可采用攻击子密钥的方法进行攻击,那么它的攻击次数为2的832次方,远远大于标准IDEA算法的2的128次方。

(2)已知明文攻击

(3)选择明文攻击

面对以上攻击法,IDEA设计者尽最大努力使该算法不受差分密码分析的影响。有学者己证明IDEA加密算法在其8圈迭代的第4圈之后便不再受差分密码分析的影响,这也就是至今尚未有对IDEA算法行之有效的分析方法的原因。那么,对IDEA的攻击到目前为止仍只能采用强攻击方式,攻击强度见唯密文攻击方法。

本文提出了变长密钥的IDEA加密算法,该算法解决了变长密钥带来的不便,为用户提供了一个方便、灵活的加密方法,增进了与用户的友好性,特另IJ是方便灵活地解决了在混合密钥系统中对称密钥与非对称密钥的接口问题(因为非对称密钥的密钥长度没有固定值,不同的密码系统有不同的密钥长度如:RSA和ECC的长度相差较大,即使是同样的密码系统也视用户需要提供了不同的长度密钥如:ECC提供的155,163,283等,这就造成了在混合密钥系统中的接口问题);同时该加密算法也解决了标准IDEA算法存在的弱密钥问题,最后还对该加密算法的抗攻击能力做出了分析。

小知识之摩尔定律

摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度。