遠(yuǎn)程智能終端RTU2600中的數(shù)據(jù)加密算法

要使遠(yuǎn)程測(cè)控系統(tǒng)的的現(xiàn)場(chǎng)測(cè)控?cái)?shù)據(jù)和遠(yuǎn)程操作信息在網(wǎng)絡(luò)上安全地傳輸,就要保證數(shù)據(jù)在傳輸過程中的保密性,可鑒別性和完整性。其中保密性是保證加密信息即使被非法攝取后也無法被破譯;可鑒別性防止發(fā)送方或者接收方的身份被他人冒充或偽造;完整性防止數(shù)據(jù)在傳輸過程中被篡改、刪除或丟失。

根據(jù)上述要求,使用目前流行且具安全強(qiáng)度大的RSA,AES和MD5三種加密算法,組合成為一種混合算法:利用對(duì)稱密碼算法AES的加解密速度的優(yōu)勢(shì)加密數(shù)據(jù)完成數(shù)據(jù)的保密性,利用RSA加密AES的密鑰解決密鑰分配問題和用戶的鑒別問題,通過MD5檢測(cè)數(shù)據(jù)的完整性。最后將算法應(yīng)用于遠(yuǎn)程測(cè)控智能終端RTU2600上,達(dá)到對(duì)產(chǎn)品安全性能方面的改進(jìn)。

一、加密算法描述

1、加密明文

使用AES加密算法加解密大量的明文數(shù)據(jù)。AES是對(duì)稱加密體制中的一種迭代式的分組密碼,加解密密鑰相同,具有速度快,安全性高,對(duì)內(nèi)存需求低,便于軟件實(shí)現(xiàn)的優(yōu)點(diǎn)。加密算法如下:

首先生成128位密鑰(也可以是192位或256位,現(xiàn)使用128位),然后將明文進(jìn)行分組,分組長(zhǎng)度也為128位,不足的用0補(bǔ)齊。分組后每組以字節(jié)為單位按每4個(gè)字節(jié)一行排成4行,組成一個(gè)4*4字節(jié)的矩陣,稱為一個(gè)狀態(tài),然后進(jìn)行輪變換。 AES的輪變換由四種不同的變換組成,分別為:

(1)字節(jié)替換:一個(gè)基于S盒的非線性置換,將狀態(tài)的每一個(gè)字節(jié)通過一個(gè)查表操作,將其映射為另一個(gè)字節(jié);

(2)行移位變換:以字節(jié)為單位,將狀態(tài)的后三行以不同的移位量循環(huán)左移;

(3)列混合變換:將狀態(tài)的每列視為在GF(2的8次方)上的多項(xiàng)式s(x),與一個(gè)固定的多項(xiàng)式c(x)={03}X3+{02}X2+{01}x+{02}模X4 +1相乘;

(4)加密鑰:將狀態(tài)與單輪子密鑰按位異或,每輪的子密鑰由初始的128位密鑰擴(kuò)展生成。

加密過程:初始輪變換僅由加密鑰組成,接下來的9輪每輪都經(jīng)過上述的4種變換,最后一輪進(jìn)行3種變換,沒有列混合變換。經(jīng)過總共10輪的變換,得到128位的密文。

2、密鑰分配及數(shù)字簽名

AES加密明文后需要將AES密鑰傳送給接收方,為了保證密鑰在非安全通道下的傳輸過程中不被他人所截獲并解密密文,就要使用非對(duì)稱密碼算法加密AES密鑰來進(jìn)行密鑰分配。同時(shí)為了保證發(fā)送數(shù)據(jù)來自發(fā)送方,而不是他人偽造,可用非對(duì)稱密碼算法對(duì)發(fā)送數(shù)據(jù)進(jìn)行數(shù)字簽名。

RSA是一種非對(duì)稱密碼算法,使用兩個(gè)密鑰,一個(gè)公鑰(公開),一個(gè)私鑰(自己保留)。用其中一個(gè)密鑰加密時(shí)必須使用另一個(gè)密鑰才能解密。算法如下:

生成密鑰:

(1)選擇兩個(gè)大素?cái)?shù)p和q,一般在10的1oo次方左右;

(2)計(jì)算n=pq和φ(n)=(p-1)(q-1);

(3)選擇e作為加密的公開密鑰,并滿足1<e<φ(n),e和φ(n)互素;

(4)由e計(jì)算出解密密鑰d=e-1mod φ(n);

(5)最后得到公鑰Ku={e,n},私鑰kr={d,n}。

加密方法:

用肘表示明文,C表示密文,(M和C均小于n)加密時(shí)計(jì)算C = Memodn得到密文,解密時(shí)計(jì)算M=Cdmod n恢復(fù)明文。

公鑰可以通過公共渠道獲得,可以是一個(gè)公鑰數(shù)據(jù)庫,可也以將所有通信方的公鑰記錄在一個(gè)電話本上。如果A想要把AES的密鑰Ks傳遞給B,便用B的公鑰Kub加密Ks得到EKUb[ Ks],將加密后的密鑰EKub[ Ks]通過非安全的通道發(fā)送給B,B收到密文后用自己的私鑰Krb解密得到AES密鑰EKrb[ EKub[Ks]]=Kso用對(duì)方公鑰加密數(shù)據(jù)的方式也稱作“數(shù)字信封’’,只有擁有私鑰的人才能打開“信封’’,數(shù)字信封一般應(yīng)用于密鑰分配。此外,為了保證數(shù)據(jù)來源于發(fā)送方而不是其他人,可用發(fā)送方的私鑰加密數(shù)據(jù),這種方式也稱作“數(shù)字簽名’’,接收方使用發(fā)送方的公鑰解密則能驗(yàn)證簽名,可保證數(shù)據(jù)的可鑒別性。

RSA以數(shù)論中的歐拉函數(shù)為基礎(chǔ),依賴于大整數(shù)因數(shù)分解的困難性。其優(yōu)點(diǎn)是多人通信時(shí)可減少密鑰數(shù)量(n人之間使用非對(duì)稱密碼體制通信需要2n個(gè)密鑰,使用對(duì)稱密碼體制需要n×(n -1)/2個(gè)密鑰)密鑰便于管理,且分配簡(jiǎn)單,不需要秘密的通道和復(fù)雜的協(xié)議來傳送密鑰,但就是加解密速度很慢,不適合直接加密明文,所以RSA一般應(yīng)用于密鑰分配和數(shù)字簽名。

3、數(shù)據(jù)完整性

保證數(shù)據(jù)的完整性就是防止數(shù)據(jù)在傳輸過程中被人為地篡改或者因客觀原因造成數(shù)據(jù)丟失、誤碼等?,F(xiàn)使用MD5加密算法驗(yàn)證數(shù)據(jù)的完整性。

MD5是一種摘要算法,將輸入消息(小于264位)經(jīng)過不可逆變換的散列函數(shù)運(yùn)算后得到唯一的128位輸出。算法如下。

(1)添加填充位,填充消息使其長(zhǎng)度恰好為一個(gè)比512的倍數(shù)小64位的數(shù)。填充方法是附一個(gè)1在消息后面,后接多個(gè)0已達(dá)到要求長(zhǎng)度。

(2)添加長(zhǎng)度,添加一個(gè)64 bit表示原始消息的長(zhǎng)度值。

(3)初始化消息摘要的緩沖區(qū),共四個(gè)初始化變量,每個(gè)32 bit。

(4)以512 bit數(shù)據(jù)塊為單位處理消息,算法核心包括四個(gè)循環(huán)模塊,每個(gè)循環(huán)由16個(gè)處理步驟組成。

(5)循環(huán)結(jié)束后得到128 bit摘要。

MD5在驗(yàn)證數(shù)據(jù)的完整性的同時(shí)可以和RSA共同使用更好地完成數(shù)字簽名。因?yàn)镽SA算法加解密速度很慢,加密整個(gè)明文是不現(xiàn)實(shí)的,而摘要是明文的一個(gè)不可逆的唯一映射,相對(duì)整個(gè)明文來說要小很多,所以加密128 bit摘要就相當(dāng)于對(duì)整個(gè)明文“簽名”。

4、混合加密算法

結(jié)合上述三種算法的優(yōu)點(diǎn),提出一種混合加密算法,見圖1 。

遠(yuǎn)程智能終端RTU2600中的數(shù)據(jù)加密算法
發(fā)送的數(shù)據(jù)由三部分組成:AES加密后的明文,RSA加密后的AES密鑰,RSA加密后的摘要。AES加密速度快,用于加密明文。用接收方B的RSA公鑰加密AES的密鑰,完成AES密鑰分配。用發(fā)送方A的RSA私鑰加密摘要,即保證了數(shù)據(jù)的可鑒別性又保證了數(shù)據(jù)的完整性。接收數(shù)據(jù)后,用B的RSA私鑰恢復(fù)出AES密鑰,并用其解密出明文。用恢復(fù)出的明文計(jì)算MD5摘要,并與RSA解密后的摘要相比較,如果一致則說明簽名得到驗(yàn)證且數(shù)據(jù)在傳輸過程中沒有改變,否則就丟棄解密后的明文并請(qǐng)求重發(fā)。如果接收方成功解密AES密鑰,即密鑰分配完成,則在后繼的數(shù)據(jù)傳輸過程中就使用該密鑰加密明文,無需再次傳輸AES密鑰(無需每次加密時(shí)使用不同的AES密鑰),其他過程不變。

