葛仕杰,汪烈軍,李永明
(1.新疆大學 軟件學院,新疆 烏魯木齊 830046;2.新疆大學 信息科學與工程學院,新疆 烏魯木齊 830046)
隨著無線通信技術(shù)的發(fā)展和國家對萬物互聯(lián)的倡導(dǎo),WSN現(xiàn)已廣泛應(yīng)用于環(huán)境監(jiān)測、醫(yī)療監(jiān)測、軍事監(jiān)測、智能電網(wǎng)、智能交通、智能家居等多個領(lǐng)域,保證通信安全[1]顯得尤其重要。根據(jù)TinySec(Security for TinyOS)、SPINS等安全協(xié)議的推薦,目前WSN中廣泛使用的算法為RC5算法。RC5-w/r/b算法是專利算法,商業(yè)推廣成本較高,并且32 bit分組的RC5算法已經(jīng)被證實存在安全隱患。RC6算法的出現(xiàn)是為了解決RC5算法存在擴散不足的缺陷,但由于算法中模乘運算占用過多的計算空間,導(dǎo)致計算能耗過高而不適用于大多數(shù)WSN。近年來,許多學者提出了輕量級分組密碼[2]設(shè)計方案來替換RC5算法。田四梅設(shè)計了新的混沌S核[3]提升了算法的安全性,但也占用了較多的存儲空間。鄧昀等[4]通過對RC6算法增加對稱層的方式降低了硬件資源消耗,使用雙密鑰機制達到了算法輕量化的目的。L.Yi等設(shè)計了基于Feistel網(wǎng)絡(luò)結(jié)構(gòu)[5]的混沌S核加密算法和混沌分組加密算法,通過實驗驗證了Feistel結(jié)構(gòu)的加密算法具有更高的執(zhí)行效率。Yuling Luo等[6]針對許連杰提出的CWSN算法進行改進,在加密函數(shù)中使用兩個一維混沌映射參與加解密來提高混淆和擴散特性。王亞華等[7]借助云服務(wù)器的強大計算能力,將子密鑰同步轉(zhuǎn)移到云服務(wù)器上,從而設(shè)計出了更為安全的一次一密動態(tài)子密鑰加密方案,但是節(jié)點頻繁的接收密鑰,導(dǎo)致傳輸過程能耗較高,且信道安全性和穩(wěn)定性難以保證。Masoumeh.Sharafi對BCC算法[8]的改進提升了算法性能,通過減少BCC算法中的置換調(diào)用次數(shù),增加算法輪數(shù)的方法,提升了算法的內(nèi)存利用率,大大降低了算法能耗。盧政橋[9]通過logistic混沌隨機序列對WEP通信協(xié)議進行改進,得到安全的加密算法,這種加密方式?jīng)]有考慮整型后的混沌序列存在短周期的問題。LongTeng Yi等通過正弦混沌映射、baker映射、復(fù)合混沌映射[10]、線性同余生成器生成S核來增加擴散,增強加密算法的安全性,過多混沌映射引入使得算法計算能耗增加。結(jié)合上述算法的特點,設(shè)計出基于RC6算法的輕量級分組加密算法,算法使用RC6的加密框架,用兩個一維混沌映射替代了RC6算法的模乘運算,這樣一來既提升了算法加解密速度,又達到降低計算能耗的目的,本文還對加、解密函數(shù)進行了改進,引入兩個一維混沌參與加、解密函數(shù),使得算法更好抵抗明文攻擊,具有更高的安全級別。
RC6算法最小明文分組是128 bit,針對WSN的數(shù)據(jù)包特征分組較大會引入過多冗余字節(jié),32 bit的明文分組的加密算法被認為最適合用于WSN軟件加密。為使RC6-32/20/16算法更好用于WSN,將RC6中4個32 bit的寄存器改為4個8 bit的寄存器,F(xiàn)eistel網(wǎng)絡(luò)結(jié)構(gòu)下的8 bit的數(shù)據(jù)單元,非常適合WSN中字長為8 bit的節(jié)點運算,這樣單次加密的明文分組大小就是32 bit。本文提出的方法使用了CBC(分組連接)模式[11],初始向量也為32 bit。在加解密算法中取消了復(fù)雜的模乘運算,代替為Cubic混沌映射參與加解密,使用RC6中的循環(huán)位移函數(shù),解決了RC5中循環(huán)位移不依賴寄存器中所有位的不足。Feistel網(wǎng)絡(luò)結(jié)構(gòu)最大的優(yōu)勢就是加解密算法可逆,能夠?qū)函數(shù)進行復(fù)雜的設(shè)計,文獻[2]中詳細對比分析了當前18種輕量級分組加密算法,講述了置換網(wǎng)絡(luò)與Feistel網(wǎng)絡(luò)的應(yīng)用特點。本文主要用兩個一維混沌Logistic、Cubic和線性同余生成器生成主函數(shù),整個算法中只涉及模加、模減、循環(huán)位移等簡單的運算。
混沌現(xiàn)象在第一次被發(fā)現(xiàn)和定義后,人們陸續(xù)發(fā)現(xiàn)許多混沌現(xiàn)象,在諸多混沌現(xiàn)象中,離散性混沌映射已經(jīng)被證實在加密中優(yōu)于較多混沌方程,WSN加密中常用的離散混沌映射有Logistics映射、Cubic映射、Tent映射、Henon映射等。由于高維混沌[12]較為復(fù)雜多用于圖像加密[13],并不適用于資源有限、計算能力較弱的WSN中,因此在本文所提算法使用的是兩個一維混沌,兩個一維混沌參與算法的加解密及主密鑰的生成,cubic混沌映射參與子密鑰的生成。
一維Logistic映射在WSN中應(yīng)用最多,如式(1)所示
xn+1=μxn(1-xn) 0≤μ≤4
(1)
式中:μ是參數(shù),當μ∈(3.57,4] 時,Logistic出現(xiàn)混沌現(xiàn)象,由于混沌映射存在浮點運算,而節(jié)點不能處理浮點運算,因此需要對Logistic映射進行整型化,整型化過程在文獻[12]中有詳細的推導(dǎo)過程,就不再贅述。整型化后如式(2)所示
(2)
根據(jù)封閉式原理,整型后的公式只要初始值不取0,則迭代結(jié)果zk∈[1,2a-1],a=2L-1, (L為計算機字長),當取L=32,整型后的最小周期為14 448。式(2)中只涉及簡單的模加、模減和循環(huán)位移運算,能夠在節(jié)點上完成。
一維Cubic混沌映射如式(3)所示
(3)
a,b是參數(shù),圖1關(guān)于a的映射圖像,可以看出隨著參數(shù)a的增大,輸出區(qū)間越來越小,圖2是關(guān)于b的映射圖像,當參數(shù)b=2.3時圖像出現(xiàn)混沌狀態(tài)。通過圖1可以得到當a=4時,xk∈[-1,1], 為了獲得較好的隨機狀態(tài),取a=4,b=3, 得到公式
(4)
圖1 Cubic混沌映射關(guān)于a的圖
圖2 Cubic混沌映射關(guān)于b的圖
為了避免節(jié)點處理浮點運算,需要將式(4)進行整型化處理,令yk=c(xk+1), 可以得到
(5)
將式(5)帶入式(4),可以得到
(6)
(7)
式(7)中消除了迭代后存在零解的情況,根據(jù)封閉式原理,當初始值在區(qū)間 [0,2c-1] 上任意取值,都不會在迭代后出現(xiàn)零值,且迭代后的值yk∈[0,2c-1], 經(jīng)過整型化后Cubic混沌映射可以用于WSN網(wǎng)絡(luò)中資源受限的節(jié)點處理數(shù)據(jù)。
加密算法采用CBC分組模式加密,將輸入的32 bit明文序列先與上一次密文進行異或操作(首次輸入明文序列時,與32 bit的初始向量異或),整個密文序列中每個單獨加密的分組都與前一組的密文有著更強的關(guān)聯(lián)性,以此消除明文、密文序列間的統(tǒng)計性規(guī)律,增強算法的混淆和擴散特性。在每組加密的過程中,將32 bit明文序列從低到高位依次存放在A、B、C、D這4個寄存器中,加密算法都是以8 bit的數(shù)據(jù)為單位進行處理,整個算法里只涉及加法、移位、異或等簡單的節(jié)點CPU運算指令,保證算法在安全性的基礎(chǔ)上,具備加密速度快、能耗低的優(yōu)勢。
本文所提加密算法采用RC6的加密體系結(jié)構(gòu),如圖3所示,⊕表示按位異或運算,‘+’代表模2w加運算,a<>b表示a向左或向右移動b位,f密函數(shù),S為子密鑰,每輪加密用到2個子密鑰,加上開頭和結(jié)尾用到的4個子密鑰,一共需要用到2r+4個子密鑰(r表示加密輪數(shù)),該算法加密輪數(shù)定為7輪(第三節(jié)會進行詳細說明)。
圖3 算法加密結(jié)構(gòu)
加密過程的描述:
整個加密包含兩個相似的Feistel結(jié)構(gòu),該結(jié)構(gòu)的最大特點就是每輪只處理一半的數(shù)據(jù),在第一輪加密時,輪函數(shù)f只作用于B和D,完成對數(shù)據(jù)A和C的處理,為了更好的掩蓋明文信息,這里對B和D先跟子密鑰完成異或操作,在最后一輪加密時,為了保證產(chǎn)生的密文信息擴散效果相同,添加了兩個子密鑰對A和C進行異或操作。在重復(fù)迭代過程中,輪函數(shù)f對異或后的數(shù)據(jù)B、D加密,加密產(chǎn)生的序列循環(huán)位移數(shù)是3個字節(jié)(這里w=8),此時B產(chǎn)生的新序列的ASCII值對8取余作為C的循環(huán)位移量,同理D產(chǎn)生的新序列的ASCII值對8取余作為A的循環(huán)位移量,這兩個位移量會根據(jù)輸入明文信息的改變而不同,因此我們稱為動態(tài)位移量,B產(chǎn)生的新序列與A完成異或操作后,再完成動態(tài)位移后再與輪密鑰異或完成對A的單輪加密過程,其加密結(jié)果需要存放到D中。對C的加密過程與上述相同,完成單輪加密的序列需要存放在B中。B和D在第一輪中沒有變化,只需要將對B異或后的序列存放在A中,將D異或后的序列存放在C中,這樣在每輪加密時就能處理到各個存儲器中的數(shù)據(jù)。
Feistel是一種對稱的網(wǎng)絡(luò)結(jié)構(gòu),f函數(shù)對于算法的加密效果的起到?jīng)Q定性作用,該網(wǎng)絡(luò)結(jié)構(gòu)無需要求f函數(shù)可逆,因此在設(shè)計函數(shù)時可以根據(jù)算法需求進行調(diào)整。圖4是f函數(shù)的內(nèi)部結(jié)構(gòu),P是16 bit的置換盒。
如圖4所示,我們在設(shè)計f函數(shù)時,先將輸入的8 bit數(shù)據(jù)擴展為16 bit的數(shù)據(jù),為了使擴展后的數(shù)據(jù)信息與初始信息差異化更大,引入了一個16 bit的置換盒(P盒),置換是加密中最常用也是最有效的擴散方式。擴展后的序列被分為左右兩個部分,再引入f函數(shù)設(shè)計中最為關(guān)鍵的非線性函數(shù),我們將整型后的兩個混沌映射分別作用于其中的一部分,最后將產(chǎn)生的混沌序列異或,得到的還是8 bit的序列。經(jīng)實驗結(jié)果證明,對原序列擴展后引入混沌映射得結(jié)果,在混淆和擴散上遠遠好于混沌映射依次作用于8 bit的初始值。
圖4 f函數(shù)內(nèi)部結(jié)構(gòu)
混沌映射的迭代輪數(shù)由輸入的8 bit序列決定,由于在8 bit的處理器上,整型化后的Cubic映射周期最大值僅為26。為避免迭代次數(shù)超過Cubic映射最大迭代周期,本文取混沌迭代的最大輪數(shù)為13,經(jīng)過多次實驗證實,迭代13輪不會出現(xiàn)混沌現(xiàn)象衰退的情況,也能很好保證輸入消息經(jīng)過多次迭代,達到良好的擴散效果。通過輸入序列對13進行取余計算,得到動態(tài)的迭代輪數(shù),保證在每輪加密中混沌映射的迭代倫數(shù)都不一樣,可以提升算法的安全性。
在密鑰擴展算法的設(shè)計中,我們先對主密鑰序列的生成過程進行了改進,我們通過線性同余隨機數(shù)生成器生成兩個32 bit的初始序列,然后將這兩個序列作為兩個混沌映射的輸入,經(jīng)過混沌迭代產(chǎn)生兩個隨機的32 bit的序列,之后我們引入混沌級聯(lián)的思想,將兩個迭代后的序列異或,產(chǎn)生32 bit的主密鑰序列,重復(fù)執(zhí)行幾次我們就獲得了多個32 bit的序列,隨機選取4個不同的序列組成加密所需的128 bit主密鑰序列。
在8 bit處理器上,整型化后的Cubic映射周期最大值僅為26,文獻[6,7]通過自相關(guān)性計算,證明了整型后logistic混沌映射、Cubic混沌映射存在的短周期問題,解決辦法就是將產(chǎn)生的混沌序列進行復(fù)合,復(fù)合的操作即將兩個混沌映射產(chǎn)生的序列進行異或操作,圖5是復(fù)合混沌序列進行量化后的自相關(guān)性,可以看出量化后的復(fù)合序列具有良好的自相關(guān)性,說明混沌序列具有良好的隨機性。
圖5 復(fù)合序列的自相關(guān)性
為進一步擴大序列的周期,保證序列具有更好的隨機性,在此基礎(chǔ)上引入線性同余隨機數(shù)生成器,本文使用參數(shù)最常用取值的公式,可以表示為
L(n+1)=(16807×L(n))mod(231-1)
(8)
加入線性隨機數(shù)生成器后,根據(jù)延長周期復(fù)合定理可知,新的復(fù)合序列的周期是3個序列周期的最小公倍數(shù),也就是線性同余序列的周期231-1, 新的復(fù)合序列的產(chǎn)生過程如圖6所示。
圖6 復(fù)合序列的生成過程
從圖6復(fù)合序列產(chǎn)生的32 bit的隨機序列中隨機選取4個不同的序列Z1、Z2、Z3、Z4, 按照選取順序從高位到低位組成128 bit的主密鑰K,為方便表述將主密鑰K用16個8 bitki劃分,即K={k0,k1…k15}, 密鑰擴展算法每輪產(chǎn)生兩個子密鑰,因為需要產(chǎn)生2r+4個子密鑰,所以需要執(zhí)行r+2輪,算法1是一輪子密鑰算法的生成過程,P表示16 bit的置換,其存儲的位置置換信息稱為P盒。
算法1:密鑰擴展算法
輸入:128 bit主密鑰K={k0,k1…k15}
輸出:2個8 bit子密鑰kr1、kr2
(1) for i=0 to 15 do
(2) {
(3) if i%2==0
(4)ki=Cubic(ki);
(5) else
(6)ki=ki⊕ki-1;
(7)ki=Cubic(ki);
(8)ki-1ki=P(ki-1ki);
(9) }
(10)K=K?7;
(11)kr1=k0⊕k8;
(12)kr2=k4⊕k12;
算法1中主密鑰由16個8 bitki組成,當i為偶數(shù)時執(zhí)行混沌映射,當i為奇數(shù)時先ki與ki-1進行異或,異或的結(jié)果再次經(jīng)過混沌映射,每兩個ki計算完就用16 bit的P盒進行置換,置換操作執(zhí)行8次后生成新的128 bit密鑰序列,新的密鑰序列循環(huán)位移7位,得到新的主密鑰序列用于下一輪子密鑰生成。循環(huán)位移位數(shù)遵循log2w規(guī)則,其中w表示序列長度,因此w=128 bit,計算結(jié)果為7,所以循環(huán)位移7位。輪密鑰是選取每個Zi的高8位字節(jié)異或而得。
如上所述Feistel結(jié)構(gòu)是對稱,因此解密算法就是加密算法逆過程,唯一的區(qū)別就是子密鑰的使用順序與加密相反。例如加密算法密鑰參與順序為Ki1,Ki2,Ki3,Ki4, 那么解密算法的密鑰參與過程為Ki4,Ki3,Ki2,Ki1。 解密過程中的置換盒如下
本文所提算法用C語言實現(xiàn),本節(jié)通過詳細對比實驗數(shù)據(jù)驗證了所提算法的安全性。
3.1.1 “0-1”平衡性測試
首先將密文轉(zhuǎn)為二進制表示,如果加密效果良好,那么二進制密文中“0”、“1”應(yīng)當是均等分布的,理論上各自占據(jù)的比例為0.5,為方便說明,n0表示二進制密文中“0”的個數(shù),n1表示二進制密文中“1”的個數(shù),n表示二進制密文中“0”、“1”的總數(shù),那么式(9)中ε的值越趨近零,表示密文的“0-1”平衡性越好。本文對4個不同明文數(shù)據(jù)長度進行加密,加密后的密文序列進行平衡性分析
(9)
測試結(jié)果見表1,當密文數(shù)據(jù)越多時,ε的值越接近零。4個不同長度密文的“0”、“1”分布都幾乎是均等的,這表明加密后的密文具有很強的“0-1”平衡性,通過概率統(tǒng)計對比明文和密文的“0”、“1”分布,很難獲得有用的信息,因此可以抵抗統(tǒng)計攻擊。
表1 “0-1”平衡性測試結(jié)果
3.1.2 字符平衡性測試
字符頻率統(tǒng)計為了分析明文和密文中ASCII值 [0,255] 分布情況,根據(jù)統(tǒng)計結(jié)果分析出明文的關(guān)鍵信息,是協(xié)助破譯密文有效手段,良好的加密算法,能夠消除密文ASCII分布的波動,與明文ASCII沒有有效的關(guān)聯(lián)關(guān)系,達到難以通過統(tǒng)計的方式獲取有效信息的效果,良好的加密方案產(chǎn)生的密文ASCII值平均比例為1/256,即0.0039。圖7是10 029 327 bit明文各字符ASCII值的統(tǒng)計結(jié)果,可以看出明文ASCII取值非常不平均,部分的字符在明文中出現(xiàn)的次數(shù)過多,這極有可能分析出有效信息。圖8是密文各字符ASCII值的統(tǒng)計結(jié)果,可以看出密文ASCII分布沒有規(guī)律性,且各字符ASCII統(tǒng)計比例非常平均,統(tǒng)計概率在0.0039附近波動,具有非常好的字符平衡性,具備良好的抗概率統(tǒng)計攻擊。
圖7 明文字符ASCII值占比統(tǒng)計
圖8 密文字符ASCII值占比統(tǒng)計
信息熵用來衡量系統(tǒng)的混亂程度,系統(tǒng)的混亂程度越高熵值越大,這里將密文的序列值劃分為8 bit字節(jié)為單位,那么在密文序列足夠混亂的情況下信息熵為8,由于密文序列無法做到均勻分布,因此信息熵值越接近8,則驗證密文混亂性越好,加密的安全性越高。信息熵的計算公式可以表示為式(10),其中P(Si) 表示被測信息S中每個8 bit字符Si出現(xiàn)的頻率,理想情況下字符分布是均等的,那么每個字符出現(xiàn)的概率為1/28,因此理想情況下式(10)的計算結(jié)果等于8,意味著計算所得結(jié)果越接近8,則加密算法的混亂效果越好
(10)
表2列出了不同密文長度情況下的信息熵,從結(jié)果可以得到密文長度越大,信息熵越接近于8,整體信息熵接近于理想值,密文信息復(fù)雜度很高,具備抵抗信息熵攻擊的能力。
表2 密文信息熵測試結(jié)果
混淆指明文和密文的關(guān)系盡可能的復(fù)雜,擴散指明文序列中的一位盡可能多地影響密文中的位數(shù)。混淆和擴散在密碼設(shè)計時主要以完全性、雪崩效應(yīng)、嚴格雪崩效應(yīng)為主要標準。加密算法的輸入為nbit,輸出為mbit,輸入的樣本空間大小為T,aij表示T中只改變輸入的第ibit位,對應(yīng)輸出的第jbit位發(fā)生改變的個數(shù),bij表示在樣本空間中只改變第ibit位的輸出與原輸出之間的差分漢明重量為j的個數(shù)。 #X表示X中元素的個數(shù),那么3個標準可以做以下定義。
完全性指加密算法輸出結(jié)果的每一比特位與輸入的所有比特位有關(guān),數(shù)學定義為
(11)
雪崩效應(yīng)指初始輸入的任一比特位的變化應(yīng)該造成加密輸出平均一半的輸出比特位發(fā)生變化,數(shù)學定義為
(12)
嚴格雪崩效應(yīng)指輸入的任一比特位的變化都應(yīng)導(dǎo)致輸出的每一比特位有一半的概率發(fā)生改變,數(shù)學定義為
(13)
表3是T=20 000時的測試結(jié)果,d1=1,d2=1,d3=1說明算法具有較好的非線性擴散特性,加密輪數(shù)越高,混淆和擴散效果越好,考慮到算法的安全性與性能的平衡,本文所提算法的加密輪數(shù)取7輪,一方面增強了算法安全性,另一方面兼顧算法的性能。表4是本文算法與其它算法的對比,算法執(zhí)行7輪與其它算法相比都具備較好的混淆與擴散效果,雪崩效果僅次于MCS算法,嚴格雪崩效果僅次于RC6算法。驗證了本文算法的混淆和擴散效果優(yōu)于大部分傳統(tǒng)經(jīng)典算法,也說明本文所提算法有足夠強的抗差分攻擊能力。
表3 算法擴散和混亂性與加密輪數(shù)的關(guān)系
本文使用TinyOS2操作系統(tǒng)自帶的TOSSIM仿真工具對傳感器節(jié)點進行仿真,實現(xiàn)了對RC5、RC6及本文所提算法節(jié)點能耗的數(shù)據(jù)收集工作。仿真實驗設(shè)置的傳感器節(jié)點數(shù)量為100,為盡可能準確獲取算法的計算能耗,只收集CPU的能量消耗作為參考值,將100個傳感器節(jié)點的CPU能耗平均值作為最終單個節(jié)點的能耗值。通過表5中節(jié)點能耗對比可以看出,RC5算法在計算能耗上有著絕對的優(yōu)勢,本文改進后的算法相較于RC6算法的計算能耗下降了23.9%。
表4 擴散和混亂性比較
表5 算法計算能耗對比
受限于WSN節(jié)點的資源,算法執(zhí)行速度與變量所占空間是衡量加密算法可行性的重要標準,表6表明本文所提算法的執(zhí)行速度優(yōu)于其它幾種算法,所占空間僅高于單一混沌算法MCS和文獻[6]所提算法,低于傳統(tǒng)經(jīng)典算法,提升執(zhí)行速度可以大大降低傳感器能耗,對于資源有限的WSN來說,犧牲一小部分空間換取更高的執(zhí)行速度是值得的。因此,本文所提算法適用于WSN。
表6 執(zhí)行速度與存儲空間比較
本文對RC6算法進行改進,復(fù)合兩個一維混沌映射的迭代序列,增強了序列的隨機性,引入線性同余隨機數(shù)生成器延長了序列的周期,隨機選取4個復(fù)合序列組成128 bit主密鑰,保證了算法的密鑰空間足夠大,可以抵抗窮舉攻擊。整型后的混沌映射參與加解密,替代了RC6算法的模乘運算,大大節(jié)省了計算能耗,也達到擴散和混淆效果。改進后的RC6算法可以處理32 bit的明文分組,由于繼承了RC6算法的優(yōu)勢,加解密速度遠高于RC5算法。經(jīng)實驗證實,該算法具備輕量級特點,安全性較高,性能優(yōu)于多數(shù)傳統(tǒng)算法,可以用于中小型WSN進行安全的數(shù)據(jù)傳輸。