郭家偉 張大興 楊珊珊 王詩迢
(杭州電子科技大學計算機學院 浙江 杭州 310018)
現如今,數字圖像被廣泛地應用在互聯網中,對于一些機密圖像通常要進行加密處理以防止信息泄露。同時,為了節省網絡帶寬,通常會將圖像壓縮后再進行傳輸。如果能在壓縮圖像的同時對圖像進行加密,便可以簡化對機密圖像的處理。
近年來,研究人員提出了一些針對圖像的壓縮加密聯合算法。一般而言,這類算法有三種不同的研究方向。第一種是將壓縮合并到加密算法中,文獻[1]使用行程編碼方案和Henon混沌映射實現了壓縮加密。由于其壓縮操作根植于加密算法,因此壓縮性能受到很大限制。第二種是將加密合并到壓縮算法中,文獻[2]提出一種基于JPEG壓縮的選擇加密方案,將加密集成在DCT變換中。文獻[3]修改了標準的JPEG壓縮,在壓縮過程中進行加密,但加密后的圖像存在格式兼容問題。文獻[4]中,使用哈希表和中國剩余定理實現圖像的無損壓縮,同時使用混沌系統實現加密。這類算法的加密操作根植于壓縮算法,因此安全性不足。第三種是將壓縮和加密操作聯合起來,文獻[5-7]中,通過對量化后的DCT系數的進行置亂和代換操作實現加密,但是其加密操作破壞了DCT系數原有的分布規律,導致后續的編碼量增加,算法壓縮性能下降。基于以上分析,本文提出了一種與JPEG壓縮相結合的圖像加密算法,該算法兼顧了安全性與壓縮性,在安全加密圖像的同時,仍然保證了很好的壓縮性能。
圖1描述了該算法的流程圖。其中直角矩形部分代表JPEG壓縮操作,圓角矩形部分代表加密操作。y0、z0、w0、p是加密算法的密鑰。關于Logistic混沌系統的說明,詳見1.1節。

圖1 算法流程圖
算法流程描述如下:
步驟1讀入BMP格式的明文圖像,以非重疊分塊的形式將圖像分成若干個8×8的子塊。
步驟2由初始值y0迭代出一個混沌序列,將該序列作為置亂算法的控制參數。使用分組合并置亂算法對子塊的RGB分量進行置亂。分組合并置亂算法詳見1.2節。
步驟3對置亂后的圖像進行正常JPEG壓縮,在完成DCT變換和量化后,對DC系數和AC系數分別進行置亂,置亂算法的控制參數由混沌初始值z0迭代產生。
步驟4由混沌初始值w0迭代產生一個混沌序列a1,a2,…,an,使用該序列修改DCT系數符號位。修改方法如下式所示:
d=d×(-1)ai
(1)
式中:d代表當前處理的DCT系數值。
步驟5繼續進行后續的編碼操作,完成JPEG壓縮,得到JPEG格式的密文圖像。
解密算法為上述過程的逆過程。
混沌系統是一種非線性的系統,它具有對初始值敏感、偽隨機性強的特點,將混沌系統應用于加密技術,可以形成良好的圖像加密系統[8]。Logistic映射是一種被廣泛應用于圖像加密的混沌系統,其定義公式如下:
xk+1=μxk(1-xk)xi∈[0,1]
(2)
式中:μ為分支參數,對于任意一個初始值x0∈[0,1],都可以通過不斷迭代產生一個序列x1,x2,…,xn,當3.569 945 6<μ≤4,該序列將處于混沌狀態[9],可以將該序列用于加密系統中。
混沌序列的隨機程度會直接影響到加密算法的安全性。為了驗證混沌序列的隨機性,本文使用美國國家標準和技術研究院提供的統計測試軟件包對混沌序列進行測試。該軟件包中有15項測試,每項測試均使用P-value來表示測試結果。其測試原理是建立在假設檢驗的基礎上,對于每一個測試項,給定一個顯著性水平α,α∈[0.001,0.01],然后計算出P-value的值,若P-value值大于α,則認為序列是隨機的[10]。設定混沌初始值x0=0.23,分支參數μ=4.0,對Logistic映射產生的序列進行測試,其中顯著性水平α設定為0.005。實驗結果如表1所示,可以看到所有測試項的P-value值均大于顯著性水平α,這說明Logistic映射產生的混沌序列具有很強的偽隨機性。

