朱淑芹,李秀娟,李若玉
(聊城大學,山東 聊城 252059)
隨著網絡通信和大數據應用的快速發(fā)展,信息安全已經成為一個非常重要的熱點問題。保護信息最重要的手段是數據加密。因此,密碼學是信息安全的核心技術。在現代密碼系統(tǒng)中,塊加密算法得到了廣泛的應用,如數據加密標準(Data Encrypted Standard,DES)、高級加密標準(Advanced Encrypted Standard,AES)等。然而,由于圖像中數據量大,相鄰數據相關性強,存在冗余等特點,傳統(tǒng)的加密算法不適用于圖像加密。作為非線性系統(tǒng)的混沌,存在著貌似隨機的不規(guī)則運動,其行為表現為不確定性、不可重復、不可預測,這使得混沌與密碼學有許多天然的聯(lián)系。比如,混沌系統(tǒng)能產生大量的偽隨機序列,能構造非線性加密元件,可以快速生成大量密鑰。作為傳統(tǒng)加密技術的補充,混沌加密技術非常適合實時圖像加密系統(tǒng)。
S盒作為分組密碼系統(tǒng)中唯一的非線性元件,對密碼系統(tǒng)的安全性能有著重要的影響。AES在很大程度上被認為是一種有效的密碼體制,它的一個重要組成部分是基于GF(28)的逆和仿射變換的S盒元素。隨著AES在通信系統(tǒng)中的普及,S盒引起了密碼系統(tǒng)設計者的關注。利用混沌系統(tǒng)產生S盒并將其應用于圖像加密是混沌系統(tǒng)最有前途的研究領域,人們提出了許多相關的工作[1-10]。對于分組密碼系統(tǒng)中S盒的設計,S盒的強密碼性能一直是密碼系統(tǒng)設計人員的目標。研究人員提出了多種S盒構造方法。文獻[5]提出了一種基于離散混沌映射的S盒設計方法。該方法采用基于排列組合的離散混沌映射,混沌映射的連續(xù)值不需要離散化,因此S盒的生成過程不受任何近似的影響。文獻[6]采用七種不同的優(yōu)化算法,對四種不同的離散時間混沌系統(tǒng)確定了最合適的初始條件和控制參數,提出了一種基于最優(yōu)混沌參數的替換盒生成算法,該算法提高了S盒的數量和質量。利用zhongtang混沌系統(tǒng)豐富的動態(tài)特性,文獻[4]設計了一種具有較強密碼學特性的S盒設計算法,該算法在較短的時間和處理負載下生成的S盒具有最佳DP值,因此它比其他文獻中構造的S盒更安全。文獻[7]使用logistic映射、Mobius變換和對稱群S256構造出AES的動態(tài)S盒。相比傳統(tǒng)AES中使用的固定S盒組件,該算法中構造出的S盒組件加密強度將比以前更大。文獻[8]提出了一種新的基于三角形群的S盒構造方法,而文獻[9]提出了一種利用三次多項式映射設計S盒的新方法。文獻[10]提出了一種基于NCML時空系統(tǒng)生成S盒的新方法。NCML系統(tǒng)的高維特性不僅可以抵抗有限精度計算的退化,而且增加了所構造S盒的隨機性,同時利用獨立的混沌序列進行置換運算,改善了所構造S盒的BIC和LP性質。文獻[11]提出了一種基于抗退化混沌系統(tǒng)的動態(tài) S 盒設計方法。由于采用了抗退化的混沌系統(tǒng),生成的S 盒具有良好的非線性度、差分均勻性、嚴格雪崩準則、比特間獨立性等性能。
同時許多基于混沌和S盒的圖像加密算法被不斷提出。文獻[12]提出一種結合 S 盒與混沌映射的三階擴散圖像加解密算法,在設計中采用傳統(tǒng)的置亂擴散模式,并創(chuàng)新性地進行三階擴散,以圖像散列值作為混沌系統(tǒng)的密鑰,使提出的算法能抵抗選擇明文攻擊。針對目前低維混沌算法存在的明顯缺點,文獻[13]提出一種基于神經網絡(Convolutional Neural Network, CNN)超混沌與S盒結合的圖像加密算法,該算法能夠有效地抵擋選擇明文(密文)攻擊,實現了一次一密,而且擁有更大的密鑰空間,具有優(yōu)良的加密效果及速度快、復雜度低的優(yōu)點。文獻[14]提出一種基于線性Diophantus模型與循環(huán)移位動態(tài)S盒的圖像加密算法。文獻[15]以明文圖像的SHA-512哈希值作為混沌系統(tǒng)初值的一部分,構造出動態(tài)S盒,據此提出結合混沌系統(tǒng)和動態(tài)S盒的圖像加密算法。文獻[16]提出了一種基于切比雪夫混沌映射產生的多個混沌S盒的圖像加密算法。然而一些基于S盒的圖像加密算法存在安全缺陷,無法抵抗選擇的明文攻擊。文獻[17]提出了一種攻擊僅有S盒圖像加密系統(tǒng)的通用模型,而且攻擊的計算復雜度僅為O(128L)(其中L是圖像的像素總數)。文獻[18]中基于S盒的圖像加密算法已經被文獻[19]破解。文獻[20]破解了一種基于超混沌系統(tǒng)和動態(tài)S盒的圖像加密算法。以上圖像加密算法被破解的主要原因在于加密系統(tǒng)所用的密鑰流與明文圖像無關,加密不同的圖像所用密鑰流不變。最近,文獻[21]提出基于混沌映射與動態(tài)S盒的圖像加密算法,所提算法具有密鑰空間大,能夠抵抗窮舉攻擊,差分攻擊,具有加密效率高,易于實現的優(yōu)點。但是該加密系統(tǒng)的密鑰與明文圖像無關,加密不同的明文圖像所用的4個S盒和擴散階段所需的混沌序列是固定不變的,因此,導致該加密系統(tǒng)不能抵抗選擇明文的攻擊。本論文將詳細論述其安全缺陷并給出一個選擇明文攻擊方法。
利用Arnold cat映射具有置亂的特性來產生動態(tài)S盒,具體步驟如下:
步驟2:改變a,b,c,d的值繼續(xù)進行步驟1的操作,最終產生4個類似隨機的S盒。
該加密算法主要包括兩部分,第一部分是對圖像像素值進行擴散,即對圖像像素利用Logistic映射進行擴散; 第二部分則主要是利用產生的動態(tài)S盒對圖像像素進行置換操作。具體步驟如下:
步驟1:假設具有256級灰度級的明文圖像的矩陣為I,大小為M×N,用Logistic映射通過迭代生成長度為M×N的混沌序列X,將其轉化為整數,再把X轉化為大小為M×N的矩陣T,最后對I和T進行異或操作得到矩陣I′為
I′(m,n)=I(m,n)⊕T(m,n),
m=1,2,…,M;n=1,2,…,N
(1)
步驟2:將矩陣I′從上到下平均分為四塊,分別將圖像的每一塊對應一個隨機的S盒進行置換操作,得到密文圖像C為
C(m,n)=sub_byte[S(:,:),I′(m,n)],
m=1,2,…,M;n=1,2,…,N
(2)
式中:sub_byte[S(:,:),I′(m,n)]是一個函數,它返回S盒(row,col)中的元素值。row和col由I′(m,n)的值決定。例如,如果I′(m,n)=151=(10010111)2,則row=(1001)2+1=10,col=(0111)2+1=8。
從整個加密算法來看,加密系統(tǒng)的等效密鑰流為擴散階段所用的混沌矩陣T和4個S盒,但是它們的生成與明文圖像無關,加密不同的明文圖像所用的混沌矩陣T和4個S盒是固定不變的。因此,可以采用選擇明文攻擊的方法破解出待解密的密文。
選擇明文攻擊(CPA)是四種經典密碼攻擊方法中最強的一種[22]。選擇明文攻擊模型認為攻擊者有機會使用密碼系統(tǒng)的加密機,可以選擇特殊的明文來獲得相應的密文。因此,攻擊者使用這些已知的明文-密文對來破譯密碼系統(tǒng)的等效密鑰或目標密文。
從加密過程可知,密文圖像C的(m,n)處的像素值C(m,n)完全被S盒和I′(m,n)決定,而I′(m,n)的值由I(m,n)和T(m,n)共同確定。又因為加密不同的明文圖像所用的混沌矩陣T和4個S盒是固定不變的,因此,密文圖像C的(m,n)處的像素值C(m,n)與明文圖像I的(m,n)處的像素值I(m,n)是一一對應的。而明文圖像每個位置的像素的取值范圍為0~255,可以采用選擇明文攻擊的方法破解出待解密的密文。具體攻擊步驟如下:
1)假設待解密的密文圖像為C,大小為M×N。解密出的明文圖像為I。構造大小為M×N的像素值都為i-1的明文圖像Pi={Pi(m,n)=i-1}(i=1,2,…,256)。隨著i取值的變化,可以構造出256幅明文圖像Pi, 用原加密系統(tǒng)加密這256幅明文圖像Pi,得到對應的256幅密文圖像Ci={Ci(m,n)}。
2)對比密文圖像C在(m,n)處的像素值C(m,n),256幅密文圖像Ci在(m,n)處的像素值Ci(m,n)。若有C(m,n)=Ci(m,n),則得到明文圖像P的(m,n)處的像素值P(m,n)=i-1,這樣就可以解密出明文圖像P。具體的偽代碼描述如圖1所示。
從破解過程可以看出,我們不是破解出等效的密鑰流:混沌矩陣T和4個S盒,而是利用原加密算法的性質,通過分別對比256幅明文圖像對應的256幅密文圖像Ci,i=1,2,…256,與待解密圖像C的(m,n)處的值是否相等來確定明文圖像P的(m,n)處的值。
為了進一步證明文獻[22]不能抵抗選擇明文的攻擊,根據第2小節(jié)的分析,進行選擇明文攻擊的實驗仿真。仿真實驗采用Matlab2014a平臺,選用大小為256× 256的256級灰度圖像cameraman,混沌系統(tǒng)的參數選擇與原算法中的選擇保持一致。原加密算法的密鑰為Logistic 映射初值x0,參數μ以及產生四個S盒的廣義貓映的置亂輪數k,四組映射參數a,b,c,d。Logistic映射初值選為:x0=0.257 512 3,參數μ的值設定為3.875 123。產生四個S盒的廣義貓映的置亂輪數都為k=15,映射參數分別為:a=5,b=2,c=7,d=3;a=1,b=1,c=1,d=2;a=1,b=1,c=2,d=3;a=3,b=2,c=4,d=3。對Cameraman加密,得到圖像如圖2(a)所示,同時加密256幅大小為256× 256的256級灰度圖像Pi={Pi(m,n)=i-1}(i=1,2,…,256),得到對應的256幅密文圖像Ci={Ci(m,n)}。
在未使用加密密鑰的前提下,由第2小節(jié)提出的攻擊算法1破譯出圖2(a)對應的明文圖像,結果如圖2(b)所示。以上結果表明密碼破譯是成功的。
圖2 實驗仿真結果
原圖像加密算法還存在以下缺陷:
1)該算法沒有擴散效應,明文圖像(i,j)處的像素值發(fā)生改變時,密文圖像只有(i,j)處的像素值發(fā)生改變。
2)密碼系統(tǒng)缺乏置亂過程,導致密碼系統(tǒng)的抗攻擊能力降低。這也是本文能破解原算法的主要原因。
根據存在的安全漏洞,提出以下改進算法。
步驟1:構造4個S盒,其構造方法與原算法一致,這里不再贅述。
步驟2:設待加密的圖像是大小為M×N的灰度圖像I,把其轉化為長度為M×N的一維序列I。設置Logistic 映射初值x0與I的元素總和相關。
(3)
更新x0為
x0=(mod(floor(x0×sum),M×N))/(M×N)
(4)
利用新更新的x0作為Logistic映射初值進行迭代,生成長度為M×N的混沌序列X,對X進行升序排列得到位置索引序列值sx,按該序列值一一將I序列變換到新序列P,變換公式為
P(i)=I(sx(i))
(5)
步驟3:設置y0作為Logistic 映射初值進行迭代生成長度為M×N的混沌序列Y,通過(7)式把Y轉化為整數序列T={T(1),T(2),…,T(M×N)}。
T(i)=mod(floor(Y(i)×1014),256)
(6)
步驟4:由序列T再通過式(8)生成序列K={K(1),K(2),…,K(M×N)}
K(i)=mod(T(i),4)+1,i=1,2,…,M×N
(7)
顯然,K(i)的可能取值為1,2,3或4。
由置亂的圖像序列P通過式(9)生成序列kt
kt(i)=floor(P(i)×(i-1)/256)+1,
i=1,2,…,M×N
(8)
顯然,kt(i)∈[1,i-1]。
步驟5:利用序列T,kt進行如下操作得到中間密文CT
(9)
步驟6:利用序列K對中間密文CT進行S盒替換操作,得到最終的密文C。
C(i)=sub_byte[S(:,:,K(i)),CT(i)],
i=1,2,…,M×N
(10)
式中:sub_byte[S(:,:,K(i)),CT(i)]是一個函數,它返回第K(i)個S盒(row,col)中的元素值。row和col的值由CT(i)決定。
可以看出改進算法與原算法相比主要有以下三點優(yōu)勢。
1)改進算法增加了置亂操作且置亂序列的生成與明文圖像的像素總和相關,這增強了密碼系統(tǒng)的抗選擇明文攻擊的能力。
2)原算法在進行擴散操作時只是將明文圖像與隨機序列進行簡單的異或操作,沒有密文反饋機制,這導致原加密算法對明文和密文都不敏感。而改進算法在擴散階段引入了密文反饋機制,且反饋的密文的位置由序列kt決定,而kt又與明文相關,這使得改進算法對明文和密文都敏感,更能抵抗選擇明文攻擊。
3)改進算法在生成置亂序列sx時,混沌映射的初始值與明文圖像的所有像素總和sum相關,但在解密時sum并不屬于密鑰,因此改進算法具有“一次一密”的加密效果,但是沒有額外增加密鑰傳遞的負擔。
步驟1:利用密鑰,構造4個S盒。
步驟2:用密鑰y0作為Logistic 映射初值進行迭代生成序列T和K。
步驟3:利用K和4個S盒對密文C進行加密過程中步驟6的反操作得到中間密文CT。
步驟4:由式(10)可以解出P(1)。根據(9)式,由P(1)可以解出kt(1),從而得到CT(kt(1))。由式(10)可以進一步解出P(2),依次類推可以解出P(3),P(4),…,P(M×N),從而解密出序列P。
步驟5:由于置亂不改變像素值,從而
(11)
根據式(2)用sum去更新x0得到新的x0,用新的x0作為Logistic 映射初值進行迭代生成長度為M×N的混沌序列X,對X進行升序排列得到位置索引序列值sx,按該序列值一一將P序列變換到新序列I,變換公式為
I(sx(i))=P(i),i=1,2,…,M×N
(12)
把I轉化為大小為M×N的矩陣即得明文圖像。
改進后的加密算法的密鑰為Logistic映射初值x0,y0,參數μ以及產生四個S盒的廣義貓映的置亂輪數k,四組映射參數a,b,c,d。與原加密算法相比,多了一個y0。設置y0=0.568 732 98,其他的密鑰設置與第4節(jié)中的取值完全一樣。采用Matlab2014a平臺,選用大小為256× 256的256級灰度圖像“cameraman”和大小為256× 256的256級灰度圖像“peppers”,對它們進行加密和解密,其實驗結果如圖3所示。實驗結果表明改進后的加密算法加密效果良好且能無誤解密。
圖3 改進算法的仿真結果
5.2.1抵抗選擇明文攻擊分析
從式(5)和式(9)可知序列sx和kt的生成都與明文圖像相關,加密不同的圖像所用的序列sx和kt不同,具有“一次一密“的加密效果。因此,改進算法可以抵抗選擇明文攻擊。
5.2.2密文的統(tǒng)計特性分析
統(tǒng)計分析主要包括密文直方圖分析、密文信息熵分析和密文關聯(lián)系數分析。
(1)直方圖分析
直方圖是數字圖像的一個基本屬性,若密文圖像的直方圖呈現均勻分布或高斯分布,說明加密效果良好。用改進算法加密灰度圖像“cameraman”和灰度圖像“peppers”后得到的密文圖像的直方圖如圖4所示??梢钥闯雒芪膱D像直方圖呈現均勻分布,加密效果良好。
圖4 密文圖像直方圖
(2)信息熵分析
信息熵是度量圖像混亂程度的一個量,圖像越混亂,信息熵越大。對于具有8個灰度級的灰度圖像來說,當像素為等概率分布時,信息熵可以達到8 bit。信息熵的計算公式為
(13)
改進算法加密的“rice”,“cameraman”,“pout”,“peppers”4幅數字圖像的信息熵見表1??梢钥闯?,4幅圖像的密文圖像的信息熵都非常接近8,加密后圖像的混亂程度很高。
表1 改進算法與其他算法的密文信息熵比較
(3)相關系數分析
一幅明文圖像相鄰像素間具有很強的相關性,而加密的目的就是消除這種相關性。分別在密文圖像的水平方向、垂直方向和對角方向隨機選取2 000對相鄰圖像計算它們的相關系數。相關系數的計算公式為
(14)
式中:xi和yi代表兩個相鄰位置的像素值;n代表像素值對數。
本實驗中計算“rice”,“cameraman”,“pout”,“peppers”四幅數字圖像的相關系數見表2,而用原算法計算“rice”,“cameraman”,“pout”,“peppers”四幅數字圖像的相關系數見表3,可以看出改進算法的密文圖像的關聯(lián)系數比原算法的小,加密效果良好。
表2 改進算法加密的密文圖像相鄰元素相關系數
表3 原算法加密的密文圖像相鄰元素相關系數
5.2.3敏感性分析
敏感性分析包括明文敏感性分析和密鑰敏感性分析。一個算法對明文或密鑰越敏感,算法抵抗差分攻擊的能力越強。
(1)明文敏感性分析
所謂算法對明文敏感是指如果修改明文圖像的一個像素值會引起密文圖像的巨大變化。一般用數字圖像像素變化率(NPCR)和歸一化平均變化強度(UACI)來衡量數字圖像加密算法對明文敏感的程度。NPCR和UACI的計算公式分別為
(15)
(16)
其中,
(17)
式中:C1為原密文圖像;C2為明文改變后對應的密文圖像。對于8位灰度圖像來說,NPCR與UACI的理想期望值分別為:NPCR=99.609 4%,UACI=33.463 5%。在改進算法中隨機選取“Peppers”圖像中的50個像素點,改變它們的像素值,結果計算的NPCR最大為99.656 7%,最小為99.239 8%,平均值為99.623 4%;UACI最大為33.564 3%,最小為33.232 1%,平均值為33.449 8%,非常接近理想值。而在原算法中隨機選取“Peppers”圖像中的50個像素點,改變它們的像素值,結果計算的NPCR最大為16.656 7%,最小為10.239 8%,UACI最大為8.236 7%,最小為2.336 7%。正如前面分析的那樣,這主要是因為原算法中沒有擴散反饋機制和置亂操作,使得原算法不能抵抗差分攻擊。
(2)密鑰敏感性分析
所謂算法對密鑰敏感是指如果解密密鑰與正確密鑰有一點點誤差,則無法從解密結果中獲得明文圖像的任何有用信息。我們選擇表4中的錯誤密鑰Key1、Key2對原始的cameraman的密文圖像進行解密,解密結果如圖5所示??梢钥闯觯饷芎蟮膱D像無法獲得原始圖像的任何信息,這也說明了算法對密鑰的高度敏感性。
表4 解密時用的錯誤密鑰
圖5 錯誤密鑰的解密結果
同樣,如果混沌映射(1)中的參數a,b,c,d,k有變化,生成的S盒也會有巨大變化,從而無法從解密結果中獲得明文圖像的任何有用信息。
本文對一種基于混沌映射與動態(tài)S盒的圖像加密算法進行了安全分析,通過選擇明文攻擊的方法破解出待解密的圖像。在破解過程中,不是破解出等效的密鑰流混沌矩陣T和4個S盒,而是利用原加密算法的性質,通過分別對比256幅明文圖像對應的256幅密文圖像Ci,與待解密圖像的(m,n)處的值是否相等來確定明文圖像的(m,n)處的值。這種破解思路具有一定的新穎性,為如何評估混沌密碼算法安全性展示了一種新的、可行的密碼分析方法。仿真實驗演示了所提出的選擇明文攻擊方法的有效性。原加密算法的密鑰流與明文圖像無關和原算法沒有置亂操作是原算法被破解的根本原因,同時提出了改進算法,并對改進算法進行了安全分析。