何創(chuàng)毅,陳樂(lè)庚,王志達(dá)
(桂林電子科技大學(xué) 計(jì)算機(jī)與控制學(xué)院,廣西 桂林 541004)
數(shù)字圖像作為信息的一種載體,其安全性和其他信息載體一樣不容忽視。在傳統(tǒng)的密碼研究領(lǐng)域里,數(shù)字圖像并沒(méi)有作為一種特殊的明文形式而開辟一種特定的加密方式。此外,數(shù)字圖像所具有的信息量大、數(shù)據(jù)呈二維矩陣分布、數(shù)據(jù)冗余量大等特點(diǎn),使得傳統(tǒng)的加密方法對(duì)圖像并不是十分適應(yīng)。
基于混沌的圖像置亂技術(shù)是近年來(lái)才發(fā)展起來(lái)的一種加密技術(shù),它利用了混沌系統(tǒng)優(yōu)良的密碼學(xué)特性。由鄧紹江等人提出的一種基于混沌的圖像置亂算法[1]是通過(guò)混沌序列值構(gòu)造對(duì)換規(guī)則矩陣,由該矩陣控制二維圖像的像素進(jìn)行對(duì)換置亂;陳珂等人提出了一種基于Rijndael的加密算法[2],改進(jìn)了 Rijndael中的行、列置換和密鑰編排方案,使之成為替代和置換相結(jié)合的圖像算法;而Gilani等人則提出了一種基于塊的增強(qiáng)型的置亂算法[3],通過(guò)對(duì)圖像的分塊,再對(duì)塊進(jìn)行兩輪的翻轉(zhuǎn),從而實(shí)現(xiàn)圖像的置亂。本文提出了一種改進(jìn)的結(jié)合像素位置置亂和灰度值變換的的圖像置亂算法。實(shí)驗(yàn)表明,該算法具有優(yōu)良的特性。
Logistic映射來(lái)源于著名的統(tǒng)計(jì)學(xué)模型,是目前被廣泛應(yīng)用的一種混沌動(dòng)力系統(tǒng),其動(dòng)態(tài)的數(shù)學(xué)模型可表示為:
圖1 參數(shù) λ=3.889、初值 x0=0.485時(shí)的 Logistic映射序列分布
式中,xn為系統(tǒng)變量,λ 為系統(tǒng)參數(shù),xn∈(0,1),n∈N。 當(dāng)3.569 945<λ≤4時(shí),映射式(1)處于混沌狀態(tài),式(1)迭代得到在(0,1)上的偽隨機(jī)序列{xk}。圖 1 是在映射參數(shù)λ=3.889、初值 x0=0.485時(shí),式(1)所產(chǎn)生的 500個(gè)偽隨機(jī)序列數(shù)在區(qū)間(0,1)的分布圖。圖中,x軸表示 n,y軸表示xn。
混沌動(dòng)力系統(tǒng)參數(shù)的確定對(duì)于算法的安全性具有重要意義。傳統(tǒng)算法中采用混沌原理進(jìn)行置亂加密,其方法是給混沌系統(tǒng)選定一個(gè)不變的參數(shù)和初始值(用作密鑰),密鑰的產(chǎn)生獨(dú)立于像素值,這導(dǎo)致算法的明文敏感性偏弱,不能有效地抵抗明文攻擊和差分攻擊。本文提出的算法有效改進(jìn)了這一缺點(diǎn)。
首先,通過(guò)式(2)將原圖像像素值的總和映射到區(qū)間[0,1]上的一個(gè)值,這個(gè)值可作為混沌動(dòng)力系統(tǒng)的初始值k,再通過(guò)式(2)和式(3)確定混沌動(dòng)力系統(tǒng)的參數(shù) u。把混沌映射Logistic式(1)的參數(shù)與明文各像素聯(lián)系起來(lái),有助于提高密鑰對(duì)明文的敏感性,增強(qiáng)算法抵御明文攻擊的能力。
算法是對(duì)k值敏感的,像素值的改變將導(dǎo)致k值的改變,從而影響混沌序列值產(chǎn)生的初始條件。所以,通過(guò)上述過(guò)程,算法的抵御明文攻擊的能力得到加強(qiáng)。
從抽樣理論,數(shù)字圖像是二維連續(xù)曲面上按照某一間隔和某種策略進(jìn)行抽樣所得的一個(gè)二維離散點(diǎn)陣。抽樣過(guò)程可具體描述如下[4]:
原始圖像用矩陣T表示,大小為N×N:
(1)N=2n時(shí),把矩陣T中的奇數(shù)列抽出來(lái)排成矩陣T1,把偶數(shù)列抽出來(lái)排成矩陣T2,再把矩陣T1和T2組合成T3,即 T3=[T1T2],則T3為T的一次列抽樣結(jié)果。假設(shè)矩陣 T的列號(hào)為{1,2,3,…,N},則經(jīng)過(guò)上述的列抽樣后按一定的順序組合,T3可以表示為{1,3,5,7,…,2n-1,2,4,6,…,2n};然后按行抽樣方法對(duì) T3 進(jìn)行操作,則得到了T′。T′就是T經(jīng)過(guò)一次列行抽樣過(guò)程所得到的最終結(jié)果。
(2)N=2n+1時(shí),除最后一列,最后一行不變外,其抽樣過(guò)程同N=2n時(shí)一樣。
如圖2所示的3×3矩陣的抽樣過(guò)程也可以用矩陣表示為 T′=XTY,其中T為原始圖,X和Y分別為列和行的抽樣矩陣。
圖2 3×3矩陣按列、行抽樣過(guò)程
與其他一些用混沌映射實(shí)現(xiàn)圖像像素置亂的方法相比,該方法具有算法簡(jiǎn)單、執(zhí)行速度快等特點(diǎn)。因此,可作為圖像加密的一種預(yù)處理方法。
置亂和變換是圖像加密技術(shù)中兩個(gè)基本方法。下面將介紹對(duì)像素灰度的變換處理。設(shè)I(i,j)為位置為(i,j)的 像 素 的 灰 度 值 ,I′(i,j)為 I(i,j)經(jīng) 過(guò) 替 代 變 換 后 的 值 ,I′(i′,j′)為 替 代 操 作 循 環(huán) 中 , 上 一 個(gè) 處 理 過(guò) 的 像 素 灰 度值。 利用 Logistic 映射式(1),其密鑰 key1={μ1,x1,m}。 其中,μ1由式(2)和式(3)聯(lián)合產(chǎn)生的 μ變化而來(lái);而 x1為混沌映射的初始值,由算法指定;m則表示取迭代m次(可設(shè)m>10 000)之后的混沌序列產(chǎn)生的{an}。由于混沌映射初始產(chǎn)生的偽隨機(jī)序列取值范圍在(0,1),不適合直接應(yīng)用在灰度值的變換過(guò)程中。為此,通過(guò)式(4)對(duì)偽隨機(jī)序列{an}放大,產(chǎn)生新的偽隨機(jī)序列 Cn。即:
式中,round函數(shù)表示四舍五入取整。則圖像像素的灰度值變換可表示為:
由式(5)可以看出,灰度值的變換過(guò)程將加密圖像中每一個(gè)像素值都聯(lián)系在一起,也就是擴(kuò)散到如密圖像的所有像素中,因此改變?nèi)魏我粋€(gè)像素的像素值,都會(huì)影響所有像素的像素值,從而提高了算法的安全性。
傳統(tǒng)的圖像局部置亂是將一幅圖像分成幾塊,然后分別對(duì)不同的塊施加不同的加密次數(shù),從而達(dá)到圖像的局部置亂。這種方法不足之處:像素的擴(kuò)散范圍只是局限在圖像的分塊,置亂的程度不夠徹底,有可能從密文圖像的輪廓中得到原圖的部分信息。塊的全局置亂和灰度值變換兩種方式的結(jié)合有效地提高了圖像加密算法的安全性,增強(qiáng)了圖像的加密效果。在此基礎(chǔ)上,把密文圖像按一定大小的比例進(jìn)行分塊,并以塊為單位進(jìn)行全局置亂變換。圖3說(shuō)明了一個(gè)圖像的4個(gè)子塊利用偽隨機(jī)序列{a1,a2,a3,a4}的置亂過(guò)程。
圖3 圖像塊置亂過(guò)程
對(duì)一幅 256×256的圖像采用 8×8的塊進(jìn)行分塊,共分得1 024塊,并對(duì)每個(gè)塊用數(shù)字1~1 024進(jìn)行標(biāo)記。利用 Logistic 混沌映射,取密鑰為 key2={μ2,x2},其中 μ2為式(2)和式(3)聯(lián)合產(chǎn)生的變化而來(lái),而 x2為混沌映射的初始值,由算法指定。所產(chǎn)生的偽隨機(jī)數(shù)列 {an},n=1,2,…,1 024,并存儲(chǔ)在數(shù)組 X中,建立數(shù)組下標(biāo)與塊標(biāo)記的對(duì)應(yīng)關(guān)系。通過(guò)對(duì)數(shù)組X排序,即可對(duì)各個(gè)分塊進(jìn)行重新組合,達(dá)到塊置亂的目的。這樣做的好處是在保留了全局置亂變換優(yōu)勢(shì)的同時(shí),還降低了計(jì)算強(qiáng)度和空間需求,而且運(yùn)算的速度非??臁?/p>
設(shè)對(duì)大小為N×N、灰度級(jí)為256的圖像 T進(jìn)行置亂加密。算法的具體步驟如下:
(1)利用式(2)和式(3)計(jì)算圖像 T中的所有像素值,生成密鑰K。
(2)將密鑰 K代入Logistic混沌映射公式中,生成m次迭代以及塊置亂所需的混沌偽隨機(jī)序列。
(3)讀入原始圖像T的矩陣數(shù)據(jù),利用抽樣技術(shù)對(duì)矩陣進(jìn)行抽樣,實(shí)現(xiàn)矩陣行、列的交叉置亂。可進(jìn)行多次迭代,最后所得圖像為T1。
(4)對(duì)置亂后的圖像T1,按行從上到下、從左到右的順序依次掃描,應(yīng)用式(5)對(duì)圖像像素灰度值進(jìn)行變換。
(5)重復(fù)步驟(4)和(5),直到圖像T1中的所有像素值都被變換,所得圖像為T2。
(6)對(duì)T2進(jìn)行分塊,把分塊與置亂序列對(duì)應(yīng)起來(lái),通過(guò)對(duì)序列的排序達(dá)到分塊排序的目的,所得圖像為T3。
(7)T3就是原圖像T完成一輪置亂加密過(guò)程的密文圖像??筛鶕?jù)需要進(jìn)行多次加密。
解密算法是加密算法逆過(guò)程,在這里不作介紹。
該算法采用MATLAB平臺(tái)進(jìn)行實(shí)驗(yàn)仿真,采用模塊設(shè)計(jì)的方法實(shí)現(xiàn)加密算法和解密算法。在實(shí)驗(yàn)過(guò)程中,用于圖像置亂的灰度圖像大小256×256。用本文所提出的算法對(duì)圖像進(jìn)行置亂加密,所得到的圖像均是一種類似于噪聲的均勻圖像,且完全不能從圖像中得到原圖的任何信息,具有良好的加密效果,如圖4所示。
圖4 圖像置亂加密前后對(duì)比
基于混沌映射的加密算法,參數(shù)(包括初始值)往往用作密鑰,控制參數(shù)多就意味著密鑰也多,因此參數(shù)空間大才能保證密鑰空間也大。假設(shè)一個(gè)算法有a、b、c、d 4個(gè)控制參數(shù),那么攻擊者必須猜對(duì)這4個(gè)參數(shù)的排列組合才可能破譯算法。如果這4個(gè)參數(shù)是從1~64的任意數(shù),則密鑰空間大約為644。本文提出的算法中,算法的密鑰由產(chǎn)生灰度值變換偽隨機(jī)序列的key1和產(chǎn)生塊局部置亂的偽隨機(jī)序列的key2兩部分組成,則整個(gè)加密系統(tǒng)的密鑰為:
從式(6)中可以看出,最終的密鑰參數(shù)有5個(gè),而且每個(gè)參數(shù)都有著非常大的取值范圍,因此算法有足夠大的密鑰空間,使得窮舉攻擊不可能。在這樣的一個(gè)密鑰空間中,采用窮舉法進(jìn)行攻擊,在一些實(shí)時(shí)性要求較高的保密通信系統(tǒng)中,即使找到了加密密鑰,由于其滯后的時(shí)間太多,已經(jīng)失去了攻擊的價(jià)值。
對(duì)比圖 5(a)和圖5(b)可以明顯地發(fā)現(xiàn),明文圖像的各灰度值的像素個(gè)數(shù)分布從0~1 500不等,其中的差別非常大;而在密文圖像中,像素個(gè)數(shù)則主要分布在[225,275]這個(gè)區(qū)間里。其分布均勻的特性表明,該算法具有良好的置亂特性,能有效地掩蓋明文圖像的像素分布規(guī)律,有效增強(qiáng)圖像安全性。
圖5 直方圖
本文介紹的算法在對(duì)圖像運(yùn)用數(shù)字圖像抽樣技術(shù)預(yù)處理的基礎(chǔ)上,利用Logistic映射產(chǎn)生的偽隨機(jī)序列,對(duì)圖像進(jìn)行灰度值的變換和全局的塊置亂。實(shí)驗(yàn)仿真表明,該加密算法具有良好的加密效果,能有效地抵抗統(tǒng)計(jì)攻擊和抵御差分攻擊;算法具有足夠大的密鑰空間,能有效地抵抗密鑰窮舉攻擊。
[1]鄧紹江,張岱固,濮忠良.一種基于混沌的圖像置亂算法[J].計(jì)算機(jī)科學(xué),2008,35(8):238-240.
[2]陳珂,崔志明.改進(jìn)的加密算法在醫(yī)學(xué)圖像上的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(3):752-754.
[3]GILANI S A N,BANGASH M A.Enhanced block based color image encryption technique with confusion[C].Multitopic Conference,2008.
[4]熊昌鎮(zhèn),鄒建成.數(shù)字圖像抽樣技術(shù)的置亂效果及分析[J].北方工業(yè)大學(xué)學(xué)報(bào),2002,14(3):5-12.