基于混沌映射的JPEG圖像文件加密方法

根據(jù)JPEG文件格式及壓縮、解壓過程,我們提出了一種基于Logistic映射的混沌序列密碼對JPEG圖像文件加密方法。這種加密方法通過定義JPEG應(yīng)用段APP3采標(biāo)記加密算法,對實(shí)際JPEG圖像文件進(jìn)行加密和解密。

一、混沌系統(tǒng)的特征

混沌是指確定的非線性系統(tǒng)在一定條件下所呈現(xiàn)的不確定的隨機(jī)現(xiàn)象。這種系統(tǒng)對初值變化非常敏感,即初始狀態(tài)只有微小差別的兩個同構(gòu)混沌系統(tǒng)在較短的時間后就會產(chǎn)生兩組完全不同的、互不相關(guān)的混沌序列值,并具有天然的隨機(jī)性和類白噪聲的特性。因此,利用混沌系統(tǒng)對初始條件敏感的特性,提供數(shù)量眾多、非相關(guān)、類隨機(jī)而又確定可再生的混沌序列作為加密序列,對各種數(shù)據(jù)文件加密是加密技術(shù)的一個研究熱點(diǎn)。本文采用一種典型的Logistic混沌映射做為序列密碼。

零均值Logistic混沌映射的表達(dá)式為:

基于混沌映射的JPEG圖像文件加密方法

由上式可知該映射具有以下特性:

概率密度函數(shù)為:

基于混沌映射的JPEG圖像文件加密方法

ρ(x)不依賴于初始值,該混沌系統(tǒng)具有遍歷性。

利用概率密度函數(shù)可以進(jìn)一步得到如下的相關(guān)特性:

基于混沌映射的JPEG圖像文件加密方法

混沌映射對初值極為敏感,初始值稍微不同,就會迅速變成完全不同的狀態(tài),如圖1所示。

基于混沌映射的JPEG圖像文件加密方法

其中,實(shí)線的初始值為X10=0.35,虛線的初始值為X20=0.35001。由圖1可知:雖然初始值僅差了0.00001.但經(jīng)過大約18次迭代后,兩條曲線開始分散,完全獨(dú)立,沒有相關(guān)性。根據(jù)Logistic的以上特性,將初始值作為加密的密碼,根據(jù)初始值形成的混沌序列與JPEG圖像文件的數(shù)據(jù)進(jìn)行運(yùn)算掩蓋,可達(dá)到很好的PEG圖像文件加密效果。

二、利用混沌序列對JPEG圖像文件加密

1、混沌序列給JPEG圖像文件加密的方法

加密的基本要求:首先,保證JPEG圖像文件格式不變,即JPEG圖像文件所有定義標(biāo)示不能改變,能夠識別出文件是JPEG圖像文件;其次,加密后的圖像文件能夠很好地偽裝,其他的圖像瀏覽程序雖然能夠根據(jù)JPEG解壓算法讀取文件內(nèi)容,但不能解壓還原成原始圖像;最后,保證加密后的JPEG圖像文件能夠被解密程序自動識別。

JPEG圖像文件是一種象素格式文件,JPEG文件標(biāo)識主要由SOI文件標(biāo)識段、DQT量化表標(biāo)識段、SOF圖像幀起始段、DHT哈夫曼編碼表標(biāo)識段、sos掃描起始段、EncodeData壓縮數(shù)據(jù)、EOI文件結(jié)束標(biāo)志等幾部分組成。另外,JPEG圖像文件在文件頭保留APPn (Reserved For Application Use,n為1-15)標(biāo)記段給Application使用。目前JFIF定義了APPO(標(biāo)識為OXFF OXEO),EXIF定義了APPI(標(biāo)識為OXFFOXEI)和APP2(標(biāo)識為OXFF OXE2)。本文根據(jù)JPEG圖像文件格式要求,增加了APP3(標(biāo)識為OXFF OXE3)來標(biāo)記JPEG文件已經(jīng)被加密,使得解密程序能夠自動識別JPEG圖像文件是否加密。

JPEG圖像壓縮,解壓過程如圖2、圖3所示。

基于混沌映射的JPEG圖像文件加密方法

根據(jù)JPEG文件的格式及其壓縮、解壓過程,本文選擇在JPEG圖像壓縮過程中對已經(jīng)過量化后的圖像數(shù)據(jù)進(jìn)行加密,因此不需要還原壓縮圖像數(shù)據(jù)就可以直接加密,處理簡單方便,只需將壓縮的數(shù)據(jù)經(jīng)過哈夫曼編碼還原的量化數(shù)據(jù)與Logistic混沌序列進(jìn)行掩蓋加密運(yùn)算。

設(shè)F(xn)是由公式(1)迭代產(chǎn)生出的Logistic序列,而序列的初始值墨是由輸入的加密密鑰經(jīng)過轉(zhuǎn)換得來的,Y(n),U(n),V(n)分別為JPEG圖像壓縮過程中,被量化后的YUV格式的各分量值的圖像數(shù)據(jù)Y(n),U(n),V(n)分別是經(jīng)過加密后的YUV格式的各分量值的圖像數(shù)據(jù),設(shè)n為數(shù)據(jù)點(diǎn)數(shù),為自然數(shù),加密過程為:

基于混沌映射的JPEG圖像文件加密方法

再經(jīng)過哈夫曼編碼寫入文件,以達(dá)到偽裝的效果,同時可以保證JPEG圖像文件格式不變。

2、混沌序列給JPEG圖像文件加密的流程

在加密之前,先來定義加密標(biāo)識APP3。根據(jù)JPEG圖像文件頭預(yù)留給Applicaljon使用的標(biāo)記段的定義,本文將APP3定義如下:

基于混沌映射的JPEG圖像文件加密方法