表1 Logistic混沌序列隨機性測試結果
由于Logistic映射產生的混沌值均在0到1之間,使用時需要進行變換,變換公式如下:
ri=xi×106%N
(3)
式中:xi為原始值,ri為變換后的值。該變換將區間[0,1]中的值映射到區間[0,N-1]中。
本文的置亂算法是基于分組合并思想提出的一種簡單線性變換,該算法實現簡單,運算速度快,適合對圖像這種密集型數據進行運算。其置亂原理如下:

(4)
式中:Gi表示第i組子序列。將分組后的子序列重新合并為S′=G1,G2,…,Gk。
經過上述變換后,序列S中的第i個元素xi變成了序列S′中的第i′個元素xi′,兩者的映射關系為:
(5)
式中:%、 、 、min分別表示取余數、向下取整、向上取整和求最小值。該置亂變換為一對一映射,且可逆,k是算法的控制參數,加密過程中k的值由混沌系統產生,以此保證置亂過程的隨機性。使用該算法對圖像子塊的RGB分量置亂時,可以將一行或一列圖像子塊看作一個序列S。序列中的元素為圖像子塊。同理,對DC系數和AC系數進行置亂時,是將每個子塊的DC系數或AC系數看作序列中的元素。
為了獲得更好的置亂效果,每行的元素序列使用不同的k值進行置亂,在行方向上完成置亂后,用同樣的方法在列方向上進行置亂。由于不同序列之間不存在數據共享,因此可以利用GPU的多線程對置亂過程進行并行處理,即同時開啟多個線程,每個線程負責處理一個序列的置亂,多個線程并行置亂,大幅提升運算速度。
為了驗證本文算法的加密效果,在個人電腦上進行了仿真實驗。具體實驗環境:Intel Core i5 CPU,主頻3.1 GHz,4 GB RAM,GPU為GeForce GTX 760。算法在Visual Studio 2015平臺下運行。實驗中用到的圖像均來自于南加州大學信號與圖像處理研究所(USC-SIPI)圖像庫[10]。設定y0=0.23,z0=0.35,w0=0.58,p=4.0,將它們作為密鑰輸入混沌系統,分別對圖像Baboon和Peppers進行加密,同時設定壓縮過程中的質量因子Q=50。圖2為實驗結果,可以看到加密后的圖像已經看不出原始圖像的任何信息,圖像信息被完全隱藏。為了對加密效果進行量化評價,本文使用以下指標來比較明文圖像與密文圖像之間的差距。

(a) Baboon明文(b) Baboon密文

(c) Peppers明文(d) Peppers密文圖2 加密效果圖
峰值信噪比用于衡量兩幅圖像之間的差異大小,差別越大,PSNR值越小。通過計算原始圖與加密圖的PSNR值來量化兩者之間的差異,PSNR值越小說明加密效果越好。PSNR的計算公式如下:
(6)
(7)
式中:L代表每個采樣值的比特數,圖像中用8比特表示一個顏色分量,因此這里L=8,m和n分別為圖像的長和寬,p(i,j)和c(i,j)分別為明文圖像和密文圖像在(i,j)位置處的像素值。當PSNR<20時,意味著密文圖像變得完全不可辨識。經過實驗計算,Baboon圖像的PSNR為11.382 1,Peppers圖像的PSNR為10.995 1,說明明文與密文之間的差別很大,算法具有很好的加密效果。
通常,原始圖像中的相鄰像素是高度相關的,良好的圖像加密算法應該有效降低這種相關性。本文使用相關系數對像素相關性進行量化評估。相關系數的計算公式如下:
(8)
(9)
式中:E(x)和D(x)分別表示x的均值和方差,n代表像素點的個數。
實驗中,我們從Baboon圖像的明文和密文中各自選取了2 000對像素點,分別計算這些像素點的RGB分量在水平、垂直和對角線方向上的相關系數。表2展示了Baboon圖像的明文與密文中R分量相鄰像素的相關系數,圖3為加密前后的相鄰像素分布情況。可以看出,明文圖像中的像素點高度相關,加密后其相關性大幅降低,這說明本文算法能夠有效降低圖像中相鄰像素的相關性。

