張 昊,宋 杰,羅名君
(1.安徽城市管理職業(yè)學院 信息技術(shù)學院,安徽 合肥231635;2.安徽大學 計算機科學與技術(shù)學院,安徽 合肥230039;3.國防科技大學 電子對抗學院,安徽 合肥230031)
無線傳感器網(wǎng)絡(Wireless Sensor Network,WSN)是一種分布式傳感網(wǎng)絡,是由部署在一定范圍內(nèi)的多個價格低廉的微型傳感節(jié)點組成,能以無線或有線方式相互通訊,形成一個自主系統(tǒng)的網(wǎng)絡。目前,無線傳感器網(wǎng)絡應用廣泛,主要適用于野外工作條件差,有線網(wǎng)絡和無線網(wǎng)絡無法覆蓋的環(huán)境,如:軍事領域的目標定位和追蹤,民用領域的草原監(jiān)測、醫(yī)學護理等。WSN 通常應用于無人管理的區(qū)域中,很容易被攻擊者侵入系統(tǒng)篡改和竊取數(shù)據(jù),所以無線傳感器網(wǎng)絡的安全問題是其被廣泛應用的一個重要瓶頸[1]。
針對以上問題,已經(jīng)有不少公開發(fā)表的文獻提出了各種解決方法,如:基于數(shù)字水印的安全傳輸技術(shù)[2]、基于能量優(yōu)化的安全路由算法[3]、基于可信度的安全路由算法[4]、基于DV-Hop 的安全定位方法[5]等,可以有效地抵御針對WSN 的大多數(shù)攻擊。然而以上研究多是在網(wǎng)絡層面上進行的,數(shù)據(jù)比特流的完整性、準確性問題需要額外的手段加以保證,為此,筆者提出了一種基于MD5算法的分布式無線傳感器網(wǎng)絡數(shù)據(jù)安全傳輸方法,在發(fā)送端傳輸數(shù)據(jù)的末尾,附上一段用MD5算法生成的摘要,在接收端重新計算一次MD5 值,通過與接收到的MD5 值進行對比,可以檢測出數(shù)據(jù)是否存在的刪減、冗余、篡改等錯誤。MD5算法實現(xiàn)較為簡單,便于能量受限的WSN 節(jié)點使用,且MD5算法生成的散列值對數(shù)據(jù)中的錯誤極其敏感,因此,可以有效地提高系統(tǒng)數(shù)據(jù)傳輸?shù)陌踩浴?/p>
WSN不需依靠基礎設備,可快速地的在一定區(qū)域內(nèi)完成傳感器節(jié)點的部署工作,用于檢查周圍情況變化并通過無線網(wǎng)絡向數(shù)據(jù)監(jiān)控中心匯報,網(wǎng)絡組建靈活方便。通常部署一定規(guī)模的傳感節(jié)點,彼此之間通過無線網(wǎng)絡相互通訊,組成一個多跳自主無線網(wǎng)絡系統(tǒng)。
無線傳感器網(wǎng)絡擁有數(shù)據(jù)眾多的傳感器節(jié)點,還包括功能較強的匯聚節(jié)點和管理節(jié)點。傳感器節(jié)點擁有一個或多個組件,這些組件監(jiān)測所處環(huán)境濕度、溫度、壓力等變化,對組件可以感知的數(shù)據(jù)進行初級處理。經(jīng)過多次跳轉(zhuǎn)后轉(zhuǎn)發(fā)給匯聚節(jié)點,最終傳輸?shù)胶笈_數(shù)據(jù)監(jiān)控中心。管理節(jié)點任務是對WSN 發(fā)送指令控制各節(jié)點正常有序運行。
限制分布式無線傳感器網(wǎng)快速發(fā)展的主要原因是安全性,WSN 主要部署在野外困難的環(huán)境,安全條件差,獲取的數(shù)據(jù)容易被篡改、被泄密。密鑰技術(shù)、認證服務是保障WSN 安全工作的首選技術(shù),但WSN 的局限性使得某些已成熟的網(wǎng)絡安全手段無法在WSN 中實現(xiàn)。
WSN主要的局限性有以下幾個方面:
(1)資源不足:因體積微小,傳感器的節(jié)點無法配備更多的物理設備,最為突出的受限資源是電能。每步運行都消耗WSN 節(jié)點的電能,結(jié)果造成WSN 的公鑰算法效果不佳。具體有:
①CPU能力不足:WSN 節(jié)點體積微小,不能安裝功能強勁的CPU,以致即使運算量很少的處理,也將占據(jù)大量的CPU 資源。
②電力不足:WSN 采用電池供電,WSN 各節(jié)點主要部署在野外環(huán)境,很難對它們更換電池。因此,電力不足極大地減少了WSN 的使用壽命。
③內(nèi)存不足:同樣是因為體積微小,在WSN 上不能安裝大空間的存儲器,只能是128 KB 可編程Flash Memory 和4 KB 的RAM,即使附加了512 KB 的Flash Memory 后,仍無法比肩GB 數(shù)量級的其他電子設備。
(2)局部計算與通訊能力不足:分布式無線傳感器是基于節(jié)點的局部計算與通訊,各類節(jié)點能夠依據(jù)相鄰節(jié)點之間傳遞的信息做出決斷。但分布式局部計算和通訊與全局網(wǎng)絡相比,無論在信息獲取、運算能力、通訊速度等方面都凸顯劣勢。
(3)大規(guī)模部署困難:分布式無線傳感器網(wǎng)需要放置數(shù)量眾多的傳感器節(jié)點來檢測環(huán)境變化或監(jiān)測特定目標。如何把成百上千的節(jié)點感知的信息發(fā)送給數(shù)據(jù)監(jiān)控中心,且在安全保障的前提下盡量減小資源的占用,這需要將WSN 的CPU 運算、數(shù)據(jù)存儲、信息轉(zhuǎn)發(fā)等環(huán)節(jié)綜合思考,協(xié)調(diào)處理。
在WSN中應用簡單、高效的消息摘要算法,可以有效保護數(shù)據(jù)的完整性、可靠性。例如,在采樣數(shù)據(jù)末尾附上一段單向散列值,讓接收者可以對數(shù)據(jù)進行校驗;節(jié)點設備還可以添加簽名,便于網(wǎng)絡內(nèi)其他成員驗證節(jié)點身份。
使用MD5算法,對WSN 傳輸?shù)臄?shù)據(jù)進行安全認證的過程如圖1所示。
在發(fā)送端,計算一次待傳輸數(shù)據(jù)的MD5 值并附在數(shù)據(jù)末尾發(fā)送出去,接收端重新計算接收數(shù)據(jù)的MD5值,并與發(fā)送端計算得出的MD5 值進行比較,若明顯不同則說明數(shù)據(jù)存在異常,可以啟動重傳機制,要求節(jié)點重新發(fā)送數(shù)據(jù)[6]。
2.2.1 數(shù)據(jù)預處理
MD5 加密操作是以512 比特為單位進行的,因此,在對數(shù)據(jù)進行摘要生成操作之前,首先要對其進行補位操作,使得補位之后的數(shù)據(jù)長度是512 比特的整數(shù)倍[7]。
設待加密的數(shù)據(jù)為d
其中di=0,1,i=1,2,…,N,表明數(shù)據(jù)長度是Nbits。補位的具體方法是:在數(shù)據(jù)結(jié)尾補1 個“1”,以及若干個“0”,直到數(shù)據(jù)長度滿足
即此時N=(K×512+448) bits,其中K為一個自然數(shù)。將K用一個64 比特整數(shù)的形式附在數(shù)據(jù)的末尾。這時,數(shù)據(jù)被填補后的總長度為
將補位后得到的數(shù)據(jù)d′以512 比特為單位進行分段,可以得到K+1 個數(shù)據(jù)子段
2.2.2 參數(shù)定義
在MD5算法中,需要定義若干初始參數(shù)與函數(shù),用于后續(xù)的變換操作[8]。
(1)設置4 個名為鏈接變量(Chaining Variable)的4 字節(jié)整型參數(shù)
然后,按以下規(guī)則使用鏈接變量對4 個新變量進行賦值
這樣就得到了8 個初始變量A,B,C,D,a,b,c,d。
(2)定義4 個非線性函數(shù)(X,Y,Z為4 字節(jié)整數(shù))
繼續(xù)定義4 個分別用于四輪變換的函數(shù)。
對于一個512 比特的數(shù)據(jù)子段,將其分割為16 個子塊Mj(j=0,1,2,…,15);<<
式(8)-(11)中的“=”為向左賦值符號。
2.2.3 基于MD5算法的數(shù)據(jù)加密過程
MD5算法主要流程敘述如下:原始數(shù)據(jù)經(jīng)過補位,使得數(shù)據(jù)長度為512 bits 的整數(shù)倍;然后以512 bits長度的數(shù)據(jù)塊為單位循環(huán)處理,每個數(shù)據(jù)塊被劃分為32 bits 長度的16 個子分組,每輪循環(huán)操作16 步。通過若干步運算與處理,算法將輸出4 組32 位長度的散列值,通過級聯(lián)得到128 bits 長度的數(shù)字簽名[10]。
具體步驟如下:
這四輪(64 步)變換是:
第一輪
第二輪
第三輪
第四輪
第i步中,i的單位是弧度,ti是常量屬于232×|sini|的整數(shù)部分。
將一輪64 步運算全部完成后,得到的4 個值a,b,c,d加到A,B,C,D上去,作為新的鏈接變量值,即:A←A+a,B←B+b,C←C+c,D←D+d。然后使用下一個512 bits 的數(shù)據(jù)塊重復上述運算過程,當所有數(shù)據(jù)處理完成后,將A,B,C,D按比特流的形式級聯(lián),輸出一個128 位的序列,即為所求的MD5 摘要值[11]。
2.2.4 算法偽代碼
//說明:所有的變量都是32 位無符號整數(shù),并按2^32 換模計算
int [64]m,n
m[0..15]:={8,20,8,24,8,20,8,24,8,20,8,24,8,20,8,24}
m[16..31]:={9,16,25,28,9,16,25,28,9,16,25,28,9,16,25,28}
m[32..47]:={6,11,18,27,6,11,18,27,6,11,18,27,6,11,18,27}
m[48..63]:={8,12,20,24,8,12,20,24,8,12,20,24,8,12,20,24}
for (i=0:i<=63:i++)
n[i]:=double(abs(sin(i+1))×2^32)
//初始化變量:
int k0 :=0x8659210A
int k1 :=0xBC89CE68
int k2 :=0x63EB72FD
int k3 :=0xF264DC78
//前期處理:
append the bit '1' to the message
append the bits '0' where length of message in bits≡448(mod 512)
append length of message(before pre-processing),in bits,as 64-bit little-endian integer
//在連續(xù)的512 位數(shù)據(jù)塊中處理消息
break message into 512-bit chunks
for each chunk
break chunk into sixteen 32-bit little-endian words w[j],0<=j<=15
//初始化哈希值:
int a :=k0
int b :=k1
int c :=k2
int d :=k3
//主循環(huán):
for (j=0:j<=63:j++)
{ if( 0<=j<=15)
{ p :=(x and y) or ((not x) and z)
q :=j}
else if 16<=j<=31
{ p :=(z and x) or ((not z) and y)
q :=(5×j+1) mod 16}
else if 32<=j<=47
{ p :=x xor y xor z
q :=(3×j+5) mod 16}
else if 48<=j<=63
{ p :=y xor (x or (not d))
q :=(7×j) mod 16}
temp :=z
z :=y
y :=x
x :=leftrotate((w+p+n[j]+w[q]),r[j])+x
w :=temp
}
//將哈希值添加到結(jié)果中
k0 :=k0+w
k1 :=k1+x
k2 :=k2+y
k3 :=k3+z
End For Each 512-bit chunks
int result :=k0 append k1 append k2 append k3
通過計算機仿真實驗,將案例數(shù)據(jù)進行MD5 加密計算,得出的結(jié)果證明了文中提出的算法是可靠的、有效的。
硬件環(huán)境:Intel Core i7 4710HQ 平臺計算機。
軟件環(huán)境:Eclipse IDE for Java Developers,Version: Neon.1a Release (4.6.1)。
文中采用Java 語言實現(xiàn)MD5算法。
實驗IMD5算法驗證
為證明MD5算法的可靠性和有效性,采用了已知的幾組MD5 值數(shù)據(jù)進行實驗,驗證結(jié)果見表1?!按用苄畔ⅰ绷惺? 條常用的用于驗證MD5算法的數(shù)據(jù),“已知的參考MD5 值”列是已知的MD5算法計算結(jié)果,該仿真實驗計算出的MD5 值在“計算出的MD5 值”列。
表1 MD5算法安全性驗證
以上的MD5 值都采用16 進制形式列出,輸出均是128 位單向散列值。對比可知計算無誤,文中編寫的程序可用于正確地計算MD5 值。
實驗II算法安全性驗證
下面對一條數(shù)據(jù)“GOLDEN_1dot6180339887”進行處理,在數(shù)據(jù)正確、缺失、冗余、篡改的條件下分別計算MD5 值,進而驗證算法的安全性,結(jié)果見表2。
表2 算法安全性驗證
在該實驗中,受攻擊的數(shù)據(jù)均與原數(shù)據(jù)有1 位的不同,而計算出的MD5 值完全不同。通過收、發(fā)兩端的MD5 加密后的數(shù)據(jù)對比驗證數(shù)據(jù)傳輸過程的安全可靠性。
WSN 節(jié)點設備通常安置在不安全的野外環(huán)境中,很容易被攻擊者竊取、偽造、盜改傳感器中采集的數(shù)據(jù),降低了系統(tǒng)的安全性和有效性。在WSN 數(shù)據(jù)的末尾增加數(shù)字簽名,將極大地增加了攻擊者攻擊數(shù)據(jù)的難度,提高了無線傳感器網(wǎng)絡系統(tǒng)的安全穩(wěn)定性。該論文采用MD5算法為簽名加密算法,以Java 為軟件平臺仿真了對數(shù)據(jù)計算摘要的過程。目前的硬件水平限制了傳感器網(wǎng)絡的性能,因而無法使用更為復雜的加密算法,但相信隨著技術(shù)的發(fā)展,無線傳感器網(wǎng)絡的性能會越來越高,更安全、更復雜的算法可以應用到其中,WSN 將會更高效、更可靠。