NESSIE是歐洲一項為期三年的密碼標準計劃,繼美國推出了AES計劃以后,歐洲于2000年1月1日啟動了NESSIE計劃,以適應21世紀信息安全發展的全面需求。兩者相比較,NESSIE比 AES涉及的范圍更廣,這套標準涉及分組密碼、流密碼、公鑰密碼、消息認證碼、數字簽名和雜湊函數。其中分組密碼的征集要求是密鑰長度至少128bit(普通)/256bit(高級),分組長度至少I28bit;傳統類密碼分組長度64bit,密鑰長度至少128bit。
在信息時代的發展當中,此項課題的研究有較好的應用前景,并符合信息安全發展的趨勢和潮流。Noekeon算法可以應用在對不同場合的加解密之中,同時關于Noekeon算法的研究成果并不多,本文通過對Noekeon算法的加解密流程和速度進行分析研究,并用C#語言實現編程,從而使我們對Noekeon算法有一個更清晰、更直觀的認識。
Noekeon算法是NESSIE公布的17個候選算法之一,它是由比利時的Joan Daemen、Michael Peeters、Gilles Van Assche和Vincent Rijmen共同設計的一個分組密碼,它的分組長度和密鑰長度都是128比特,整體結構采用的是16輪SP網絡,每一圈由線性變換、字節輪換、32個平行的4bit-4bitS盒組成,該算法的加解密非常相似。為了保證加解密相似,設計者要求每個基本模塊都是對合的。經測試,Noekeon可以在各種平臺上安全而有效的實現。

圖1 Noekeon算法加解密流程圖
DES算法[2]的分組結構采用Feistel網絡,包括異或、置換、代換、移位操作四種基本運算。這種結構是Horst Feistel在1973年所提出,其核心思想是:64位的明文經過初始置換而被重新排列,然后分成兩組,使用子密鑰對其中一個分組應用輪函數進行迭代,每一輪迭代都有置換和代換,然后將輸出與另一組進行“異或”運算。之后交換這兩組,再重復這一過程,DES使用16個循環,但最后一個循環之后就不再交換。DES的加解密流程如圖2所示:

圖2 DES算法加密的流程圖
AES分組密碼擁有128bit的分塊長度,而且可以使用128bit,192bit或者256bit大小的密鑰。密鑰的長度影響著密鑰編排(即在每一輪中使用的子密鑰)和輪的次數。
加密過程:加密之前,先將明文和原始的密鑰做一次加密操作。從加密的第1輪到第9輪的所用的輪函數一樣,包括四種運算:字節代換、行位移、列混合、輪密鑰加,最后一輪則不再執行行列混合。
解密過程:AES的加密過程和解密過程并不一致,這是因為AES并不使用Feistel結構,每一輪操作是對整個分組進行操作。解密過程仍為10輪,每一輪操作是對應的加密操作的逆操作,由于AES的4 個輪操作(字節代換、行位移、列混合和輪密鑰加)都是可逆的,因而,解密過程一輪操作就是順序執行逆位移位、然后執行逆字節代換和輪密鑰加,最后是逆列混合。同加密操作過程一樣,解密的最后一輪也不執行逆列混合,但在第1輪解密之前,要執行1次輪密鑰加操作。AES的加解密流程如圖3所示:

