陳 森,薛 偉
(江南大學 物聯網工程學院,無錫 214122)
圖像作為信息的重要載體,在信息傳播中起到重要的作用,但在這一過程中容易遭到攻擊導致信息泄露.對圖像安全獲取、安全存儲和安全傳播的研究顯得尤為重要,而對圖像進行加密是一種有效的處理方式.
混沌系統具有不可預測性、偽隨機性及對初始條件極為敏感等特性,研究者將其引入圖像加密體系中,提出了一些基于“置亂-擴散”體系的混沌圖像加密算法[1–3].這些加密算法各有其特點,但也存在一些問題,影響最終的加密效果.文獻[1]提出一種基于DNA 編碼和混沌系統的圖像加密算法,但其混沌系統初始值與明文無關,算法較難抵抗明文攻擊[4].文獻[2]在加密方案中引入Hash 函數來解決這一問題.但由于混沌映射參數和狀態模擬精度的限制,混沌序列在一定程度上呈現周期性,這會對加密效果產生極大的影響.文獻[3]提出使用人工神經網絡對混沌序列進行訓練學習,可以消除其混沌周期性,但由于置亂和擴散操作相對單一而影響了最終的加密效果.
綜合考慮以上問題,本文綜合SHA-384,人工神經網絡和混沌系統,提出一種新的加密方案.對加密圖像進行安全分析,結果表明加密效果比較理想.
Lorenz 混沌系統是最常用的混沌系統之一,本文采用改進后的Lorenz 混沌系統,其數學模型為[5]:

式中,x,y,z分別表示系統變量;a,b,c分別表示系統的參數.當a=10,b=40,c=2.5時,系統會進入混沌狀態.
混沌系統產生的混沌序列會呈現一定程度的周期性[6],引入人工神經網絡對混沌序列進行訓練學習以消除周期性,其結構如圖1所示.

圖1 人工神經網絡的結構

隱藏層的輸出值:

訓練誤差值:

反向訓練的過程如下:

根據得到的誤差值,使用下列方程式更新每個單元的連接權重和輸入輸出偏差直到每個單元均可收斂.

式中,i為迭代次數,Ψ為學習率.
對于一個大小為M×N的明文圖像P,以下為圖像加密的全過程.
首先通過明文圖像灰度值和SHA-384 產生一個384 位的密鑰,將其按每8 位分段,其可表示為:

Lorenz 混沌映射的初始值計算如下:

式中,x,y,z為給定值,
代入混沌系統得到混沌序列,然后使用人工神經網絡進行訓練,輸出最終的加密序列.
對圖像的置亂操作是指在不改變像素點的像素值的情況下,改變其在圖像矩陣中的位置.在改變像素點位置時,有時會產生重復置亂,即兩個像素點的位置交換兩次,使得置亂無效,因此進行以下操作.
首先利用混沌系統得到兩個混沌序列,長度分別為M和N,然后使用神經網絡進行訓練,得到兩個加密序列X和Y.
首先對序列X進行量化處理:

其中,i=1,2,···,M/2,這樣序列中的每個隨機數X(i)∈{1,2,···,M},然后對X進行去重,即在X中重復的數字只保留一個.接著,將集合 {1,2,···,M}中沒有出現在X中的數按從小到大的順序排在X的末尾.最后依次交換圖像矩陣P的第X(i)行與X(M?i+1)行,完成行置亂,得到圖像矩陣S.
對序列Y進行量化處理:

其中,j=1,2,···,N/2,序列中的每個隨機數Y(j)∈{1,2,···,N},將對序列X的操作同樣對Y使用.最后依次將圖像矩陣P的第Y(j)列和第Y(N?i+1)列進行交換,完成列置亂,得到圖像矩陣R.
經過置亂操作,像素點的位置發生了變化,擴散操作的則是要改變像素點的像素值.
首先將圖像矩陣R進行分割,每個子矩陣Q的大小為S×T.利用混沌系統產生長度為(M/S)×(N/T)的混沌序列U,其長度與子矩陣的個數一致.使其中的數字按從小到大的順序排列,然后將每個數字在序列U中的原始位置存入數組V中.
使用混沌系統和人工神經網絡得到長度為S×T的隨機序列E,對其進行量化處理:

將其轉換為S行T列的二維矩陣E',最終的擴散操作如下:

最終得到加密圖像P'.
整個加密方案的流程圖如圖2所示.