考慮到更高的安全性,本文在定義APP3時,對不同的JPEG圖像文件使用不同的混沌序列對文件加密,使得破密者無法通過對比的手段來判斷加密所使用的算法,以增加破密的難度。因此,在APP3上定義的Chaos Arilhmetjc標(biāo)記來表示使用何種混沌序列,而使用的混沌序列只有與加密程序?qū)?yīng)的解密程序才能識別,從而提高了安全性能,本文定義OOOIH代表使用Logistic混沌加密。當(dāng)使用同一種混沌序列進(jìn)行加密,而加密掩蓋算法不一樣時,可以通過改變Version的值來實(shí)現(xiàn),本文定義了Logistic混沌序列加密的Version為OIOOH,代表使用簡單的異或加密掩蓋算法,這也是提高安全性能的手段。同肘,本文在APP3上定義了保留字段Reserved,主要考慮方便將來擴(kuò)充應(yīng)用。

加密流程如圖4所示:

基于混沌映射的JPEG圖像文件加密方法

三、JPEG圖像文件的混沌解密方法

1、JPEG圖像文件的混沌解密方法

根據(jù)加密的方法,首先讀取JPEG圖像文件頭的定義,查找是否有加密標(biāo)識APP3,若沒有APP3定義,說明不是加密文件,無需解密;若有說明JPEG圖像文件是經(jīng)過混沌加密的,則按照J(rèn)PEG格式讀取經(jīng)過加密后壓縮的數(shù)據(jù)做哈夫曼編碼還原,還原后的量化數(shù)據(jù)與Logistic混沌序列進(jìn)行解密運(yùn)算。

設(shè)F'(xn)是由公式(1)迭代產(chǎn)生出的LogisLic序列,而Logistic序列的初始值赫是由輸入的解密密鑰經(jīng)過轉(zhuǎn)換得來的;Y'(n),U'(n),V'(n)分別是經(jīng)過加密后的YUV格式的各分量值的圖像數(shù)據(jù);Y(n),U(n),V(n)分別是解密后的YUV格式的各分量值的圖像數(shù)據(jù),設(shè)q為數(shù)據(jù)點(diǎn)數(shù),為自然數(shù),解密過程如下:

基于混沌映射的JPEG圖像文件加密方法

然后根據(jù)JPEG解壓過程反量化,反離散余弦變換(IDCT),還原成圖像數(shù)據(jù),并將圖像顯示在計(jì)算機(jī)上,若需要對加密的JPEG文件解密還原,則重新進(jìn)行JPEG圖像壓縮后寫回文件,同時將APP3標(biāo)識段刪除。

2、JPEG圖像文件的混沌解密方法流程

加密是針對JPEG壓縮過程中量化后的數(shù)據(jù)進(jìn)行的,因此解密也在解壓過程想要的反量化前將數(shù)據(jù)解密,解密過程如圖5所示。

基于混沌映射的JPEG圖像文件加密方法

四、實(shí)驗(yàn)結(jié)果及分析

為了驗(yàn)證對JPEG圖像文件加密的可行性,本文采用C++編程實(shí)現(xiàn)了LogisLic混沌序列對JPEG圖像文件進(jìn)行加密和解密試驗(yàn)。

圖6給出了利用本文加密算法對JPEG圖像文件加密、解密后的結(jié)果,以及解密錯誤后的結(jié)果。

基于混沌映射的JPEG圖像文件加密方法

以上4個JPEG圖像文件均能用Windows操作系統(tǒng)自帶的圖片,從圖6(b)所示加密后的圖片來看,雖能袱圖像瀏覽工具正確解壓但已經(jīng)面目全非,達(dá)到了加密和偽裝的效果。

由于混沌系統(tǒng)對初始值和參數(shù)的敏感性,所以只要有非常微小差別的兩個同構(gòu)混沌系統(tǒng)在較短的時間后就會產(chǎn)生兩組完全不同的、互不相關(guān)的混沌序列值,因此初始值不正確,如圖6 (d)所示,是無法解密出原圖像的。本文使用6個字符作為密碼,每個字符占一個字節(jié),轉(zhuǎn)換成混沌序列的初始值,理論上可以產(chǎn)生2的48次方個密鑰,考慮可以直接從鍵盤輸入的可見字符作為密鑰的組合為95的6次方種,如此龐大的數(shù)據(jù),密碼的分析者和攻擊者要話費(fèi)的分析量和攻擊量是很大的。同時,本文定義APP3的Chaos Arithmetic可設(shè)定不同的混沌序列算法,Ver sion可以定義不同的加密掩蓋算法,它們的定義段的寬度(4個字節(jié)可以產(chǎn)生2的32次方種組合,而組合算法只有解密程序才能對應(yīng),所以破譯者無法知道混沌序列加密算法,也無法根據(jù)截取密文來重構(gòu)產(chǎn)生序列密碼的混沌系統(tǒng)的動力學(xué)模型、初始狀態(tài)等,大大增加了破密的難度。

加密后的JPEG文件依然按照J(rèn)PEG文件格式存儲,使用通用的圖像瀏覽工具仍然可以根據(jù)JPEG解壓方法解壓顯示,但并非是原始圖像。實(shí)驗(yàn)結(jié)果表明利用構(gòu)造混沌序列的方法對JPEG圖像文件加密是有效的,具有加密算法簡單、速度快、效果好和安全性高等特點(diǎn)。

小知識之哈夫曼編碼

哈夫曼編碼(Huffman Coding)是一種編碼方式,哈夫曼編碼是可變字長編碼(VLC)的一種。Huffman于1952年提出一種編碼方法,該方法完全依據(jù)字符出現(xiàn)概率來構(gòu)造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫作Huffman編碼。