趙 耿 李建新 馬英杰 秦曉宏
1(西安電子科技大學 陜西 西安 710071)2(北京電子科技學院 北京 100070)
隨著互聯網的迅速發展,多媒體信息被廣泛傳輸,圖像作為多媒體信息的重要部分,其安全性受到重視。如今混沌在信息安全領域的應用越來越多,混沌密碼作為密碼學的新分支已經受到國內外研究人士的廣泛關注。
利用混沌的圖像加密大致分為空域加密和變換域加密兩種。隨著小波變換的廣泛使用,變換域加密的優點被放大,加密和壓縮的共同完成提高了加密效率,變換域的過程提高了復雜度。使用低維Logistic映射[1-4]和小波變換進行加密的方案取得了不錯的效果。但是低維混沌加密方案存在被破解風險[5],所以使用高維混沌進行圖像加密更優。文獻[6]使用Lorenz混沌映射,經過處理得到混沌序列,然后進行小波域加密。文獻[7]使用了超混沌系統。本文使用基于m序列擾動的Lorenz混沌系統來生成抗退化混沌序列。首先結合小波變換進行子帶系數獲取,將各子帶系數置亂,進行低頻子帶系數擴散,小波逆變換重構之后得到初始加密圖像;然后對初始加密圖像使用耦合擴散的方法進行二次加密得到最終加密圖像;最后對加密圖像進行了密鑰空間、統計分析,以及抗窮舉攻擊、抗統計攻擊和抗差分攻擊等評測。
小波變換是一種從時域到頻域的分析方法,它在短時傅里葉變換局部化的思想上,有效地克服了窗口大小不隨頻率變化等問題。小波變換用小波函數系中的一族函數去表示某一函數,且這一族函數是由基本小波函數進行平移或伸縮得到的。
定義1設ψ(t)∈L2(R),其傅里葉變換為ψ(ω),當ψ(ω)滿足如下允許條件時,稱ψ(t)為一個基本小波或母小波。
(1)
將母函數ψ(t)經伸縮和平移后得到連續小波基函數:
(2)
式中:a是伸縮因子;b是平移因子。
小波變換可分為連續小波變換和離散小波變換。
定義2對任意f(t)∈L2(R),在基本小波ψ(t)下展開,稱為f(t)的連續小波變換(CWT)。其表達式為:
(3)

(4)
則任意函數f(t)的離散小波變換為:
(5)
混沌是在確定的非線性性系統中出現的內在隨機性現象。混沌系統具有以下特點:對初始條件敏感、正的Lyapunov指數、運動的遍歷性、有界性、分形與分維性、自相似性、連續功率譜以及類噪聲性等[8-9]。
Lorenz系統是一個三維混沌系統,用其生成的混沌序列有三個優點:一是復雜度高,Lorenz系統的結構比常見的一維和二維混沌系統復雜,故產生的實數值序列不可預測性更強;二是密鑰空間大,Lorenz系統有三個初始值以及三個系統參數,均可作生成加密混沌序列的種子密鑰,則Lorenz系統的密鑰空間高于低維混沌系統;三是設計更具靈活性,Lorenz系統可以輸出三路實數值混沌序列,可以對單路進行處理,也可以對三路進行組合處理[10]。
Lorenz系統的動力學方程式為:

(6)
式中:參數值a=10,b=28,c=8/3時,Lorenz系統處于混沌狀態。在MATLAB上可以得到Lorenz混沌系統的相圖如圖1所示。