表2 Baboon圖像R分量相鄰像素相關系數

(a) 加密前(b) 加密后圖3 加密前后圖像中相鄰像素分布
本文算法在加密過程中,充分考慮到壓縮性能,以圖像子塊為單位進行置亂不會影響JPEG壓縮流程,對DC系數和AC系數分別進行置亂,使DCT系數的分布規律被保留下來,不會使后續編碼量增加。為了驗證算法壓縮性能,本文對USC-SIPI圖像庫中的209幅圖像分別進行直接壓縮和加密壓縮,比較兩種操作后的圖像大小。實驗結果表明加密壓縮后的圖像與直接壓縮的圖像相比,圖像大小平均增加約10%,這說明本文算法對壓縮操作影響很小,算法具備良好的壓縮性能。表3列舉了部分實驗結果。

表3 直接壓縮和加密壓縮后的圖像大小
本文算法中的加密操作主要是分塊的置亂和DCT系數的置亂以及符號位的修改,沒有復雜的邏輯運算,加密速度快,耗時少。為了驗證算法的速度性能,對圖像庫中的209幅圖像進行JPEG壓縮后使用AES算法加密,比較該操作的耗時與本文算法的耗時。實驗中,分別統計了不同尺寸的圖像在兩種操作下的平均耗時,結果如圖4所示。可以看出本文算法可以大幅減少加密壓縮耗時。

圖4 不同尺寸的圖像加密和壓縮耗時
本文算法分別在空域和頻域對圖像進行了加密操作,整個加密過程由Logistic混沌系統控制,混沌系統對初始值敏感以及隨機性強的特性保證了加密的安全性。下面將從密鑰空間和密鑰敏感性兩個方面做進一步說明。
2.5.1密鑰空間
密鑰空間是評價一個加密算法安全性的重要指標,一般而言,密鑰空間越大,加密算法就越安全。本文算法中的密鑰包括y0、z0、w0、p,密鑰空間的大小取決于這4個參數的組合數量。由于它們都是十進制浮點數,根據IEEE浮點運算標準[11],64位雙精度數的計算精度為,因此這4個參數組成的密鑰空間大小為252×252×252×252=2208,可以看出這個密鑰空間已經足夠大,可以有效應對窮舉攻擊。
2.5.2密鑰敏感性
本文算法的密鑰為混沌初始值,由于混沌系統對初始值敏感,初始值的微小改變會使迭代后的混沌序列完全不同。這使得本文算法具有很強的密鑰敏感性。為了驗證,使用密鑰k=(0.25,0.38,0.67,4.0)對Lena圖像進行加密,然后用4組發生微小改變的密鑰分別去解密該圖像,這4組密鑰分別為:
k1=(0.26,0.38,0.67,4.0)
k2=(0.25,0.39,0.67,4.0)
k3=(0.25,0.38,0.66,4.0)
k4=(0.25,0.38,0.67,3.99)
圖5是實驗結果。可以看出,雖然每組解密密鑰都只發生了微小的改變,但是解密結果卻與正確圖像相差甚遠,這說明算法具有很強的密鑰敏感性。

(a) 使用密鑰k的加密圖(b) 正確密鑰解密圖

(c) 使用密鑰k1的解密圖(d) 使用密鑰k2的解密圖

(e) 使用密鑰k3的解密圖(f) 使用密鑰k4的解密圖圖5 錯誤密鑰解密圖
本文基于混沌系統,提出了一種與JPEG壓縮相結合的圖像加密算法。該算法首先在空域對圖像分塊進行置亂,然后在頻域進行了DCT系數的置亂和符號位的隨機修改,整個加密過程被很好地嵌入到JPEG壓縮流程中。理論分析和仿真實驗表明,該加密算法密鑰空間大、密鑰敏感性強,具有很高的安全性,同時加密后的圖像仍然保持了很高的壓縮比,對原有的壓縮操作影響很小,能充分滿足對圖像同時進行壓縮和加密的要求。