基于SPIHT編碼過程的圖像選擇加密算法
隨著多媒體技術(shù)和網(wǎng)絡(luò)通信技術(shù)的快速發(fā)展,圖像數(shù)據(jù)的安全問題越來越受到人們的關(guān)注。由于圖像具有數(shù)據(jù)量大、冗余度高、要求實(shí)時(shí)傳輸?shù)忍攸c(diǎn),采用普通的文本加密效果不理想。圖像壓縮技術(shù)成熟之后出現(xiàn)了更加安全高效的加密方案:基于壓縮編碼的加密方式能夠同時(shí)完成加密和壓縮的功能,加密效率高、格式兼容性好;選擇加密是針對多媒體信息特點(diǎn)的加密方案,它選取多媒體信息中的重要部分進(jìn)行加密,有效地減少了加密數(shù)據(jù)量。目前,選擇加密和基于壓縮編碼的加密技術(shù)已經(jīng)成為了研究熱點(diǎn)。
SPIHT編碼作為一種優(yōu)越的嵌入式小波編碼,在各種圖像壓縮中應(yīng)用廣泛。它能夠支持圖像漸進(jìn)傳輸、壓縮效率高,比特流按照重要性排序并且能夠隨時(shí)結(jié)束編碼,允許達(dá)到一個(gè)目標(biāo)比特率或失真。該算法充分挖掘了小波圖像不同子帶之間的相似性,是公認(rèn)的一種高效圖像壓縮編碼,因此研究SPIHT編碼并更好地利用它是非常必要的。提出了只加密SPIHT壓縮編碼前兩層數(shù)據(jù)的灰度圖像部分加密方法;基于SPIHT提出了一種彩色圖像的部分加密算法,基于SPIHT提出了一種灰度圖像部分加密算法。與編碼過程相結(jié)合的加密方案能夠在編碼的同時(shí)完成加密,提高了效率,并且能夠滿足格式兼容性,適應(yīng)網(wǎng)絡(luò)實(shí)時(shí)傳輸。該算法的實(shí)質(zhì)類似于將碼流中的某些關(guān)鍵數(shù)據(jù)用隨機(jī)比特替換,容易受到已知明文攻擊和選擇明文攻擊。因此在設(shè)計(jì)此類加密算法時(shí)要考慮如何提高這方面的安全性。
本文研究了SPIHT壓縮編碼的4種數(shù)據(jù)類型,分析了不同類型編碼數(shù)據(jù)對圖像重建的作用,確定了其中的重要數(shù)據(jù)類型,并將其用流密碼進(jìn)行了加密。其次,改變加密層數(shù)K控制加密強(qiáng)度,進(jìn)一步減少了加密數(shù)據(jù)量。此外,本文在對LIS掃描過程中引入了混亂機(jī)制,降低了碼流相關(guān)性,從而使得算法更加安全。仿真實(shí)驗(yàn)結(jié)果表明,本文方法在保障了圖像加密安全性的同時(shí)進(jìn)一步減少了加密數(shù)據(jù)量,滿足格式兼容性要求并且能夠適應(yīng)網(wǎng)絡(luò)實(shí)時(shí)傳輸。
二、SPIHT編碼原理概述
1、編碼過程
SPIHT算法是一種嵌入式編碼,將待編碼的比特流按重要性的不同進(jìn)行排序根據(jù)目標(biāo)碼率或失真度大小要求隨時(shí)結(jié)束編碼。它具有良好的漸進(jìn)傳輸特性,利用集合劃分以及有序的位平面?zhèn)鬏?,?yōu)先傳輸重要系數(shù),優(yōu)先傳輸重要系數(shù)的重要比特位,其主要步驟如下:
1)初始化:對圖像進(jìn)行小波分解,用固定比特位數(shù)表示變換后的系數(shù)Ci,j,輸出n=|log2 (max(i,j)){|ci,i|}到信道;
2)排序過程:輸出滿足條件2n≤|ci,j|<2n+1的系數(shù)Ci,j的個(gè)數(shù)Z,以及對應(yīng)系數(shù)的Z對坐標(biāo)和Z個(gè)符號(hào)位;
3)細(xì)化過程:對于所有滿足|ci,j|≥2n+1系數(shù),輸出第n位的值;
4)迭代:如需迭代,則n-1轉(zhuǎn)到2)。
2、排序過程
排序過程是SPIHl編碼過程中最重要的部分,它采用集合分裂過程來決定碼流如何按照重要性進(jìn)行排序。集合的分割過程是不斷將一個(gè)集合分為4個(gè)子集,然后分別對各個(gè)子集進(jìn)行重要性測試,若該集合是不重要的,則用一個(gè)符號(hào)表示,反之,則繼續(xù)將集合進(jìn)行分割并進(jìn)行重要性測試。集合的結(jié)構(gòu)如圖1所示,其中:H,空間方向樹的所有樹根的坐標(biāo)集合(最高層);D(i,j),結(jié)點(diǎn)(i,j)的所有直接后代結(jié)點(diǎn)的坐標(biāo)集合;O(i,J),結(jié)點(diǎn)(i,J)的直接后繼(兒子)的坐標(biāo)集合。L(i,J)=D(i,J)-O(i,J),結(jié)點(diǎn)(i,j)直接后繼外所有后繼的坐標(biāo)集合。