圖2 加密方案流程圖
選擇大小為2 56×256的Lena 灰度圖,在Matlab 平臺上完成仿真實驗.關鍵參數分別為:x=0.12,y=0.23,z=0.34,a=0.35,Ψ=0.6.結果如圖3所示.

圖3 實驗結果
灰度直方圖顯示的是一幅圖像里全部灰度值的分布情況,其中橫坐標表示灰度值,縱坐標表示具有各個灰度值的像素在圖像中出現的次數,橫縱坐標均無量綱.圖4表示的是明文和密文圖像各自的直方圖.
從圖4中可以直觀地看出,Lena 明文的直方圖顯示灰度值分布很不均勻,而相應的密文直方圖中灰度值分布則比較均勻.這使得對加密圖像的統計分析攻擊十分困難,從而使攻擊者很難獲得有效信息.
普通圖像的相鄰像素之間存在高相關性,它們的相鄰像素可以是水平,垂直或對角線方向.為測試量圖像加密前后相鄰像素間的相關性,各在其水平、豎直以及對角方向上任意選取2000 對鄰近的像素點.根據以下公式計算相關系數,并將結果記錄在表1中.


式中,x和y是圖像中兩個相鄰像素的灰度值,N是所選相鄰像素的數量.

圖4 明文和密文圖像直方圖

表1 相鄰像素間相關系數
從表1中能夠看出,明文圖像中水平、垂直和對角方向上的像素間相關系數較大,而在對應的密文圖像中,相關系數則與0 比較靠近.另外,對比文獻[2,7]中提出方法,本文提出算法可以很好地消除相鄰像素相關性,掩蓋原始圖像的數據特征.
選取Lena 明文和密文在各方向上的像素點分布情況,如圖5所示.可以直觀地觀察到明文在各個方向上的相關性被消除.
信息熵反映了圖像信息的不確定性,一般熵越大,信息量越大,可視信息越少[8].信息熵的計算公式如下:

式中,(mi)表示像素值,P(mi)表示灰度值mi出現的概率.
對于L=256的灰度圖像,信息熵H的理論值為8.表2中記錄了圖像加密前后的信息熵,同時與其他算法進行了比較.結果表明,經過本文提出方案加密后的圖像可以較好地掩飾信息.
密鑰空間是指所有合法的密鑰構成的集合.在本文提出的加密算法中,密鑰主要是由兩部分構成:給定的初始值x,y,z,如果計算精度為1 0?15,那么該部分產生的密鑰大小是1 045,另外SHA-384 產生了384 位的密鑰,因此可提供2384×1045≈3.9×10160大小的密鑰空間,其值足夠大以抵抗對圖像的暴力攻擊.
具有密鑰敏感性對加密算法來說也是必要的[9].是如圖3(d)所示,當x發生微小改變其他密鑰都不變的情況下,無法得到正確的解密圖像,說明本文算法對密鑰具有很強的敏感性.
差分攻擊是指攻擊者稍微改變明文之后,比較改變前后相應密文的差異,從而找出明文圖像和密文圖像的相應關系.一般使用像素數目變化率(Number of Pixels Change Rate,NPCR)和平均改變強度(Unified Average Change Intensify,UACI)這兩個指標來評價算法抵抗差分攻擊的能力[10].
相關計算公式如下:

式中,M×N為圖像大小,假設兩個明文圖像僅有一個像素點不同,使用同一算法加密后,密文圖像中(m,n)處的像素值分別為I1(m,n)和I2(m,n),兩者相同則C(m,n)值為0,否則C(m,n)值為1.在Lena 明文中,隨機選取一個像素并使其值加1,使用同樣的算法加密,計算NPCR和UACI 值,結果如表3所示.

圖5 明文和密文在各方向上的像素相關性
由表3可以看出,通過本文算法加密的圖像,NPCR均超過0.996,UACI 均超過0.334,且相比于其他算法有一定的提升,可知本文算法能夠更有效地抵抗差分攻擊.

表2 信息熵值

表3 NPCR和UACI的均值及比較
本文提出一種結合混沌映射和人工神經網絡的圖像加密算法.首先使用SHA-384和明文圖像產生Lorenz 混沌系統的初始值,控制其產生混沌序列,然后將其引入人工神經網絡進行訓練以消除其混沌周期性.使用人工神經網絡輸出的序列完成置亂和擴散操作.使用行置亂和列置亂結合的方式完成置亂操作,在擴散階段使用分組擴散的方式進行處理.實驗結果表明,本文算法能較好地隱藏明文信息,密鑰空間大,密鑰敏感性強并能抵抗差分攻擊等攻擊方式.