圖1 Lorenz混沌系統的x-y-z相圖
(1) Lorenz方程系統參數選取a=10,b=28,c=8/3。給定系統方程初始值x0、y0和z0后,使用四階Runge-Kutta算法進行計算,舍去前1 000組混沌序列值,以第1 001次得到的計算值作為新的初始值。此后計算可得到的三個離散混沌序列分別記為X、Y、Z。
(2) 二值化處理:截取三個混沌序列中L位的二值序列作為輸出序列。經驗證發現,只選取一個序列不如依次選取X、Y、Z的某些位連接后的偽隨機性好,而且將這三位進行“異或”的偽隨機性并不好。這里將三個序列按求余方式選取。第t次選取,則有:當t(mod3)=1時,選取X;當t(mod3)=2時,選取Y;當t(mod3)=0時,選取Z。這里設置實數精度為雙精度,則可以對之前以取余方式選取的混沌序列進行轉二進制,并取小數點后的部分位作為預處理輸出序列S。
(3) m序列是最長線性移位寄存器序列的簡稱,是一種偽隨機序列、偽噪聲(PN)碼或偽隨機碼[11]。n級線性反饋移位寄存器的輸出序列的最大周期為2n-1,當達到最大周期時,此序列是n級m序列。若m序列的長度小于2n-1,則該長度的序列是非周期序列。圖2為m序列產生器的結構。

圖2 m序列產生器的結構
本文采用16級線性反饋移位寄存器LFSR生成m序列,簡記為R。其特征多項式為f(x)=x16+x12+x3+x+1,即圖2中c0=c1=c3=c12=c16=1,其余的ci為0。
(4) 每隔n次與X的后s位與m序列的s位作“異或”處理,返回到輸入,作為對系統的擾動。擾動過后重新回到(1)繼續計算,最終輸出序列為S′。如果需要偽隨機二值序列的長度為M,則需要如此循環M/n次。
系統的結構框圖如圖3所示。該方案中,Lorenz混沌系統和LFSR相互獨立,Lorenz混沌系統輸出端得到3個二進制比特序列集,經過對這3個二進制比特序列集的截取與組合得到初始輸出序列,通過與LFSR輸出的序列R間隔性進行“異或”,實現擾動,并將擾動結果返回至系統的輸入端,進行下一輪運算。相比原數字混沌系統,經過擾動的混沌序列的周期就至少擴大了n(2N-1)倍[12]。

圖3 m序列擾動Lorenz系統的偽隨機數發生器結構框圖
圖像的加密過程由小波系數獲取、子帶系數置亂與擴散和初始加密圖像擴散3個過程。小波系數獲取過程進行兩層分解,置亂過程使用Arnold變換,低頻子帶系數擴散基于擴散參數和混沌序列生成的擴散矩陣,擴散參數使用第二層小波分解的高頻系數獲取。最后進行的初始加密圖像擴散使用混沌序列“異或”與像素間耦合加密組成。加密算法整體框圖見圖4。

圖4 加密算法整體框架圖
原始圖像經過小波變換,會將原始數據變換到頻域,由4個子帶圖像組成。LL:水平和垂直方向的低頻子帶圖像;LH:水平方向的低頻和垂直方向的高頻子帶圖像;HL:水平方向的高頻和垂直方向的低頻子帶圖像;HH:水平和垂直方向的高頻子帶圖像。由于在頻域內,低頻部分包含了圖像大多數信息,能量更為集中,而高頻部分則包含了圖像的大多數細節信息。對于圖像數據,存在冗余性高的問題,相比傳統的對原圖像空間域進行加密,對低頻部分加密會減少加密數據量,提高加密效率。如果對圖像細節保密要求高,則高頻部分保留的細節也需要進行部分處理,不過與低頻部分的大信息量相比,此部分可以進行簡化處理,如子帶系數矩陣置亂。
本文采用“db1”小波對灰度圖像進行兩層的小波變換。第一層變換得到LL1、LH1、HL1和HH1,第二層變換是在LL1上再次進行小波變換,得到LL2、LH2、HL2和HH2。以灰色頭像Lena為示例圖像進行小波變換,圖5(a)為原始圖像,在兩次小波分解之后分別得到第一層壓縮圖像圖5(b)和第二層壓縮圖像圖5(c)。因此,通過低頻信息仍然可以看出圖像內容,同時由表1數據可以得出,圖像數據量得到了大大的壓縮。