集合分裂規(guī)則可以簡單地表示。
1)將圖像初始化為單一元素集合{(i,j)}和它們的后代D(i,j),所有的(i,j)∈H;
2)如果D(i,j)是重要的,把它分裂為L(i,j)和四個(gè)單元素集合,每個(gè)集合元素(k,j)∈O(i,j);
3)如果三(i胡是重要的,把它分裂為四個(gè)集合D(i,j),其中(k,j')∈O(i,J)直圖像進(jìn)行離散小波變換后,將小波系數(shù)根據(jù)一定規(guī)則劃分為空間方向樹SOT,在編碼過程中需要維持三個(gè)鏈表,不重要系數(shù)鏈表LIP,不重要集合鏈表LIS和重要系數(shù)鏈表LSP,并用小波系數(shù)矩陣中LL層的小波系數(shù)初始化LIP,用所有的SOT初始化LIS,初始化LSP為空集。
SPIHT編碼由掃描3個(gè)鏈表完成。當(dāng)閾值為Tk,k∈(0,K),時(shí),掃描過程如下:
1)LIP掃描:將不重要系數(shù)保留在UP中,重要系數(shù)移入LSP,并輸出表示系數(shù)重要性判定值Sk,LIP-sig和系數(shù)符號(hào)Sk,LIP-sig;
2)LIS掃描:掃描LIS中所有的集合D(i,j),如果集合中不包括重要系數(shù)(即集合不重要)將其保留在LIS中;反之,則將它分裂為4個(gè)直接后代和更小的子集,將小的集合加入到LIS鏈尾,并判斷4個(gè)直接后代系數(shù)的重要性,不重要系數(shù)放入LIP中,重要系數(shù)放入LSP。同時(shí),輸出集合重要性判定值Sk,LIP-sig、集合中重要系數(shù)判定值與符號(hào)Sk,LIP-sig、Sk,LIP-sig;
3)細(xì)化過程:輸出LSP中每個(gè)系數(shù)第n(n=lgTk)個(gè)位平面的比特skq。到壓縮數(shù)據(jù)中。至此一個(gè)循環(huán)掃描完成,改變閾值T= T/2進(jìn)入下一次掃描。如此迭代,直到輸出數(shù)據(jù)達(dá)到要求的壓縮率為止。
二、基于SPIHT編碼的選擇加密算法
SPIHT壓縮碼流包含了多種類型數(shù)據(jù),它們對于解碼所起的作用也各不相同。有些重要系數(shù)對解碼起著非常關(guān)鍵的作用,如果把這部分?jǐn)?shù)據(jù)加密也許能夠起到很好的保護(hù)作用。
1、SPIHT壓縮碼流數(shù)據(jù)分析
根據(jù)前面對編碼過程的分析,SPIHT算法在編碼過程中需要維持三個(gè)鏈表:LIP、LIS、和LSP,算法過程分為排序過程和精化過程,具體的編碼過程是對上述三個(gè)鏈表掃描并產(chǎn)生比特的過程,如圖2所示。

