金必強(qiáng)
(池州學(xué)院 安徽 池州 247000)
隨著計(jì)算機(jī)和網(wǎng)絡(luò)傳輸?shù)某墒?,人們廣泛地使用網(wǎng)絡(luò)進(jìn)行信息傳輸。但是信息安全事件也是層出不窮,導(dǎo)致信息安全這一領(lǐng)域也開始被人重視,信息安全也逐漸成為國際社會(huì)普遍關(guān)注的問題。在信息傳輸?shù)倪^程中,圖片作為網(wǎng)絡(luò)傳輸過程中最為重要的信息載體,應(yīng)用在軍事領(lǐng)域、醫(yī)學(xué)領(lǐng)域、教育領(lǐng)域等,但是由于圖片高冗余性和像素之間關(guān)聯(lián)性強(qiáng)等特點(diǎn),使得傳統(tǒng)加密算法(如DES、RSA、AES 等)在加密時(shí)不能克服上述缺點(diǎn),導(dǎo)致加密效果較差,易被攻擊者進(jìn)行統(tǒng)計(jì)分析和差分等攻擊[1-2]。
近年來,基于CML 提出了各種圖像加密算法[3-4]。張慧麗[5]使用NCA 映射改進(jìn)CML 系統(tǒng),并且利用DNA對(duì)像素值進(jìn)行編碼。使用NCA 映射作為驅(qū)動(dòng)函數(shù),提高了原有的CML 系統(tǒng)混沌特性。而且NCA 映射導(dǎo)致了控制參數(shù)范圍變大,使得密鑰空間更大。Guan 等[6]提出了新的混沌系統(tǒng),主要是利用3 個(gè)格子的耦合映射為加密算法提供偽隨機(jī)序列,并且利用新的系統(tǒng)將偽隨機(jī)序列進(jìn)行重新組合,提高了源CML 系統(tǒng)的偽隨機(jī)性。根據(jù)Wang 等[7]的研究結(jié)果,使用二進(jìn)制編碼會(huì)降低加密速度效率,并且僅依賴混沌系統(tǒng)控制的密鑰容易被破解。Song 等[8]提出了將線性系統(tǒng)和非線性系統(tǒng)相結(jié)合的新CML 時(shí)空系統(tǒng),避免了CML 周期窗口問題,并用DNA 序列進(jìn)行擴(kuò)散操作。孫鑫等[9]、Huang 等[10]發(fā)現(xiàn)了一種基于DNA 技術(shù)的加密系統(tǒng)可以通過利用部分已知明文或密文來重構(gòu)等效密鑰,但該系統(tǒng)在面對(duì)差分攻擊時(shí)無法提供足夠的保護(hù)。
為了克服上述缺點(diǎn),本文使用混沌系統(tǒng)和折疊算法提出了一種高安全性的圖像加密算法。首先在密鑰生成部分,選擇一部分明文信息作為密鑰的一部分,使用SHA-512函數(shù)生成密鑰,然后將哈希序列拆分成加密算法中的混沌系統(tǒng)的初始值和各個(gè)加密步驟中的控制參數(shù)。
Step 1:選擇明文信息中的部分明文信息,累加計(jì)算求和,記作sumPixel。在本文中隨機(jī)選擇了10 個(gè)像素值進(jìn)行累加求和。
Step 2:利用SHA-512 將密鑰key 和sumPixel 進(jìn)行Hash 處理,生成可計(jì)算密鑰。在本文中,使用初始密鑰和明文信息Hash 后得到可計(jì)算密鑰Hash,明文信息是手動(dòng)在明文圖片中進(jìn)行隨機(jī)選擇。因此可計(jì)算密鑰如式(1)所示。
Step 3:利用Matlab 自帶的排序函數(shù)sort(·) 對(duì)數(shù)據(jù)進(jìn)行置亂處理。
Step 4:使用折疊矩陣進(jìn)行像素置亂處理。本文針對(duì)大小為M×N的明文圖像P進(jìn)行折疊置亂,其中M是明文圖片的行數(shù),N是明文圖片的列數(shù)。在傳統(tǒng)的折疊算法中,從4 個(gè)不同的方向?qū)γ魑膱D像P和混沌矩陣Q進(jìn)行異或操作,以達(dá)到像素值置亂的目的。具體加密操作如下。
(1)從上到下折疊
將明文圖像P分為上矩陣和下矩陣,以同樣的分割方式將置亂矩陣Q1分為上下兩個(gè)矩陣。定義上半部分矩陣為Uh,下半部分矩陣為Dh,具體操作如圖1 和式(2)所示。
圖1 從上到下折疊
(2)從左到右折疊
將密文圖像c分為左矩陣和右矩陣,以同樣的分割方式將置亂矩陣Q2分為左和右兩個(gè)矩陣。定義左半部分矩陣為Lh,右半部分矩陣為Rh,具體操作如圖2 和公式(3)所示。
圖2 從左到右折疊
(3)從右上往左下折疊
將密文圖像c分為右上矩陣和左下矩陣,以同樣的分割方式將置亂矩陣Q3分為左下矩陣和右上矩陣。定義左下半部分矩陣為Ld,右上半部分矩陣為Rup,具體操作如圖3 和式(4)所示。
圖3 從右上往左下折疊
(4)從左上往右下折疊
將密文圖像c分為左上矩陣和右下矩陣兩個(gè)矩陣,以同樣的分割方式將置亂矩陣Q4也分為左上矩陣和右下矩陣。定義左上半部分矩陣為Lup,右下半部分矩陣為Rd,具體操作如圖4 和式(5)所示。
利用基于NCA 映射的ACML 系統(tǒng),生成置亂矩陣Qi,其中置亂矩陣的大小大于明文的大小,所以需要在置亂矩陣中利用pos()函數(shù)選擇矩陣。dir()是決定折疊函數(shù)的方向,對(duì)于折疊算法中的4 個(gè)方向分別定義為0,1,2,3。利用dir 決定加密的順序。
Step 5:利用已經(jīng)確定的置亂矩陣Qi和位置函數(shù)pos()和方向函數(shù)dir(),并且用折疊算法進(jìn)行圖像置亂操作。
Step 6:擴(kuò)散操作。利用公式(7)進(jìn)行擴(kuò)散操作。
其中X是利用ACML 生成的混沌向量,在新的混沌向量中需要舍棄前500 次混沌序列,然后再進(jìn)行異或操作。
解密算法與加密算法相類似,是加密算法的逆過程。解密算法的具體步驟描述如下:
Step 1:獲得初始密鑰。通過分解密鑰,得到各個(gè)步驟中需要的控制參數(shù)和初始值參數(shù)。
Step 2:進(jìn)行逆擴(kuò)散操作,通過密鑰中的參數(shù),計(jì)算混沌向量,然后通過式(7)計(jì)算擴(kuò)散的逆步驟結(jié)果。
Step 3:確認(rèn)方向函數(shù)和位置函數(shù)。通過密鑰可以得到方向函數(shù)和位置函數(shù)。利用ACML 計(jì)算加密過程中的折疊矩陣,然后按照方向函數(shù)和位置函數(shù),進(jìn)行按位異或操作,得到解密結(jié)果。
Step 4:進(jìn)行sort 函數(shù)重排。利用密鑰中index_Rowi和index_Colj進(jìn)行重新排列得到最終的明文。
在本章節(jié)中, 給定初始密鑰為 key =[da883291jkdlafanfaj0113dsk2913kl],選擇明文信息中下標(biāo)為60~70 的明文信息作為sumPixel,將key 和明文信息進(jìn)行哈希散列之后得到最終密鑰。以灰度圖像Lena 舉例,哈希值:
Hash =[3ba735684defc5f577d26c84086b0f45f534fc96e 55ee723a436c773fb70b2fb5ef907d5dcb1c7a88179c8d4ab4 55de704f3afd05ceb55c6dbb437c150fac44f],仿真實(shí)驗(yàn)結(jié)果如圖5 所示。
圖5 實(shí)驗(yàn)結(jié)果
優(yōu)秀的加密系統(tǒng)應(yīng)該有足夠大的密鑰空間,足夠大的密鑰空間可以抵御暴力破解。在本文中提出算法所使用的密鑰包含:長度為512bit 的Hash 值;給定的格子數(shù)L和置亂序列index_Rowi和index_Colj。假如計(jì)算機(jī)的計(jì)算精度是10-14,那么在本文中,本算法的有效密鑰空間是2512×dec2bin(M×N×L)×1014。以“Lena”圖像為例,在本文中所使用的圖片大小為256× 256,格子數(shù)目L=20,因此“Lena”的有效密鑰空間大約是2532,遠(yuǎn)遠(yuǎn)大于設(shè)計(jì)密碼系統(tǒng)時(shí)所要求的2100,所以在密鑰空間方面所設(shè)計(jì)的密碼系統(tǒng)是可以抵御暴力攻擊的。
直方圖描述了像素值的分布情況,如果加密后的密文分布不均勻,會(huì)泄露明文圖像的特征信息,通過統(tǒng)計(jì)分析攻擊可能破解加密系統(tǒng)。在圖6 中展示了明文圖像和密文圖像的直方圖分布情況??梢杂^察到在加密前,明文圖像的直方圖呈現(xiàn)高低分布不均勻的情況,而在密文圖像的直方圖中的像素是服從均勻分布的。證明在加密后的圖像是不會(huì)泄露明文圖像信息的。
圖6 直方圖分析
在明文圖像中,由于相鄰像素之間存在較高的相關(guān)性,使其容易受到統(tǒng)計(jì)攻擊[11],所以在加密完成后,需要衡量相鄰像素相關(guān)性。使用式(8)和式(9)去計(jì)算像素間相關(guān)性,本文在密文圖像中隨機(jī)選擇了10 000 對(duì)像素點(diǎn),測(cè)試了水平、垂直、對(duì)角線3 個(gè)方向上的相鄰像素間的相關(guān)性。測(cè)試結(jié)果如圖7 所示。
圖7 水平、垂直、對(duì)角線3 個(gè)不同方向像素相關(guān)性對(duì)比
其中,
在表1 中給出密文圖像的相關(guān)性系數(shù)。從表1 中可以觀察到,原始的明文圖像呈現(xiàn)出相鄰像素之間較大的相關(guān)性;而在密文圖像中,相鄰像素之間的相關(guān)性顯著減小,甚至呈現(xiàn)負(fù)相關(guān),表示本文所提出的算法完全消除了原始像素值之間的相關(guān)性。值得注意的是,與文獻(xiàn)[5]、文獻(xiàn)[6]和文獻(xiàn)[11]的算法相比,本算法在3 個(gè)方向上的相關(guān)性系數(shù)基本都優(yōu)于對(duì)比文獻(xiàn)。
表1 明文圖像與密文圖像相鄰像素間的相關(guān)性
綜上所述,本文使用SHA-512 將明文信息和密鑰進(jìn)行計(jì)算,將明文和密鑰信息相互結(jié)合作為加密系統(tǒng)的密鑰,用來抵抗選擇明文攻擊和選擇密文攻擊,并且密鑰在計(jì)算各個(gè)步驟中的控制值和參數(shù)可以達(dá)到有限次的一次一密。在像素級(jí)上利用基于NCA 的耦合映射格子和排序函數(shù),進(jìn)行多次置亂和一次擴(kuò)散的加密。安全性分析表明了新加密算法的密鑰空間大,可計(jì)算密鑰敏感性強(qiáng),可以抵御差分攻擊和統(tǒng)計(jì)分析等常見的攻擊方式。