熊繼偉,吳秋新
(北京信息科技大學(xué) 理學(xué)院,北京 100192)
不同于文本數(shù)據(jù),數(shù)字圖像作為一種二維數(shù)據(jù),其數(shù)據(jù)量大,冗余度高,像素間相關(guān)性強(qiáng)。傳統(tǒng)的加密方法如高級(jí)加密標(biāo)準(zhǔn)(advanced encryption standard,AES)、數(shù)據(jù)加密標(biāo)準(zhǔn)(data encryption standard, DES)、RSA加密算法(Rivest, Shamir, Adleman)、國際數(shù)據(jù)加密算法(international data encryption algorithm, IDEA)等并不適合用來加密圖像[1-2]。目前,數(shù)字圖像加密算法按加密思路主要分為以下幾類:基于空間域的像素置亂、基于混沌的加密、基于變換域的加密。陳關(guān)榮等[3]提出了像素置亂和異或擴(kuò)散的加密算法,但由于此算法產(chǎn)生的混沌序列與明文無關(guān)聯(lián),導(dǎo)致加密算法可以被選擇明文攻擊破譯。鄧曉衡等在文獻(xiàn)[3]的基礎(chǔ)上提出比特置亂加密算法[4-8],既保留了原算法的優(yōu)點(diǎn),又通過比特置亂進(jìn)一步改變像素值,更好地隱藏明文統(tǒng)計(jì)特征,同時(shí)將混沌序列與明文產(chǎn)生關(guān)聯(lián),使得中間密鑰隨明文自適應(yīng)變化,能較為有效地抵御選擇明文攻擊。
本文提出一種新的加密算法,能夠分別對(duì)不同的比特平面使用不同的置亂方式,可以有效地破壞明文的相關(guān)性,更好地隱藏明文的信息。同時(shí)密鑰和明文有很強(qiáng)的相關(guān)性,能夠抵抗文獻(xiàn)[9]所提出的攻擊方法。
混沌現(xiàn)象是在非線性動(dòng)力系統(tǒng)中表現(xiàn)的確定性、類隨機(jī)的過程,這種過程既非周期又不收斂,并且對(duì)于初始值具有敏感依賴性。這種現(xiàn)象很契合加密算法需要的偽隨機(jī)序列的特性。
logistic映射[10]是一種簡(jiǎn)單快速、易于實(shí)現(xiàn)的混沌映射。其表達(dá)式為
x(n+1)=μxn(1-xn)
(1)
當(dāng)參數(shù)xn∈(0,1),μ∈(3.57,4]時(shí),logistics映射處于混沌狀態(tài),如圖1所示。
圖1 混沌系統(tǒng)
由于每個(gè)圖像由8個(gè)比特平面組成,不同比特平面所占權(quán)重不同,所以包含的信息也有所差異,每個(gè)比特平面所包含的信息為
(2)
由式(2)可以看出,從I1到I8圖像所包含的信息逐漸增多。為了提高加密算法的抗攻擊性,首先對(duì)比特平面進(jìn)行歸一化,使用比特循環(huán)右移打亂每個(gè)平面的信息分布。歸一化之后每個(gè)平面信息分布能夠更加平均。
本文提出的加密算法流程主要由以下幾部分組成:1)密鑰及混沌序列的生成;2)比特循環(huán)位移及分平面置亂;3)組合比特平面。
加密步驟如圖2所示。首先計(jì)算出明文圖像的SHA-256值,該散列值是一個(gè)具有256 bit的值,用一個(gè)長度為64位的16進(jìn)制字符串表示。盡管兩幅圖像之間僅有任意一個(gè)bit的區(qū)別,但產(chǎn)生的散列值截然不同[11-12]。將明文圖像的散列值與密鑰進(jìn)行異或計(jì)算,通過logistic映射產(chǎn)生混沌序列用于比特循環(huán)位移與比特平面置亂。最后組合比特平面得到密文。解密算法是加密算法的逆過程。
圖2 加密算法流程
步驟1讀取明文圖像P(m×n),其中m,n分別為圖像P的長和寬。計(jì)算明文圖像的SHA-256值與密鑰異或計(jì)算結(jié)果H={H1,H2,…,H64}。
步驟2由式(3)~(6)計(jì)算出logistic映射初始值x0,參數(shù)μ,以及棄置項(xiàng)個(gè)數(shù)c。
(3)
(4)
(5)
(6)
將式(4)和式(5)產(chǎn)生的初始值代入式(1)迭代c+9×m×n次,得到長度為c+9×m×n的隨機(jī)序列,棄置前c項(xiàng)以保證序列的隨機(jī)性,然后將迭代得到的隨機(jī)序列按順序分為9段,得到一組隨機(jī)序列t0,t1,t2,…,t8,其中每個(gè)序列的長度為m×n。
取隨機(jī)序列t0,將原圖像P中的所有像素灰度值pi按照式(7)映射產(chǎn)生新的圖像。
(7)
(8)
將比特循環(huán)位移后的圖像R的每個(gè)像素的灰度值按照式 (9)分解成為8個(gè)比特平面,得到8個(gè)分解之后的比特平面R1~R8:
(9)
式中:R為循環(huán)位移之后的圖像;Ri為第i個(gè)比特平面。
對(duì)圖像進(jìn)行比特循環(huán)位移能夠使每個(gè)比特平面包含相近的信息量。從圖3和圖4可以看出,經(jīng)過比特循環(huán)位移之后的每個(gè)比特平面所包含的信息量大致相同,而未循環(huán)位移分解的比特平面的信息較多地集中于高比特平面。
圖3 未循環(huán)位移的8個(gè)比特平面
圖4 循環(huán)位移之后的8個(gè)比特平面
取隨機(jī)序列t1~t8按照算法1產(chǎn)生置亂序列v1~v8。將上節(jié)分解得到的8個(gè)比特平面R1~R8與置亂序列v1~v8應(yīng)用算法2置亂。
算法1生成置亂序列
輸入: 隨機(jī)序列t輸出: 置亂序列v1: l = length of t2: w = 1,2,3,4,…,l3: for i = l,…,4,3,2,1 Do4: 交換wi,wmod(ti,i-1) 5: end for
算法2置亂
輸出:置亂序列v, 圖像矩陣R輸入:置亂圖像矩陣R'1: l = length of v2: for i = 1,2,3,…,l Do3: R'i=Rvi4: end for
最終密文圖像為合并置亂之后的8個(gè)比特平面:
(10)
選擇lena圖像,在Python3.6環(huán)境下對(duì)本文提出的算法進(jìn)行實(shí)驗(yàn)仿真,加密與解密效果如圖5 所示。
圖5 加密與解密效果
由圖可見,使用本文提出的算法進(jìn)行加密,密文完全隱藏明文圖像信息。下面從統(tǒng)計(jì)特征、信息熵、密鑰敏感性、明文敏感性、密鑰空間這幾個(gè)角度進(jìn)行分析對(duì)比。
3.3.1 直方圖分析
對(duì)圖像P中每個(gè)像素pi的灰度值進(jìn)行統(tǒng)計(jì),得出圖像灰度值的分布情況如圖6所示。
圖6 直方圖統(tǒng)計(jì)
由圖6可以看出,明文圖像的灰度值有明顯的分布規(guī)律。而經(jīng)過加密的密文圖像的直方圖各個(gè)灰度值分布得非常均勻,很好地隱藏了明文圖像的信息,使得攻擊者難以通過灰度值分布得到信息。
3.3.2 相鄰像素相關(guān)性
對(duì)于一個(gè)安全的圖像加密算法,應(yīng)該能夠明顯地破壞明文圖像相鄰像素的相關(guān)性。
圖7 顯示了對(duì)隨機(jī)抽取的500個(gè)像素點(diǎn)的明文水平相鄰像素和密文水平相鄰像素的相關(guān)性。
圖7 水平相鄰像素相關(guān)性
由圖7可以看出,明文圖像的相鄰像素有很強(qiáng)的相關(guān)性,這是由圖像的特點(diǎn)決定的,任何一個(gè)有意義的圖像,其相鄰像素必然有很強(qiáng)的相關(guān)性。對(duì)于加密之后的圖像,其相鄰像素的相關(guān)性明顯降低。由此可見,本文提出的加密算法能夠很好地破壞圖像相鄰像素的相關(guān)性,有較高的安全性。
3.3.3 信息熵
信息熵[13]為
(11)
密鑰敏感性是指解密算法接收到的錯(cuò)誤密鑰不管與正確密鑰多接近都無法正確解密出明文的屬性。本文提出的算法在錯(cuò)誤密鑰與正確密鑰僅僅有一位不同時(shí),解密出的明文如圖8所示??梢钥闯觯疚奶岢龅乃惴▽?duì)密鑰有非常高的敏感性。
圖8 密鑰解密效果
明文敏感性是指加密過程中不管兩個(gè)明文有多接近,加密之后得到的密文也存在差距的屬性。
本文采用灰度值變化率RNPC作為指標(biāo)來分析明文敏感性。原圖像加密之后明文為C1,隨機(jī)交換原圖像中兩個(gè)像素點(diǎn)的位置進(jìn)行加密之后得到的密文為C2。灰度值變化率為
(12)
式中M、N分別為圖像的長與寬。當(dāng)C1(i,j)=C2(i,j)時(shí)p(i,j)=0,否則p(i,j)=1。本文算法灰度值變化率為0.996,對(duì)比文獻(xiàn)[4]的0.634和文獻(xiàn)[5]的0.633,本文算法對(duì)于明文敏感性更高。
本文提出的加密算法使用了3個(gè)參數(shù),長度分別為64,50,14。任意一個(gè)參數(shù)錯(cuò)誤都將無法解密密文。因此密鑰空間大小為2128。從安全角度來講,密鑰空間大于2100就具有較高的安全性[14],可知本算法能夠抵抗一般的窮舉攻擊。
本文提出了一種新的圖像加密算法,能夠處理任意大小的圖片,并且擁有較高的性能,對(duì)于常見的攻擊方式具有較好的抵抗能力。采用的分解比特平面的方法不僅能夠增加加密系統(tǒng)的安全性,同時(shí)也能夠提高加密解密的性能,增強(qiáng)了算法的實(shí)用性。實(shí)驗(yàn)結(jié)果表明,本文提出的加密算法對(duì)密鑰十分敏感,符合加密算法的要求。如何擴(kuò)大密鑰空間使得加密算法更加安全是我們今后研究的重點(diǎn)。