將碼流分解為四個(gè)部分:系數(shù)重要性判定值pixel-sig,系數(shù)符號(hào)pixel-sgn,集合重要性判定值set-sig,細(xì)化值value。這四類數(shù)據(jù)的意義不同,對圖像重構(gòu)起著不同的作用,下面將結(jié)合實(shí)驗(yàn)對這四個(gè)部分的重要性進(jìn)行分析。
采用一組隨機(jī)比特分別替換這4部分碼流,利用碼流重構(gòu)圖像,分別研究各部分?jǐn)?shù)據(jù)對解碼的影響。圖像重構(gòu)情況如圖3所示。

通過前面的分析和實(shí)驗(yàn),我們得出:系數(shù)重要性判定值和集合重要性判定值對解碼和獲得重構(gòu)圖像具有非常顯著的影響。
系數(shù)重要性判定值的改變將會(huì)直接影響后續(xù)比特的類型和意義,最終會(huì)影響解碼后的重構(gòu)圖像。由于SPIHT的編碼過程是對集合的劃分過程:如果集合是重要的,則將該集合分裂成四個(gè)單獨(dú)節(jié)點(diǎn)與剩余后代,然后繼續(xù)對各個(gè)節(jié)點(diǎn)與集合進(jìn)行判斷;反之,則用一個(gè)符號(hào)對該集合進(jìn)行編碼。由此可見,集合重要性判定對后續(xù)節(jié)點(diǎn)的劃分非常重要,會(huì)產(chǎn)生連鎖反應(yīng),這部分?jǐn)?shù)據(jù)能否正確解碼對于圖像重構(gòu)至關(guān)重要。

