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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

加密流程如圖4所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

小知識(shí)之哈夫曼編碼

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