二、在遠(yuǎn)程智能終端RTU2600的加密實(shí)現(xiàn)

1、RTU2600工作原理

RTU2600是威控公司生產(chǎn)的一種遠(yuǎn)程智能終端( Remote Terminal Unit),它將采集、控制、通訊三種功能合為一體,能獨(dú)立地完成預(yù)定的控制程序、執(zhí)行上位機(jī)指令,并將執(zhí)行結(jié)果和現(xiàn)場(chǎng)數(shù)據(jù)回傳上位機(jī)。

RTU2600內(nèi)置Rabbit3000處理器,運(yùn)行的語言是Dynarnic C,具有GSM/GPRS/CDMAlx等無線通信方式。利用GPRS網(wǎng)絡(luò)通過無線的方式接入Internet,利用GPRS和Intemet網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸。在RTU和上位機(jī)之間實(shí)現(xiàn)端到端的加密方式,加密對(duì)象為RTU向上位機(jī)發(fā)送的現(xiàn)場(chǎng)采集數(shù)據(jù),上位機(jī)收到密文后用同樣的算法解密。上位機(jī)發(fā)送給RTU的命令仍為明文形式。下面給出RTU工作時(shí)的狀態(tài)機(jī)流程圖(圖2)。

遠(yuǎn)程智能終端RTU2600中的數(shù)據(jù)加密算法

2、加密功能實(shí)現(xiàn)

加密通過軟件的方式實(shí)現(xiàn),RTU所使用的開發(fā)語言是Dynamic C,Dynamic C是用于編寫嵌入式應(yīng)用軟件的一套集成的開發(fā)系統(tǒng),專為Z-World控制器和基于Rabbit微處理器的控制器而設(shè)計(jì)。 Dynamic C的庫中包含AES和MD5算法的函數(shù),所以直接調(diào)用即可,而RSA函數(shù)則需要自己編譯。

首先,生成128bitAES密鑰(每次通信時(shí)AES密鑰可不一樣),用AESexpandKey4()將128bit密鑰擴(kuò)展為1408bit以滿足算法中的10次輪變換,最后使用AESencrypt4x4()通過擴(kuò)展后的密鑰加密明文。

用md5_init()初始化MD5函數(shù),并用md5_ap-pend()和md5_finish()完成對(duì)明文的hash變換,得到128位輸出。

在通信前預(yù)計(jì)算出通信時(shí)所需要的RSA參數(shù):

p,q,n,e,d。其中p和q推薦使用強(qiáng)素?cái)?shù)。這樣,如果用Pollard的p-l質(zhì)因數(shù)分解算法來分解n=pq就會(huì)變得不可行oe選擇3,17或65537以提高加密速度。

圖3為Dynamic C Version 8.61界面,數(shù)據(jù)文件加密后正在發(fā)送。

遠(yuǎn)程智能終端RTU2600中的數(shù)據(jù)加密算法

本文提出了一種混合數(shù)據(jù)加密算法,算法結(jié)合AES,RSA,MD5的優(yōu)點(diǎn),解決了數(shù)據(jù)傳輸過程中的保密性,可鑒別性,和完整性的問題。并將算法應(yīng)用在RTU2600中,提高了數(shù)據(jù)在工業(yè)網(wǎng)絡(luò)中傳輸?shù)陌踩?br /> 性。有一點(diǎn)需要注意的是:在雙方第一次通信時(shí)(都不知道對(duì)方公鋼的情況下)。不要在非安全桀道下將自己盼公飼傳遞給對(duì)方,一定饕通過安全渠道獲得對(duì)方公鑰(打電話或者發(fā)郵件)。這樣可確保公鑰和使用者之間的綁定關(guān)系,否則如果遭到中間人攻擊,整個(gè)加密算法就會(huì)失去作用。RSA密鑰盡量不要經(jīng)常更換,必須要更換時(shí)就用安全渠道告知對(duì)方自己的公鑰,或者使用證書的方式建立一個(gè)公鑰數(shù)據(jù)庫,通過證書確定公鑰和使用者之間的綁定關(guān)系。

小知識(shí)之智能終端

智能終端設(shè)備是指那些具有多媒體功能的智能設(shè)備這些設(shè)備支持音頻、視頻、數(shù)據(jù)等方面的功能.如:可視電話、會(huì)議終端、內(nèi)置多媒體功能的PC、PDA……