本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種基于混沌理論的數(shù)字圖像并行加密方法。
背景技術(shù):
混沌是與量子力學(xué)、相對(duì)論并列的20世紀(jì)三大物理學(xué)重要發(fā)現(xiàn)之一,混沌現(xiàn)象是指在確定的非線性系統(tǒng)中,在不加以任何隨機(jī)因素的條件下,由于自身內(nèi)部的相互作用表現(xiàn)出來類似隨機(jī)過程的一種現(xiàn)象。而混沌與生俱來的各種特征非常符合密碼學(xué)中的基本要求。如:首先,混沌系統(tǒng)對(duì)初始條件的極端敏感性,使得密碼系統(tǒng)的密鑰空間更廣且密鑰敏感性極強(qiáng);其次,混沌系統(tǒng)產(chǎn)生的混沌信號(hào)是非周期且非收斂的,又具有很好的隨機(jī)性和復(fù)雜性,所以這種特性很適合讓它做密碼學(xué)隨機(jī)數(shù)發(fā)生器;最后,混沌信號(hào)具有結(jié)構(gòu)復(fù)雜、類似噪聲等特性使得它具有天然的隱蔽性。因此,基于混沌理論提出的密碼方案具有傳統(tǒng)加密技術(shù)沒有的優(yōu)良特性,進(jìn)而將混沌應(yīng)用于數(shù)字圖像加密領(lǐng)域有著廣泛的應(yīng)用前景。
基于混沌的圖像加密算法研究開始階段主要基于Shannon提出的混淆和擴(kuò)散框架。首先,在混淆階段利用混沌系統(tǒng)產(chǎn)生的混沌序列來置亂像素點(diǎn)的位置;其次,在擴(kuò)散階段主要是通過改變像素點(diǎn)的像素值來獲取更好的加密效果。而其中的貓映射是在混淆階段中使用最為經(jīng)典的方法,它不僅易于實(shí)現(xiàn),而且運(yùn)行速度快等特點(diǎn)使它至今依舊被很多加密算法所青睞。Guan等人提出了一種通過貓映射和Chen系統(tǒng)的混沌圖像加密算法;Chen等人進(jìn)一步將二維貓映射推廣到三維,進(jìn)而得出一種利用三維貓映射的混沌圖像加密算法;Gao等人采用了一種稱為置亂矩陣的序列對(duì)圖像像素的行列進(jìn)行變換,它先是利用一維logistic 映射產(chǎn)生一個(gè)偽隨機(jī)的混沌序列,再利用該序列來分別對(duì)像素進(jìn)行行的重新排列和列的重新排列,結(jié)果表明這種置亂方法比貓映射具有更高的安全性,所以也被廣泛的應(yīng)用于圖像加密中;朱建良等人提出了一種在生成混沌信號(hào)的過程中參數(shù)隨機(jī)變化的混沌偽隨機(jī)序列產(chǎn)生方法,并基于該方法提出了一種新的圖像加密算法;Zhang等人提出了通過DNA編碼進(jìn)行圖像加密。綜上所述,對(duì)于混沌圖像加密技術(shù)的研究不管是廣度還是深度都取得了很大的發(fā)展和突破,新算法的不斷涌現(xiàn)使得混沌圖像加密技術(shù)也越來越走向成熟。而目前的一些圖像加密方法主要存在不能有效抵抗差分攻擊、選擇明文(密文)攻擊等問題,而且算法基本上都是采用的串行加密方式進(jìn)行加解密。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述安全性問題和加密性能問題,本發(fā)明提出一種基于混沌理論的數(shù)字圖像并行加密方法。
本發(fā)明一種基于混沌理論的數(shù)字圖像并行加密方法,包括步驟
S1:使用混沌序列對(duì)明文圖像進(jìn)行全局性位置置亂;
S2:將明文圖像分為若干份;
S3:對(duì)每份明文圖像進(jìn)行并行局部擴(kuò)散,并將每一份明文圖像的最后一個(gè)像素和下一份明文圖像的第一個(gè)像素進(jìn)行交換;
S4:重復(fù)步驟S3,直到完成明文圖像的全局?jǐn)U散。
進(jìn)一步地,步驟S1中所述混沌序列是使用Kent混沌系統(tǒng)產(chǎn)生的。
更進(jìn)一步地,步驟S1包括步驟:
S11:將原明文圖像按照行優(yōu)先的順序轉(zhuǎn)換為一個(gè)長度為m×n的一維序列L={l1,l2,l3,…,lm×n},該序列的取值范圍均為[0,255];
S12:將原明文圖像的所有像素值相加得到一個(gè)總值為sum,然后再用sum來除以圖像的總像素點(diǎn)個(gè)數(shù)即m×n,由此來獲得整個(gè)圖像的一個(gè)平均像素值為avg,由公式和公式t=m+n+mod(avg×108,m+n)可分別得到Kent混沌系統(tǒng)中所需的控制參數(shù)a和迭代次數(shù)t;
S13:設(shè)Kent混沌系統(tǒng)的系統(tǒng)變量初始值為x0,將x0和a代入Kent混沌系統(tǒng)中,進(jìn)行Kent映射t次迭代,然后再繼續(xù)迭代m×n次,產(chǎn)生一個(gè)長度為m×n的一維混沌序列K={k1,k2,…,km×n};
S14:對(duì)混沌序列所述K進(jìn)行從小到大排序,產(chǎn)生一個(gè)用來記錄排序后的序列中各個(gè)元素在原序列K中所在位置的一個(gè)位置序列K'={k1',k2',…,k'm×n},并由所述位置序列來對(duì)明文序列L進(jìn)行全局性的位置置亂,最終得到置亂圖像序列L'={l1',l2',…,l'm×n}。
本發(fā)明的有益效果在于,與現(xiàn)有技術(shù)相比,本發(fā)明不僅能較好的抵抗差分攻擊、統(tǒng)計(jì)特性分析,而且能有效抵抗選擇明文或密文攻擊,且密鑰空間大、加密效果好,同時(shí)能有效利用計(jì)算機(jī)多核cpu的并行計(jì)算能力有效提高計(jì)算速度和加密性能。
附圖說明
圖1是本發(fā)明基于混沌理論的數(shù)字圖像并行加密方法流程圖。
圖2是原明文圖像加密前后灰度直方圖。
圖3是圖2中的明文圖像加密后的灰度直方圖。
圖4是明文圖像加密前相鄰像素相關(guān)性圖。
圖5是明文圖像加密后相鄰像素相關(guān)性圖。
圖6是正確解密后的圖片。
圖7是錯(cuò)誤解密后的圖片。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請(qǐng)參見圖1,本發(fā)明一種基于混沌理論的數(shù)字圖像并行加密方法,包括步驟
S1:使用混沌序列對(duì)明文圖像進(jìn)行全局性位置置亂;
S2:將明文圖像分為若干份;
S3:對(duì)每份明文圖像進(jìn)行并行局部擴(kuò)散,并將每一份明文圖像的最后一個(gè)像素和下一份明文圖像的第一個(gè)像素進(jìn)行交換;
S4:重復(fù)步驟S3,直到完成明文圖像的全局?jǐn)U散。
步驟S1實(shí)施的過程為圖像像素位置的置亂。本方法有別于其他加密方法的最大特點(diǎn)是,常見的圖像加密算法都是采用的串行加密方式,為了充分利用好現(xiàn)在計(jì)算機(jī)多核cpu的可并行計(jì)算特性,在圖像擴(kuò)散操作階段,本發(fā)明將原明文圖像分為若干份,讓每一份進(jìn)行并行局部擴(kuò)散操作,在每一輪結(jié)束之后,為了使得圖像能夠進(jìn)行全局性擴(kuò)散作用,將每一份的最后一個(gè)像素和下一份的第一個(gè)像素進(jìn)行交換,進(jìn)行下一輪的擴(kuò)散操作,如此反復(fù)循環(huán)直到最后,如此達(dá)到圖像的全局?jǐn)U散作用。
設(shè)灰度圖像A大小為m×n,t作為混沌系統(tǒng)迭代次數(shù),sum是像素值總和,avg是所有像素的平均值,具體加密方法步驟如下所示:
步驟S11:把原文圖像A按照行優(yōu)先的順序轉(zhuǎn)換為一個(gè)長度為m×n的一維序列L={l1,l2,l3,…,lm×n},該序列的取值范圍均為[0,255]。
步驟S12:把原文圖像的所有像素值相加得到一個(gè)總值為sum,然后再用sum來除以圖像的總像素點(diǎn)個(gè)數(shù)即m×n,由此來獲得整個(gè)圖像的一個(gè)平均像素值為avg,由式(1)和式(2)可分別得到Kent混沌系統(tǒng)中所需的控制參數(shù)a和迭代次數(shù)t。
t=m+n+mod(avg×108,m+n) (2)
步驟S13:設(shè)混沌系統(tǒng)的系統(tǒng)變量初始值為x0,將x0和a代入式kent混沌系統(tǒng)中,進(jìn)行Kent映射t次迭代用來消除暫態(tài)效應(yīng)的不良影響,然后以它為起點(diǎn)繼續(xù)迭代m×n次,將會(huì)產(chǎn)生一個(gè)長度為m×n的一維混沌序列K={k1,k2,…,km×n}。
步驟S14:對(duì)混沌序列K進(jìn)行從小到大排序,產(chǎn)生一個(gè)用來記錄排序后的序列中各個(gè)元素在原序列K中所在位置的一個(gè)位置序列K'={k1',k2',…,k'm×n},由此以它來對(duì)明文序列L進(jìn)行全局性的位置置亂,最終得到置亂圖像序列L'={l1',l2',…,l'm×n}。
步驟S2-S5是對(duì)圖像像素并行擴(kuò)散
該過程是將先將置亂圖像序列等分為若干份,然后每一份分別采用特定的公式來對(duì)各個(gè)子序列并行的進(jìn)行擴(kuò)散操作,當(dāng)每個(gè)子序列循環(huán)一定次數(shù)后,再將每相鄰的兩個(gè)子序列的第一個(gè)和最后一個(gè)值進(jìn)行交換,這樣來達(dá)到全局性的擴(kuò)散作用。然后再繼續(xù)以上操作,如此循環(huán)一定的次數(shù)后將得到一個(gè)擴(kuò)散后的密文序列,從而得到最終加密密文。具體步驟如下所示:
步驟S2:本文實(shí)驗(yàn)采用的是256*256的灰度圖像,且cpu為4核的,所以將L'等分為4份同樣大小的子序列分別為p1、p2、p3、p4,創(chuàng)建四個(gè)線程,使得每一個(gè)線程分別負(fù)責(zé)一個(gè)子序列,結(jié)合公式(3),將四個(gè)子序列的值分別依次代入到公式(3)中進(jìn)行計(jì)算一次,得到第一次擴(kuò)散效果。對(duì)于公式(3),可令c0為[0,255]中任意數(shù),因此c0也可作為一個(gè)密鑰。這一步使得中間密文前后緊密相關(guān),以達(dá)到像素?cái)U(kuò)散作用。
步驟S3:各個(gè)子序列再按照式(3)繼續(xù)循環(huán)計(jì)算10次,得到四個(gè)擴(kuò)散后的子序列p1’、p2’、p3’、p4’,使得各個(gè)子序列內(nèi)部得到充分?jǐn)U散作用,但是這樣僅僅只能使得各個(gè)子序列內(nèi)部擴(kuò)散,對(duì)于整個(gè)置亂序列來說只是局部擴(kuò)散,為了讓各個(gè)子序列能相互影響,將p1’中的最后一個(gè)序列值和p2’中的第一個(gè)交換
步驟S4:依次進(jìn)行步驟S3相同的操作,最后p4’的最后一個(gè)值和p1’中的第一個(gè)序列值交換,如此,使它們之間產(chǎn)生了密切聯(lián)系,任何一個(gè)序列的改變都換影響到整個(gè)序列的巨大變化。
步驟S5:各個(gè)子序列進(jìn)行首尾值交換之后,重新進(jìn)行步驟S2和步驟S3的操作,這樣連續(xù)進(jìn)行10次循環(huán)操作,得到最終密文C={c1,c2,......,cm×n}。將密文序列c轉(zhuǎn)換為最終的密文圖像。
本文實(shí)驗(yàn)仿真過程中選擇的圖像是大小為256×256的Cameraman灰度圖像,以此作為明文,加密系統(tǒng)中國的初始密鑰主要有Kent混沌系統(tǒng)中的x0=0.4561592650,和加密過程所用到公式(3)的參數(shù)c0=250,而Kent混沌系統(tǒng)中的控制參數(shù)S則由圖像自身特性決定。實(shí)驗(yàn)仿真表明,加密方法簡單可行而且加解密速度快,本方法不僅能得到較好的加密效果,還具有較高的安全性。
圖2為加密前的明文圖像的灰度直方圖,明顯呈現(xiàn)出不均勻分布,因此可以得出圖像像素值的分布特點(diǎn)。圖3為加密后的密文圖像灰度直方圖,可看出其分布非常均勻,因此可達(dá)到很好的隱藏明文圖像信息的效果。
從明文和密文圖像中隨機(jī)抽取水平方向800組相鄰點(diǎn),以次作出圖像像素值的關(guān)系圖,圖4和圖5兩圖分別展現(xiàn)了明文圖像水平相鄰點(diǎn)的像素值關(guān)系和密文圖像水平相鄰點(diǎn)的像素值的關(guān)系,由此可得,加密后相鄰點(diǎn)之間的像素值完全沒有了任何關(guān)系。
圖6和圖7可見,對(duì)明文圖像解密時(shí),即使是某一個(gè)解密密鑰發(fā)生非常微小的變化,最后都得不到明文圖像。實(shí)驗(yàn)仿真中,正確解密后所得解密圖像為圖5,將X0=0.3234321210改為X0=0.3234321211,其他都不變,得到的解密圖像為如圖6所示。因此,哪怕是10-10的微小改變也無法成功解密圖像,說明了該方法具有較好的密鑰敏感性。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍。