基于動態(tài)循環(huán)代替表的加密算法

任何文字都有一個符號表,傳統(tǒng)密碼方法中,許多是以符號表的置換來達(dá)到掩蓋明文信息的,典型的如:移位密碼、單表置換密碼等幽,單表置換密碼采用明、密字母“一一對應(yīng)”的方式實(shí)現(xiàn)對明文的加密,因此明文的很多特性都沒有被掩蓋,如自然語言的字母使用頻率,雙字母、三字母組合規(guī)律等都會反應(yīng)到密文中,破譯者只要積累了足夠長度的密文,利用統(tǒng)計、分析方法,就可以實(shí)現(xiàn)密文的破解。

為了彌補(bǔ)單表密碼明、密文字母“一一對應(yīng)”的缺陷,人們想到“一多對應(yīng)”的方式,即一個明文字母可以由多個密文字母來替代。按照這種思路構(gòu)建的密碼體制被稱為多表密碼體制,維吉尼亞密碼(V一genre)就是其典型代表之一,多表密碼增加了破譯的難度,提高了保密性,但由于仍然是以單個字母為基礎(chǔ)的代換,還是會被密碼分析者利用各種統(tǒng)計方法一一破譯。在經(jīng)典單表密碼、多表密碼的基礎(chǔ)上,提出了一種新的多表密碼體系,但是該方法在實(shí)際應(yīng)用中的加密效率和強(qiáng)度還存在很多不足,本研究在深入研究單表置換密碼的基礎(chǔ)上,結(jié)合字節(jié)交換和循環(huán)移位思想,提出了一種基于動態(tài)循環(huán)代替表的加密算法。

一、加密算法的描述

1、密鑰管理問題的解決

現(xiàn)代密碼技術(shù)分為對稱加密體制和非對稱加密體制兩類,對稱加密體制中通信雙方需要采用一種安全的方式來保證密鑰的共享,非對稱加密體制通信雙方各有一對密鑰,不需要密鑰的交互。一般來說,非對稱加密體制對數(shù)據(jù)的處理效率沒有對稱加密體制效率高,但是密鑰卻更易于管理。因此,在實(shí)際應(yīng)用中,可以考慮引入非對稱加密體制進(jìn)行雙方密鑰協(xié)商,然后利用協(xié)商的密鑰采用對稱加密體制進(jìn)行數(shù)據(jù)的加密解密,這樣就可以最大程度地發(fā)揮兩類密碼體制的優(yōu)勢。

橢圓曲線密碼學(xué)(ECC)是基于橢圓曲線數(shù)學(xué)的一種公鑰密碼方法,其數(shù)學(xué)基礎(chǔ)是利用橢圓曲線上的有理點(diǎn)構(gòu)成Aebel加法群上橢圓曲線離散對數(shù)的計算。ECC作為一種典型的非對稱加密體制,其應(yīng)用非常廣泛,特別是在處理短消息時,對帶寬的要求非常低,因此,在該加密算法的設(shè)計過程中,引入了ECC密碼技術(shù)進(jìn)行密鑰協(xié)商,解決算法使用過程中的密鑰管理問題。

2、加密算法描述

設(shè)待加密的明文字符序列M=(m1,m2,…),密鑰為K,生成的密文字符序列為C=c1,c2,…)。基于動態(tài)循環(huán)代替表的加密算法數(shù)據(jù)處理過程如圖1所示。

基于動態(tài)循環(huán)代替表的加密算法

基于動態(tài)循環(huán)代替表的加密算法分為三個階段:會話密鑰的協(xié)商階段;初始代替表的生成;數(shù)據(jù)處理階段,三個階段的處理過程可用下面的步驟進(jìn)行描述。

Step1協(xié)商會話密鑰K,由A選取加密密鑰K,利用B的公鑰對K采用ECC加密技術(shù)進(jìn)行加密。當(dāng)B收到這個加密后的信息時,用自己的私鑰進(jìn)行解密,就得到了雙方此次通信的共享密鑰,然后返回給A一個OK信息,至此會話密鑰的協(xié)商階段完成。

Step2生成初始代替表:

1)A調(diào)用設(shè)計的散列函數(shù)對加密密鑰K進(jìn)行HASH變換,生成一個4字節(jié)的無符號整數(shù)seed,srand是Windows操作系統(tǒng)隨機(jī)數(shù)發(fā)生器的初始化函數(shù),在此將seed作為該初始化函數(shù)的初始化種子,生成一組256個字符OXOO - OXFF)的偽隨機(jī)排列,記為置亂表t1。