(a) 原始圖像 (b) 第一層壓縮圖像 (c) 第二層壓縮圖像圖5 原始圖像和各層壓縮圖像

表1 原始圖像和各層壓縮圖像大小對比
對原始圖像I首先進行尺寸變換,將原始圖像變為長寬相等的IM×M,長寬不等圖像進行空位點像素值補0操作。然后進行兩層小波分解,對各子帶系數矩陣進行置亂處理,再對置亂后的第二層低頻子帶系數使用混沌序列進行擴散。
(1) 置亂:由于是對子帶系數進行處理,置亂過程可以改變子帶系數矩陣分布,從而在小波重構后得到相鄰像素相關性更低的加密圖像。
本文使用Arnold變換對子帶系數矩陣進行置亂加密。設(xn,yn)是變換前某點的位置,則Arnold變換過程如下:
(7)

(8)
混沌二值序列以8位為劃分單位,獲得一個與低頻子帶系數大小相同的擴散矩陣C,此部分需要M2/2位混沌二值序列。將得到的擴散參數用在第一步得到的置亂低頻子帶系數上,與擴散矩陣C進行計算:
(9)

(1) 使用混沌二值序列生成M×M大小的擴散矩陣K,生成方式為每8位為一組,作為擴散矩陣K的一個元素,共需要混沌二值序列8M2位。
(2) 從第二個像素開始,將每個位置的像素值與其前一位置的像素值進行二進制按位“異或”操作,最后與擴散矩陣K進行二進制按位“異或”的操作。

(10)
如果相鄰像素間相關性較大,使用像素點之間的耦合操作會有:
I′(x,y)≈K(x,y)
(11)
這使得被加密的像素點的值近似為擴散矩陣對應位置的值,既減少了相關性,又增加解密的復雜性。
解密的過程是加密的逆過程:
(1) 將解密密鑰中x0、y0和z0作為混沌系統的初始值,按照混沌序列的產生方式生成混沌序列;將前M2/2位混沌序列轉為擴散矩陣C,再取8M2位混沌序列轉為擴散矩陣K。

(12)
(4) 將步驟(3)中得到的子帶系數矩陣進行Arnold逆變換得到LL2、LH2、HL2、HH2、LH1、HL1和HH1:
(13)
(5) 將步驟(4)中得到的子帶系數矩陣進行小波重構,得到原始圖像,完成第二次解密。
本文采用256×256的Lena灰度圖像進行加密和解密仿真實驗,仿真環境為MATLAB 9.0(R2016a)軟件平臺。Lorenz混沌系統的三個初值分別取0.25、0.13和0.15,置亂參數a=15,b=9,n=20。圖像加密效果如圖6所示,其中(a)為原始Lena圖像,(b)為加密之后得到的加密Lena圖像。

(a) 原始Lena圖像 (b) 加密Lena圖像圖6 圖形加密效果對比
如果密鑰空間很大,則攻擊時間和代價會變得很高,使得攻擊者無法使用窮舉攻擊。密鑰空間越大,加密算法抵御窮舉攻擊的性能越強。本算法的密鑰由混沌系統初值(x0,y0,z0)和16級m序列寄存器初始值。三個混沌系統初值均為雙精度實數,小數位由52位二進制表示。16級m序列寄存器初始值為16位二進制數。由此可計算密鑰空間為252×252×252×216=2172。故本算法具有抗窮舉攻擊能力。
密鑰敏感性分析是在微小改變密鑰后,來測試對解密密鑰的敏感性。如果算法的敏感性強,應該在密鑰改動最小精度時,也不能正確解密。由于本算法混沌初始值采取雙精度實數作為密鑰,其精度達到10-14。對原始密鑰改變10-14,獲取解密圖像。m序列寄存器初始值改變1位作為解密密鑰進行解密,獲取解密圖像。正確密鑰和錯誤密鑰解密對比見圖7,其中(a)為正確密鑰解密圖,(b)為使用錯誤密鑰x0的解密圖,(c)為使用錯誤密鑰y0的解密圖,(d)為使用錯誤密鑰z0的解密圖,圖7(e)為使用錯誤的寄存器初始值的解密圖。圖7表明本文算法對密鑰具有很高的敏感性。