?2、選擇加密方案
1)加密重要數(shù)據(jù)
根據(jù)上節(jié)的分析可知,系數(shù)重要性判定值和集合重要性判定值在SPIHT編碼中是重要值,這兩類數(shù)據(jù)直接影響其他類型數(shù)據(jù)的意義。僅僅對這兩部分?jǐn)?shù)據(jù)進(jìn)行加密就能夠使得重構(gòu)圖像失去可讀性,從而達(dá)到保密的目的和要求。此外,SPIHT編碼屬于嵌入式編碼,按位平面從高到低進(jìn)行編碼,壓縮碼流越向前,包含的信息量越大。因此可以只加密前M次掃描碼流中的重要部分,進(jìn)一步減少所需加密的數(shù)據(jù)量。
2)選擇加密安全性分析
基于SPIHT的選擇加密算法雖然具有較高的加密效率,能滿足編碼格式的兼容性要求,但仍然存在缺陷。該加密算法實(shí)質(zhì)上是用01比特替換部分碼流數(shù)據(jù),替換的比例越小則密文碼流與明文碼流的相關(guān)度越高。碼流的相關(guān)性比較大,可能會(huì)給攻擊者提供一些重要的分析信息,攻擊者可能會(huì)采用一些圖像處理方法基于圖像相關(guān)性進(jìn)行恢復(fù),存在不安全隱患。因此,需要增強(qiáng)碼流的混亂程度來克服這個(gè)缺點(diǎn)。
3)引入置亂機(jī)制
原始圖像經(jīng)小波變換后得到系數(shù)矩陣,系數(shù)可看成一棵四叉樹。如果在編碼前直接對四叉樹結(jié)構(gòu)進(jìn)行整體置亂的話會(huì)改變多分辨率小波系數(shù)的特性,會(huì)對壓縮性能造成很大的影響。因此,最佳的方法是在壓縮過程中引入混亂。
SPIHT編碼過程中會(huì)將重要集合進(jìn)行進(jìn)一步分解,并將后代中的四個(gè)集合加入LIS以便于繼續(xù)掃描判斷。因此LIS中的數(shù)據(jù)不斷增長,并決定了對后續(xù)節(jié)點(diǎn)的掃描順序。若LIS的元素代表D(i,j)則定義為A類,若代表L(i,j)則定義為B類,并且同一類型的節(jié)點(diǎn)在四叉樹中的高度是一致的。因此本文提出了置亂方案:對LIS中相同類型的節(jié)點(diǎn)進(jìn)行置亂,這樣等價(jià)于將重要四又樹中同一高度的節(jié)點(diǎn)進(jìn)行置亂。與整體之亂相比,這種方案不僅能夠與壓縮過程相結(jié)合,更重要的是能減少對系數(shù)分布的影響,依舊能夠滿足漸進(jìn)傳輸?shù)囊蟆?/p>
4)選擇加密方案設(shè)計(jì)
采用RC4算法生成的密鑰序列為K;加密前m次掃描碼流中的系數(shù)重要性判定值和集合重要性判定值。在對LIS的掃描過程中,若當(dāng)前節(jié)點(diǎn)為A類并且下一個(gè)節(jié)點(diǎn)為B類,統(tǒng)計(jì)當(dāng)前節(jié)點(diǎn)之后有幾個(gè)連續(xù)的B類節(jié)點(diǎn)并對它們進(jìn)行置亂;若當(dāng)前節(jié)點(diǎn)為B類并且下一個(gè)節(jié)點(diǎn)為A類,統(tǒng)計(jì)當(dāng)前節(jié)點(diǎn)之后有幾個(gè)連續(xù)的A類節(jié)點(diǎn)并對它們進(jìn)行置亂。其中,置亂的方式借鑒RC4的算法原理。假設(shè)需要置亂的序列為S[n],密鑰長度為n,算法過程為:
for ('i=O;i<n;i++)
{
s[i]=i;
}
for (i=0;i<n;i++)
{
j=(j+s[i]+k[i])%256;
swap( s[i],s[j]);
}
在算法的過程中,密鑰的主要功能是將S[n]攪亂,i確保S[n]的每個(gè)元素都得到處理,j保證S[n]的攪亂是隨機(jī)的。
三、實(shí)驗(yàn)結(jié)果與性能分析
本算法基于VS2008平臺(tái)采用MFC編程進(jìn)行數(shù)據(jù)仿真實(shí)驗(yàn),選用RC4算法生成加密密鑰,實(shí)驗(yàn)參數(shù)設(shè)置為:8位密鑰12345678,小波分解級數(shù)為4,比特率為1.0。本文對uscSIPI標(biāo)準(zhǔn)測試圖庫中的灰度圖像進(jìn)行了仿真實(shí)驗(yàn),對前6次掃描產(chǎn)生碼流中的重要部分進(jìn)行加密,并置亂LIS中的同類集合,當(dāng)碼流長度為65 536 bit時(shí)結(jié)束編碼。
1、實(shí)驗(yàn)結(jié)果
加解密圖像如圖5所示。從圖中可以看出圖像加密后失去了原始明文的信息,密文直方圖分布均勻,能夠有效地抵抗統(tǒng)計(jì)分析。

2、性能分析
(1)安全性分析
SPIHT算法中要精準(zhǔn)地確定數(shù)據(jù)類型非常困難,如果加密的數(shù)據(jù)量非常龐大,更是難上加難。如果一副256*256大小的圖像有5%的數(shù)據(jù)被加密,約有3276比特的數(shù)據(jù)被加密。窮舉攻擊的計(jì)算量為23276,可以保證數(shù)據(jù)的安全性。
(2)密鑰敏感性分析
對于一個(gè)優(yōu)秀的加密系統(tǒng)而言,明文應(yīng)具備密鑰敏感性。即使密鑰發(fā)生微小的改變也會(huì)使得密文千差萬別。在對lena的密文圖像進(jìn)行解密時(shí),將原始密鑰由12345678改為12345679,其余參數(shù)不變,對應(yīng)的解密結(jié)果如圖6所示。解密圖像呈現(xiàn)隨機(jī)分布,其直方圖很均勻。

為了進(jìn)一步驗(yàn)證密鑰敏感性,我們隨機(jī)生成3 000個(gè)密鑰(只有其中一個(gè)是正確的)分別對密文圖像進(jìn)行解密并計(jì)算重構(gòu)圖像與原始圖像的PSNR,結(jié)果如圖7所示。從圖中可以看出,只有用正確的密鑰解密才能得到理想的PSNR(約為35.94 dB),其余的均為10dB左右。即使加密密鑰和解密密鑰有微小的差別也不能正確解密,說明該算法能夠抵抗各種基于密鑰敏感性的攻擊。

(3)格式兼容性分析
傳統(tǒng)的加密算法將圖像看成二進(jìn)制流,加密后破壞了文件結(jié)構(gòu)。因此,如果沒有正確的密鑰便無法正常解碼。本文提出的加密算法與壓縮編碼相結(jié)合,遵從SPIHT的編碼格式通過加密重要的編碼控制信息從而改變輸出碼流。因此,本文算法加密效率高并且能夠滿足SPIHT標(biāo)準(zhǔn)的格式兼容性,即使密鑰錯(cuò)誤,解碼端的處理仍然能夠正常進(jìn)行,但無法獲得原始圖像的正確信息。
(4)相關(guān)性分析
相關(guān)系數(shù),是衡量兩個(gè)隨機(jī)變量之間線性相關(guān)程度的指標(biāo)。如果明文與密文相關(guān)系數(shù)顯著,可能會(huì)泄露明文信息從而為攻擊者提供線索,存在安全隱患。因此,本文在對USCSIPI標(biāo)準(zhǔn)測試圖庫中的圖像加密后,分別統(tǒng)計(jì)了碼流相關(guān)性與圖像相關(guān)性。碼流相關(guān)性指的是加密碼流與原始碼流的相關(guān)系數(shù);圖像相關(guān)性指的是從分別從圖像的水平、垂直以及對角方向分別抽取一定數(shù)量的像素對(這里取1024對)并分別計(jì)算相關(guān)系數(shù),統(tǒng)計(jì)結(jié)果如表1所示。從表中可以看出:采用本文提出的選擇加密算法加密后,碼流相關(guān)性和圖像相關(guān)性很小,達(dá)到了理想的標(biāo)準(zhǔn),起到了很好的置亂效果。

(5)壓縮性能與效率分析
本文提出的加密算法與壓縮編碼相結(jié)合,沒有改變編碼前的數(shù)據(jù)分布,對編碼性能影響很小。此外,在選擇加密的基礎(chǔ)上引入了置亂機(jī)制,降低了碼流相關(guān)性從而使得加密更加安全,僅需加密前6輪掃描編碼中的系數(shù)重要性判定值和集合重要性判定值便可以保證圖像的安全性。表2分析了USC-SIPI標(biāo)準(zhǔn)測試圖庫加密和解密后的PSNR,并統(tǒng)計(jì)了每幅圖像所需要加密的數(shù)據(jù)量,平均比例約為原圖數(shù)據(jù)量的2.28%。

3、幾種加密算法性能對比
表3對幾種加密算法的時(shí)間效率進(jìn)行了對比(這里統(tǒng)計(jì)的時(shí)僅僅是壓縮編碼時(shí)間,不包括小波變換部分)。對比的算法分別為:1)采用SPIHT對圖像編碼(不加密);2)采用RC4加密前兩層壓縮碼流;,3)采用Arnold算法對前2層碼流進(jìn)行置亂;4)采用本文提出的選擇加密算法。從表中可以看出,本文提出的選擇加密算法具有很高的加密效率。

小知識(shí)之LIS
LIS全稱Laboratory Information Management System,是專為醫(yī)院檢驗(yàn)科設(shè)計(jì)的一套實(shí)驗(yàn)室信息管理系統(tǒng),能將實(shí)驗(yàn)儀器與計(jì)算機(jī)組成網(wǎng)絡(luò),使病人樣品登錄、實(shí)驗(yàn)數(shù)據(jù)存取、報(bào)告審核、打印分發(fā),實(shí)驗(yàn)數(shù)據(jù)統(tǒng)計(jì)分析等繁雜的操作過程實(shí)現(xiàn)了智能化、自動(dòng)化和規(guī)范化管理。有助于提高實(shí)驗(yàn)室的整體管理水平,減少漏洞,提高檢驗(yàn)質(zhì)量。