2)A調(diào)用MD5函數(shù)對加密密鑰K進(jìn)行HASH變換,生成一個32字節(jié)的消息摘要,利用128級的線性反饋移位寄存器LFSR)對其進(jìn)行運(yùn)算選位,生成一組256個字符(OXOO -OXFF)的偽隨機(jī)排列,記為置亂表t2。線性反饋移位寄存器具有良好的隨機(jī)特性,是一種研究得非常成熟的序列生成方法,己被廣泛地應(yīng)用于密碼技術(shù)、保密通信技術(shù)等方面。

3)以置亂表t1,和t2形成一張初始代替表T,至此,初始代替表的生成階段完成,初始代替表生成器如圖2所示。

基于動態(tài)循環(huán)代替表的加密算法

Step3數(shù)據(jù)處置階段,為了提高加密、解密速度,以每次讀取兩個字節(jié)進(jìn)行數(shù)據(jù)處理。

動態(tài)循環(huán)代替表的運(yùn)算規(guī)則如下:

1)讀取兩個明文字節(jié)m1和m2,在表t1中分別查找m1和m2的位置,并通過動態(tài)循環(huán)代替表T查找其在表t2中的置換字符C1和C2,則C1和C2即為明文字符m1和m2的相應(yīng)密文。

2)交換動態(tài)循環(huán)代替表中t2表的c1和C2字符。

3)t1表保持不變,將t2表循環(huán)左移7個字節(jié),得到一張新的t2表,t1表和t2表形成一張新的動態(tài)循環(huán)代替表T。

動態(tài)循環(huán)代替表流程圖如圖3所示,其中T(m)表示明文字符m通過查找動態(tài)循環(huán)代替表T所得的密文字符,Swap(c1,C2)表示對動態(tài)循環(huán)代替表中t2表的C1和C2字符進(jìn)行交換,string_Shift(t2,7)表示將代替表的右2表循環(huán)左移7個字節(jié)。

基于動態(tài)循環(huán)代替表的加密算法

數(shù)據(jù)加密過程可以描述為:

1)讀取發(fā)送的明文數(shù)據(jù)并計算其長度filelen。

2)判斷明文數(shù)據(jù)長度filelen的奇偶性,如果filelen為偶數(shù),則從發(fā)送的明文數(shù)據(jù)M中每次讀取兩個字節(jié),調(diào)用動態(tài)循環(huán)代替表進(jìn)行數(shù)據(jù)加密,直至加密結(jié)束。如果filelen為奇數(shù),則對明文數(shù)據(jù)M的前filelen-1個字節(jié),每次讀取兩個字節(jié),調(diào)用動態(tài)循環(huán)代替表進(jìn)行數(shù)據(jù)加密,直至對這filelen-1個字節(jié)加密結(jié)束,此時得到一張最新的動態(tài)循環(huán)代替表。對最后一個字節(jié),通過查這張最新的動態(tài)循環(huán)代替表得到密文字符。

至此,加密過程結(jié)束。

Step4 A將加密所得的密文C發(fā)送給B。B收到數(shù)據(jù)以后按照設(shè)定的方法進(jìn)行解密,就能得到消息數(shù)據(jù)M。

3、解密算法描述

整個解密過程中B在得到會話密鑰K以后也要采用同樣的算法來產(chǎn)生初始代替表,用于得到密文C后進(jìn)行數(shù)據(jù)的解密,對相同的會話密鑰K,B通過Windows操作系統(tǒng)偽隨機(jī)數(shù)發(fā)生器產(chǎn)生的O到255的偽隨機(jī)排列與A相同,即A和B產(chǎn)生的置亂表t1相同,同樣,.對相同的會話密鑰K,A和B通過128級LF-SR產(chǎn)生的置亂表t2也相同。因此,A和B加解密過程中使用的初始代替表相同。在解密過程中A、B通過調(diào)用動態(tài)循環(huán)代替表進(jìn)行數(shù)據(jù)解密,直至解密結(jié)束。

二、加密算法分析

1、密鑰管理

對于一個有n個節(jié)點(diǎn)的網(wǎng)絡(luò),需要一個共享密鑰K但是當(dāng)n比較大的時候,過多的節(jié)點(diǎn)共享一個密鑰就難以保證密鑰的安全性,如果是采用對稱加密機(jī)制,節(jié)點(diǎn)間兩兩共享一個密鑰,那么網(wǎng)絡(luò)中就需要:

基于動態(tài)循環(huán)代替表的加密算法個密鑰。當(dāng)n比較大時,這個數(shù)目就非常巨大,不易管理。

而在本文引入密鑰協(xié)商的基于動態(tài)循環(huán)代替表的加密算法中,由于引入了ECC密碼技術(shù)進(jìn)行會話密鑰協(xié)商,網(wǎng)絡(luò)本身需要管理的只有每個節(jié)點(diǎn)的密鑰,網(wǎng)絡(luò)中的每個節(jié)點(diǎn)都有一個公開密鑰和一個私有密鑰,公開密鑰是公開的,其他節(jié)點(diǎn)都能查到;而私有密鑰只有每個節(jié)點(diǎn)自己知道。網(wǎng)絡(luò)對密鑰的更新管理也只需要負(fù)責(zé)每個節(jié)點(diǎn)的這些密鑰即可,這大大的減輕了網(wǎng)絡(luò)中的密鑰管理問題。

2、數(shù)據(jù)處理效率

基于動態(tài)循環(huán)代替表的加密算法采用對稱密碼體制中的代替作業(yè)方式對數(shù)據(jù)進(jìn)行加密,其動態(tài)循環(huán)代替表主要操作包括字節(jié)交換和字符串的循環(huán)移位,數(shù)據(jù)處理速度快,比如,對大小為100 k的doc文件加密,平均速度只需大概0.1s,能夠很好滿足用戶需求。

3、安全性分析

信息加密的目的是維護(hù)明文或密鑰的安全,防止破譯著進(jìn)行密碼攻擊,下面采用密碼分析過程中常用的窮舉法和分析破譯法對該加密算法進(jìn)行分析,并對加密密鑰的雪崩效應(yīng)進(jìn)行測試。

(1)窮舉法

又稱完全試湊法,它對截獲到的密文用各種可能的密鑰進(jìn)行試譯,直到獲得有意義的明文為止,基于動態(tài)循環(huán)代替表的加密算法的代替表是分別利用設(shè)定的散列函數(shù)和MD5摘要函數(shù)對密鑰K進(jìn)行HASH變換,分別生成4字節(jié)和32字節(jié)的消息摘要,然后再分別通過基于操作系統(tǒng)的偽隨機(jī)數(shù)發(fā)生器和基于128級LFSR偽隨機(jī)數(shù)發(fā)生器生成的兩組O到255之間的偽隨機(jī)排列,作為初始代替表,因此,初始代替表由密鑰K決定,密鑰長度不應(yīng)太短,假如使用16字節(jié)長的密鑰,則密鑰共有2128種可能,試圖窮舉密鑰顯然是不切實(shí)際的。

(2)分析破譯法

破譯者利用密文所用自然語言的各種統(tǒng)計特性,與密文中出現(xiàn)的字母或字母組合的統(tǒng)計特性進(jìn)行對比,從中提取出明文與密文之間對應(yīng)或變換關(guān)系,在該加密算法中,一個明文字符可以對應(yīng)多個密文字符,最多可以對應(yīng)256個,而同一個密文字符,也可以對應(yīng)多個明文字符,對不同明文,有可能加密成相同密文。對于明文中出現(xiàn)相同的字符,如果不是一次讀取進(jìn)行處理的兩個字符,則加密后的字符可能不同,因此,明文的很多特性被很好的掩蓋,無法通過應(yīng)用頻率分析和自然語言的規(guī)則進(jìn)行破譯,本研究采用F值檢驗(yàn)來測試加密效果,設(shè)數(shù)據(jù)文件中比特O出現(xiàn)次數(shù)為n,比特1出現(xiàn)次數(shù)為n1,則比特o的T值為:基于動態(tài)循環(huán)代替表的加密算法,比特1的T值為基于動態(tài)循環(huán)代替表的加密算法:整個數(shù)據(jù)文件的T值為:基于動態(tài)循環(huán)代替表的加密算法。

比如用密鑰ilovechina對《Gone With The Wind》一文進(jìn)行加密,加密前后O、1頻率分布分別如圖4和圖5所示??梢钥闯?,密文O、1比特幾乎各占50%,T值趨近于O,一加密效果非常好。

基于動態(tài)循環(huán)代替表的加密算法

