NESSIE是歐洲一項為期三年的密碼標(biāo)準(zhǔn)計劃,繼美國推出了AES計劃以后,歐洲于2000年1月1日啟動了NESSIE計劃,以適應(yīng)21世紀(jì)信息安全發(fā)展的全面需求。兩者相比較,NESSIE比 AES涉及的范圍更廣,這套標(biāo)準(zhǔn)涉及分組密碼、流密碼、公鑰密碼、消息認(rèn)證碼、數(shù)字簽名和雜湊函數(shù)。其中分組密碼的征集要求是密鑰長度至少128bit(普通)/256bit(高級),分組長度至少I28bit;傳統(tǒng)類密碼分組長度64bit,密鑰長度至少128bit。
在信息時代的發(fā)展當(dāng)中,此項課題的研究有較好的應(yīng)用前景,并符合信息安全發(fā)展的趨勢和潮流。Noekeon算法可以應(yīng)用在對不同場合的加解密之中,同時關(guān)于Noekeon算法的研究成果并不多,本文通過對Noekeon算法的加解密流程和速度進(jìn)行分析研究,并用C#語言實現(xiàn)編程,從而使我們對Noekeon算法有一個更清晰、更直觀的認(rèn)識。
Noekeon算法是NESSIE公布的17個候選算法之一,它是由比利時的Joan Daemen、Michael Peeters、Gilles Van Assche和Vincent Rijmen共同設(shè)計的一個分組密碼,它的分組長度和密鑰長度都是128比特,整體結(jié)構(gòu)采用的是16輪SP網(wǎng)絡(luò),每一圈由線性變換、字節(jié)輪換、32個平行的4bit-4bitS盒組成,該算法的加解密非常相似。為了保證加解密相似,設(shè)計者要求每個基本模塊都是對合的。經(jīng)測試,Noekeon可以在各種平臺上安全而有效的實現(xiàn)。
圖1 Noekeon算法加解密流程圖
DES算法[2]的分組結(jié)構(gòu)采用Feistel網(wǎng)絡(luò),包括異或、置換、代換、移位操作四種基本運(yùn)算。這種結(jié)構(gòu)是Horst Feistel在1973年所提出,其核心思想是:64位的明文經(jīng)過初始置換而被重新排列,然后分成兩組,使用子密鑰對其中一個分組應(yīng)用輪函數(shù)進(jìn)行迭代,每一輪迭代都有置換和代換,然后將輸出與另一組進(jìn)行“異或”運(yùn)算。之后交換這兩組,再重復(fù)這一過程,DES使用16個循環(huán),但最后一個循環(huán)之后就不再交換。DES的加解密流程如圖2所示:
圖2 DES算法加密的流程圖
AES分組密碼擁有128bit的分塊長度,而且可以使用128bit,192bit或者256bit大小的密鑰。密鑰的長度影響著密鑰編排(即在每一輪中使用的子密鑰)和輪的次數(shù)。
加密過程:加密之前,先將明文和原始的密鑰做一次加密操作。從加密的第1輪到第9輪的所用的輪函數(shù)一樣,包括四種運(yùn)算:字節(jié)代換、行位移、列混合、輪密鑰加,最后一輪則不再執(zhí)行行列混合。
解密過程:AES的加密過程和解密過程并不一致,這是因為AES并不使用Feistel結(jié)構(gòu),每一輪操作是對整個分組進(jìn)行操作。解密過程仍為10輪,每一輪操作是對應(yīng)的加密操作的逆操作,由于AES的4 個輪操作(字節(jié)代換、行位移、列混合和輪密鑰加)都是可逆的,因而,解密過程一輪操作就是順序執(zhí)行逆位移位、然后執(zhí)行逆字節(jié)代換和輪密鑰加,最后是逆列混合。同加密操作過程一樣,解密的最后一輪也不執(zhí)行逆列混合,但在第1輪解密之前,要執(zhí)行1次輪密鑰加操作。AES的加解密流程如圖3所示:
圖3 AES的加解密流程圖
Noekeon的密鑰編排算法非常簡單,即每一輪的子密鑰是一樣的。這樣設(shè)計很容易遭受滑動攻擊。但是設(shè)計者克服此問題是通過引入輪常數(shù) Roundct[i]來抵抗滑動攻擊,使用輪常數(shù)是為了防止不同輪中產(chǎn)生的輪密鑰的對稱性或相似性。
如果 Noekeon沒有引入輪常數(shù) Roundct[i],則 Noekeon可以看作同一置換 Pi2·Gamma·Pi1·Theta(A,K)的乘積密碼,顯然Pi2·Gamma·Pi1·Theta(A,K)是弱置換;因此,滑動攻擊對沒有引入輪常數(shù)Roundct[i]對Noekeon算法是有效的。這反映了輪常數(shù)Roundct[i]在Noekeon算法中的重要作用。
從 DES使用以來,人們一個試圖分析它的弱點并取得了突破,實際上 DES算法的安全性取決于密鑰的保密。它存在以下幾方面的問題:
(1)互補(bǔ)性
在 DES中,若輸入的明文和密鑰同時取補(bǔ),則選擇擴(kuò)展運(yùn)算E的輸出和子密鑰產(chǎn)生器的輸出也都補(bǔ),因而經(jīng)異或運(yùn)算后的輸出與明文及密鑰未取補(bǔ)時的輸出一樣,即 S盒的輸入數(shù)據(jù)未變,其輸出自然也不會變,但經(jīng)第十個異或運(yùn)算時,由于左邊的數(shù)據(jù)已取補(bǔ),因而右半部分輸出也就取補(bǔ)了。正是由于算法的兩次異或運(yùn)算(一次在S盒之前,一次在P盒置換之后)使得DES算法具有互補(bǔ)性。
(2)DES算法存在弱密鑰和半弱密鑰
在DES中,至少存在4個弱密鑰和至少12個半密鑰,如果使用弱密鑰和半弱密鑰,則在多重加密時第二次加密 會還原第一次加密。
(3)DES算法的密鑰太短
只有56bit,密鑰量約為1.7*1017個,對抗窮舉攻擊法、差分攻擊法和線性攻擊法等的能力較差。DES算法經(jīng)受住了時間的考驗,但是在差分分析法或者線性逼近法的理論下,聯(lián)合多臺工作站同時協(xié)同工作,不到半月就可以找到密鑰。
AES除了保持DES的某些好的特性外,在分組長度和密鑰長度方面都作了加強(qiáng),特別是密鑰長度可從 128、192、256bit中任選,給用戶提供了更大的靈活性,另外 AES的運(yùn)算速度也將有極大的提高,軟件實現(xiàn)速度在普通 PC機(jī)上一般都能達(dá)到50~60Mbit/s以上。它存在以下幾方面的問題:
(1)盡管一些專家認(rèn)為可能利用該算法使用的數(shù)學(xué)結(jié)構(gòu)來攻擊該算法,但實際上,暫時還沒有一種攻擊方法能攻擊AES;另一方面,它采用非線性組件S盒,結(jié)構(gòu)簡單,便于分析,也使該算法的安全性能受到一些威脅。
(2)由于AES采用的Rijndael算法利用了掩碼技術(shù),因而AES能有效防止能量攻擊和計時攻擊。
(3)通常情況下,Rijndael非常適合在空間受限環(huán)境下既執(zhí)行加密操作又要執(zhí)行解密操作。其對ROM和RAM的要求比較低,因而在計算機(jī)硬件上有廣闊的發(fā)展空間。
表1 三種算法的加解密速度對比
將三種算法算法對同一明文進(jìn)行加密,明文大小設(shè)定為200KB,得到三種不同的密文。將三種密文分別轉(zhuǎn)為ASCII碼,分析每個密文的奇偶數(shù)數(shù)量,控制字符和顯示字符數(shù)量。得到的結(jié)果如圖 4所示。從圖中可以看出,Noekeon算法的奇偶數(shù)與DES、AES情況類似,這進(jìn)一步的表明,Noekeon算法具有良好的安全性。
圖4 三種算法密文規(guī)律性統(tǒng)計
為了測試算法算法的加密速度,利用存儲大小為200K的名為“算法加密解密測試”的文件進(jìn)行測試,文件加解密的環(huán)境圖5所示:能夠?qū)oekeon、DES、AES三種算法進(jìn)行加密解密。三種算法加密速度測試結(jié)果如圖6所示,由圖可以看出,Noekeon算法的加密速度相對較快,比較適用于數(shù)據(jù)和文件的加密和解密。
圖5 三種加解密C#實現(xiàn)的主控界面
圖6 三種算法加密文件所用時間截圖
密碼學(xué)是信息安全的基石,分組密碼算法是密碼的重要組成部分,Noekeon算法使用同一個密鑰來加密和解密的分組密碼算法,采用迭代結(jié)構(gòu),運(yùn)行速度快且易于實現(xiàn),因此對Noekeon算法的安全性進(jìn)行研究,進(jìn)而發(fā)現(xiàn)其存在的不足,從而實現(xiàn)對Noekeon算法的改進(jìn)。
Noekeon算法的加解密速度相對較快且安全性較高,但是據(jù)設(shè)計者稱該密碼算法具有良好的抗線性攻擊和差分攻擊的能力,4圈Noekeon的線性特征概率不超過2-24,差分概率不高于2-48。但有研究報告表明,已實現(xiàn)對Noekeon算法進(jìn)行相關(guān)密鑰攻擊,故設(shè)計者聲稱的該算法能抵御差分和線性分析攻擊的結(jié)果并不可信。