(a) 正確密鑰解密圖 (b) 錯誤密鑰x0解密圖

(c) 錯誤密鑰y0解密圖(d) 錯誤密鑰z0解密圖

(e) 錯誤密鑰寄存器初始值解密圖圖7 正確密鑰與錯誤密鑰解密圖
直方圖可以直觀地反映圖像像素灰度值的分布情況。如果像素灰度值分布直方圖是均勻分布的,則能有效抵抗統計攻擊。圖8(a)是原始圖像加密前的灰度值分布直方圖,(b)是原始圖像加密后的灰度值分布直方圖。

(a) 加密前灰度值分布直方圖

(b) 加密后灰度值分布直方圖圖8 原始圖像加密前后的灰度值分布直方圖
香農的信息論中提出信息熵的概念,用來表示平均信息量,反映了信源的不確定度。信息熵計算公式為:
(14)
式中:P(Si)為Si出現的概率。由于使用灰度級為256的圖像,理論上信息熵是8。本文算法的信息熵計算值與其他文獻比較見表2。可以看出,本文算法信息熵更接近理論值,可以更加有效地抵御外來熵攻擊。

表2 本文算法與參考文獻算法信息熵比較
絕大多數明文圖像的相鄰像素都有較高的相關性。衡量加密效果的一個方面就是進行相關性分析,圖像的相關性越小,說明置亂效果越好。計算公式為:
(15)
(16)
(17)
(18)
本文從原始明文圖像和加密圖像中隨機選擇2 000對相鄰像素點,通過計算公式得到水平、垂直和對角三個方向上的相關系數,見表3。加密前后相鄰像素相關性對比圖見圖9。

表3 相鄰像素相關系數對比

(a) 原圖水平方向(b) 加密圖像水平方向

(c) 原圖垂直方向(d) 加密圖像垂直方向

(e) 原圖對角方向(f) 加密圖像對角方向圖9 圖像加密前后相鄰像素相關性
表3是本文算法與參考文獻的相鄰像素相關系數的比較。可以看出,原始圖像在水平、垂直和對角三個方向上的相關系數均接近于1,說明相鄰像素是具有高度相關性的。在經過本文算法的加密之后,三個方向上的相關系數都接近于0,說明原始圖像經過加密之后各像素得到了良好的擴散。
一個好的圖像加密算法應該具有抵御差分攻擊的能力,衡量此能力的重要指標是像素變化率(NPCR)和歸一化平均變化強度(UACI)。
設密文圖像C1和密文圖像C2,兩者的原始圖像之間僅有一個像素位置的灰度值是不相等的,令矩陣D與密文圖像C1和密文圖像C2的大小一致。當C1(i,j)=C2(i,j)時,D(i,j)=0,否則D(i,j)=1。NPCR和UACI的計算公式為:
(19)
(20)
NPCR的理想值為0.996,UACI的理想值為0.334。作為對比,隨機選取10個點,灰度值先后增加1,計算出每個點的NPCR和UACI,然后取平均值作為本文的NPCR和UACI。與文獻[16]對比結果見表4,結果表明本文算法更加接近理想值,所以本算法具有更好的抗差分攻擊能力。

表4 NPCR和UCAI對比結果
本文基于小波變換,結合混沌系統,通過對各子帶系數矩陣的置亂處理和對低頻系數的擴散處理實現初始加密,最后對初始加密圖像進行像素擴散和像素耦合加密,完成最終的加密。混沌系統經過抗退化處理得到的混沌序列具有優良的隨機性,與小波的結合加強了加密性能和效率。仿真結果表明,本文算法具有密鑰空間大、密鑰敏感性強和統計特性良好等優點,可以抵御窮舉攻擊、統計攻擊和差分攻擊等。