為了更好地分析加密效果,選擇RC4算法進(jìn)行比較。RC4流密碼技術(shù)以隨機(jī)置換為基礎(chǔ),是一個可變密鑰長度、面向字節(jié)操作的流密碼技術(shù),這里選取500個測試文件,考慮到測試的全面性,將測試文件分為10組分別為txt文件,pdf文件,doc文件,exe文件,jpg文件,rar文件,xls文件,bmp文件,mdb文件,ppt文件),每組隨機(jī)選取大小不同的50個文件作為測試用例,測試結(jié)果如表1所示。

從表1看出,基于動態(tài)循環(huán)代替表的加密算法對txt文件,exe文件,rar文件的加密效果相對較好,對pdf文件,doc文件,jpg文件,xls文件的加密效果與RC4的加密效果相比略顯不足,另外,使用基于動態(tài)循環(huán)代替表的加密算法加密所有文件后的的平均T值為0.8353,兩者相近,可以看出,本研究提出設(shè)計的加密算法基本能夠達(dá)到RC4算法的加密效果。

基于動態(tài)循環(huán)代替表的加密算法

還對密文分別進(jìn)行8比特和16比特狀態(tài)統(tǒng)頻,重碼分析,線性分析等多種密碼分析方法,結(jié)果表明,該算法能夠優(yōu)秀的抵抗多種攻擊,具有較好的安全性。

(3)密鑰雪崩效應(yīng)測試

在密碼算法中,如果明文或密鑰發(fā)生一個比特的變化,都會導(dǎo)致密文的巨大變化,基于動態(tài)循環(huán)代替表的加密算法在生成初始代替表時,要先分別利用設(shè)計的散列函數(shù)和MD5函數(shù)對密鑰K進(jìn)行HASH變換,因此,密鑰的一個比特改變會導(dǎo)致初始代替表的大幅度改變,進(jìn)而導(dǎo)致加密數(shù)據(jù)的大幅度改變,算法安全性非常高,為了檢測本算法加密密鑰的雪崩效應(yīng),采用正態(tài)總體均值與方差的區(qū)間估計方法密文變化率平均值的置倍度為1-α的置信區(qū)間為:

基于動態(tài)循環(huán)代替表的加密算法

這里選取200個數(shù)據(jù)進(jìn)行測試,將其分為5組,每組40個,在測試中,每組采用相同的明文,測試密鑰出現(xiàn)一個比特變化時密文的變化情況,測試結(jié)果如表2所示。

基于動態(tài)循環(huán)代替表的加密算法

從表2測試結(jié)果可以看出,每組測試數(shù)據(jù)的密文變化率之間雖然存在著一定的差異;但是當(dāng)密鑰出現(xiàn)一個比特變化時,密文的變化率都超過了99.5%,200份數(shù)據(jù)的密文平均變化率為99. 607%,并且變化率位于99.607%±1%范圍的置信程度為99%,變化率的均方差小于0.10-10。因此,本算法加密密鑰具有很穩(wěn)定的雪崩效應(yīng)。

4、加密算法缺陷分析及改進(jìn)意見

該加密算法每次加密兩個字符,若一次讀取進(jìn)行處理的兩個字符相同,如AA,則本次加密結(jié)果相同。

為了解決這個問題,可以采取如下方法解決:

Step1先用本文加密算法生成一張初始代替表T。同樣,設(shè)定基于操作系統(tǒng)偽隨機(jī)數(shù)發(fā)生器產(chǎn)生的O到255偽隨機(jī)排列為t1表,基于128級LFSR偽隨機(jī)數(shù)發(fā)生器產(chǎn)生的O到255偽隨機(jī)排列為t2表,由t1表和t2表構(gòu)成初始代替表。

Step2每次加密過程中讀取一個字符m,在tl表中查詢其所在位置W21,通過查代替表查詢密文字符c,在tl表中查詢密文字符c所在位置W22。

Step3交換t2表中W21位置和W22位置的兩個字符,再將t2表循環(huán)左移7個字節(jié),形成一張新的代替表Z回到Step2,直至加密結(jié)束,該方法能夠有效解決上述問題,但是卻在一定程度上降低了數(shù)據(jù)加解密速度。

小知識之雪崩效應(yīng)

雪崩效應(yīng)就是一種不穩(wěn)定的平衡狀態(tài)也是加密算法的一種特征,它指明文或密鑰的少量變化會引起密文的很大變化。對于Hash碼,雪崩效應(yīng)是指少量消息位的變化會引起信息摘要的許多位變化。