圖3 AES的加解密流程圖
Noekeon的密鑰編排算法非常簡單,即每一輪的子密鑰是一樣的。這樣設計很容易遭受滑動攻擊。但是設計者克服此問題是通過引入輪常數 Roundct[i]來抵抗滑動攻擊,使用輪常數是為了防止不同輪中產生的輪密鑰的對稱性或相似性。
如果 Noekeon沒有引入輪常數 Roundct[i],則 Noekeon可以看作同一置換 Pi2·Gamma·Pi1·Theta(A,K)的乘積密碼,顯然Pi2·Gamma·Pi1·Theta(A,K)是弱置換;因此,滑動攻擊對沒有引入輪常數Roundct[i]對Noekeon算法是有效的。這反映了輪常數Roundct[i]在Noekeon算法中的重要作用。
從 DES使用以來,人們一個試圖分析它的弱點并取得了突破,實際上 DES算法的安全性取決于密鑰的保密。它存在以下幾方面的問題:
(1)互補性
在 DES中,若輸入的明文和密鑰同時取補,則選擇擴展運算E的輸出和子密鑰產生器的輸出也都補,因而經異或運算后的輸出與明文及密鑰未取補時的輸出一樣,即 S盒的輸入數據未變,其輸出自然也不會變,但經第十個異或運算時,由于左邊的數據已取補,因而右半部分輸出也就取補了。正是由于算法的兩次異或運算(一次在S盒之前,一次在P盒置換之后)使得DES算法具有互補性。
(2)DES算法存在弱密鑰和半弱密鑰
在DES中,至少存在4個弱密鑰和至少12個半密鑰,如果使用弱密鑰和半弱密鑰,則在多重加密時第二次加密 會還原第一次加密。
(3)DES算法的密鑰太短
只有56bit,密鑰量約為1.7*1017個,對抗窮舉攻擊法、差分攻擊法和線性攻擊法等的能力較差。DES算法經受住了時間的考驗,但是在差分分析法或者線性逼近法的理論下,聯合多臺工作站同時協同工作,不到半月就可以找到密鑰。
AES除了保持DES的某些好的特性外,在分組長度和密鑰長度方面都作了加強,特別是密鑰長度可從 128、192、256bit中任選,給用戶提供了更大的靈活性,另外 AES的運算速度也將有極大的提高,軟件實現速度在普通 PC機上一般都能達到50~60Mbit/s以上。它存在以下幾方面的問題:
(1)盡管一些專家認為可能利用該算法使用的數學結構來攻擊該算法,但實際上,暫時還沒有一種攻擊方法能攻擊AES;另一方面,它采用非線性組件S盒,結構簡單,便于分析,也使該算法的安全性能受到一些威脅。
(2)由于AES采用的Rijndael算法利用了掩碼技術,因而AES能有效防止能量攻擊和計時攻擊。
(3)通常情況下,Rijndael非常適合在空間受限環境下既執行加密操作又要執行解密操作。其對ROM和RAM的要求比較低,因而在計算機硬件上有廣闊的發展空間。

表1 三種算法的加解密速度對比
將三種算法算法對同一明文進行加密,明文大小設定為200KB,得到三種不同的密文。將三種密文分別轉為ASCII碼,分析每個密文的奇偶數數量,控制字符和顯示字符數量。得到的結果如圖 4所示。從圖中可以看出,Noekeon算法的奇偶數與DES、AES情況類似,這進一步的表明,Noekeon算法具有良好的安全性。

圖4 三種算法密文規律性統計
為了測試算法算法的加密速度,利用存儲大小為200K的名為“算法加密解密測試”的文件進行測試,文件加解密的環境圖5所示:能夠對Noekeon、DES、AES三種算法進行加密解密。三種算法加密速度測試結果如圖6所示,由圖可以看出,Noekeon算法的加密速度相對較快,比較適用于數據和文件的加密和解密。

圖5 三種加解密C#實現的主控界面

圖6 三種算法加密文件所用時間截圖
密碼學是信息安全的基石,分組密碼算法是密碼的重要組成部分,Noekeon算法使用同一個密鑰來加密和解密的分組密碼算法,采用迭代結構,運行速度快且易于實現,因此對Noekeon算法的安全性進行研究,進而發現其存在的不足,從而實現對Noekeon算法的改進。
Noekeon算法的加解密速度相對較快且安全性較高,但是據設計者稱該密碼算法具有良好的抗線性攻擊和差分攻擊的能力,4圈Noekeon的線性特征概率不超過2-24,差分概率不高于2-48。但有研究報告表明,已實現對Noekeon算法進行相關密鑰攻擊,故設計者聲稱的該算法能抵御差分和線性分析攻擊的結果并不可信。