潘明華, 王一涵, 谷盛民, 孫紹華
(1.桂林電子科技大學廣西密碼學與信息安全重點實驗室, 桂林 543000; 2.桂林電子科技大學人工智能學院, 桂林 543000)
數字圖像是一種重要的信息獲取方式。隨著互聯網的發展,惡意第三方攻擊可能會使得圖像信息遭受到威脅,尤其可能涉及個人、企業、國家的隱私和財產甚至生存的安全。數字圖像加密是保護圖像信息安全的重要途徑之一,大量的學者和企業投入了相關加密算法的研究。隨著圖像采集設備的迭代更新、大數據的發展以及人們日趨復雜的需求,大規模數字圖像的傳輸引起了廣泛關注。在保證傳輸速率的同時,如何對大批量圖像進行加密傳輸是一個亟需解決的問題。
混沌系統具有對起始參數值敏感、隨機性強、可無限遍歷等特點,其行為表現為不確定性、不可重復、不可預測。因此,基于混沌系統的圖像加密技術成為數字圖像加密領域的常用方法之一[1-3]。例如,Chai等[4]提出基于DNA序列和混沌系統進行圖像加密;Kumar等[5]提出結合二維Logistic映射和Lorenz-Rossler混沌系統的圖像加密;劉思聰等[6]提出二維余弦混沌系統,引入指數和高次冪非線性項構造新型混沌映射。最近發展的量子圖像領域中,Zhou等[7]提出了利用Lorenz系統進行量子圖像加密和解密;劉瀚揚等[8]提出利用量子隨機行走和多維混沌對圖像加密。
圖形處理器(graphics processing unit, GPU)是一種圖像和圖形相關運算工作的微處理器。GPU提供多個并行計算的基礎結構,可以執行海量數據的并行計算;同時,擁有更高的訪存速度和更高的浮點運算能力。隨著GPU性能的不斷提高,GPU已不僅僅運用于圖像、圖形處理[9-10],也廣泛被運用于通用計算中[11-15]。例如,郭良琛等[13]提出利用GPU進行網絡功能虛擬化(network function virtualization, NFV)系統架構的設計和性能優化。胡蓉等[14]提出了一種基于GPU的并行Sinkhorn-WMD算法并通過實驗展示了其顯著的優化性能。丁光耀等[15]提出了面向GPU的模型共享技術,在任務之間共享同一份模型數據,實現了一個支持大規模推理負載的分布式原型系統。
隨著采集設備的迭代更新、大數據的發展與日趨復雜的需求,數字圖像信息的大規模傳輸已成為主流。為了保護這些圖像信息,需要在傳輸前進行批量圖像的高速加密。針對該需求,現設計一種基于Lorenz混沌的線程池與GPU組合優化批量圖像加密算法,為了簡單起見,后續簡稱為組合優化批量圖像加密算法(combinatorial optimization of batch image encryption algorithm,CBIE)。為了檢驗算法性能,將在抵抗暴力攻擊、差分攻擊以及統計攻擊等方面對算法的安全性進行分析,同時對比組合優化前后的圖像讀取和加解密處理的效率進行分析。
Lorenz混沌系統是最早發現的呈現混沌運動的耗散系統,其動力學方程為
(1)
式(1)中:α、β、ρ為3個正實數,代表Lorenz系統參數。
參數的選擇對系統是否進入混沌狀態起著重要的作用。一般地,取α=10、β=8/3,將ρ作為變量且當ρ>24.74時,Lorenz系統進入混沌狀態。當ρ=28時,Lorenz系統進入理論最佳混沌狀態;此時只要給系統x、y、z設定一個初值,對t進行指定步長的迭代就能不斷生成關于x′、y′、z′的混沌序列。
安全性是評估一幅加密圖像效果的關鍵指標。主要評估加密后的圖像在受到異常攻擊時的對抗能力。下面介紹抵抗差分攻擊和統計攻擊中常見的指標[1]。
1.2.1 差分攻擊
差分攻擊是指攻擊者對原始明文圖像I0進行細微的改變得到改變后的圖像I1,利用加密算法生成相同的秘鑰,對圖像I0和I1加密得到密文圖像C0和C1,找出原始兩者之間的關系,利用這種關系找到攻擊圖像加密方案的線索,從而對密文圖像進行破解。抗差分攻擊性能依賴于對明文的敏感性,對于數字圖像,靈敏度的評估通常采用兩個參數:像素數變化率(number of pixels change rate, NPCR)和統一平均變化強度(unified average changing intensity,UACI)。NPCR和UACI分別表示兩幅密文圖像之間的變化像素數和平均變化強度數,它們的定義分別為
(2)
(3)
式中:M和N分別為兩幅隨機圖像的寬度和高度;D(i,j)為兩幅圖像在二維坐標(i,j)上的像素值距離;C0(i,j)和C1(i,j)分別為原圖像和改變后圖像在坐標點(i,j)的像素值。如果改變圖像的某個像素值引起密文圖像的大改變, 則說明該算法抵御差分攻擊能力較強。
1.2.2 統計攻擊
一般而言,一幅數字圖像的像素信息分布是呈規律化的。利用統計規律的攻擊方案稱為統計攻擊,是最常見的數字圖像攻擊方法之一。攻擊者對截獲的密文圖像進行統計分析,總結出其統計規律,并與明文的統計規律進行比較,從中提取明文圖像和密文圖像之間的變換關系,以達到攻擊加密方案的目的。常用的數字圖像統計學分析法包括直方圖分析、像素相關性分析、信息熵分析等。
(1)直方圖分析。數字圖像的直方圖是圖像在強度的分布,即像素取值分布圖,通常取值為[0, 255]。直方圖能夠直觀地反映該圖像像素的分布情況。對于一幅RGB彩色圖像,可以通過觀察其在R、G、B三通過像素的分布情況。為了抵抗統計攻擊,圖像加密后的直方圖分布應該完全不同于明文圖像的直方圖,并且是均勻的。
(2)相關性分析。相關性分析是指對具備相關性的變量元素進行分析,從而衡量變量之間的相關密切程度。當圖像相鄰像素之間存在著很高的相關性時,一個像素往往會泄露其周邊像素的信息,攻擊者可以利用此特性推理出下一個像素的灰度值,從而實現對整個明文圖像的恢復。因此,密文圖像的相關性必須降低,以避免統計攻擊。對一幅總像素為N的圖像,其相關性計算公式為
(4)
(5)
(6)
(7)

根據式(4)可知相關性Rxy∈[-1,1],1表示兩者完全線性相關,-1表示兩個變量完全負相關,0表示兩個變量不相關。因此,密文圖像相關性越接近于0,則說明加密算法越好。
(3)信息熵分析。信息熵是度量隨機性的一個重要參考指標,可以用來衡量圖像的隨機性,反饋圖像內容的混亂程度。信息熵越大則圖像混亂的程度就越大,越能抵抗統計攻擊。信息熵計算公式為
(8)
式(8)中:xi為像素值;p(xi)為對應像素值出現的概率。
根據信息論最大熵理論,各灰度值等概率時獲得最大熵。因此,對于灰度級數為L的圖像,加密后的理想熵值為log2L。
CBIE算法基于Lorenz混沌和鏡像變換進行加密,結合線程池與GPU組合優化實現批量圖像加密。整個算法框架如圖1所示,主要包括基于線程池的批量圖像讀取、批量圖像變換、批量圖像分塊及打包、基于Lorenz系統的批量混沌序列生成和基于GPU并行優化的批量加密等模塊。

圖1 組合優化批量圖像加密框架Fig.1 The framework of combinatorial optimization of batch image encryption
為了對批量圖像進行加密處理,必須先讀取圖像。由于數字圖像本身像素比較高,批量圖像的讀寫更是耗費大量的時間。對于大批量的圖像,每一幅圖像都可以看成是獨立的任務,可以采用多線程任務來執行。但是線程的創建和銷毀也是需要時間消耗的,當批量圖像的數目較多時,浪費在線程創建和銷毀的總時間也是一個不可小覷的。因此,采取線程池的方式使得多任務同時進行,采取異步輸入/輸出(Input/Output, I/O)的方法提高系統的讀寫性能。
利用CPU多核特性,采用線程池結構對讀寫任務優化,提高算法圖像讀取的效率。線程池包括任務隊列、空閑線程隊列和忙碌線程隊列。為了減少線程創建與銷毀的時間開銷,利用線程池對象創建時構造若干個線程,在對象銷毀前這些線程可以復用到各類任務上。
線程池的作用是維護一個任務隊列,其工作方式是在創建時構造指定的空閑線程隊列,若任務隊列有任務進入且線程池有空閑線程,則分配一個空閑線程去執行任務隊列的任務,直到該任務執行結束之前這個線程都不會處于空閑狀態,如此反復直到任務隊列里沒有任務需要處理。對于所有待處理的圖像讀寫任務全部分配到線程池的任務隊列里,此時只要任務隊列不空,那么線程池會一直利用空閑線程去處理隊列中的任務,直到任務隊列為空時整批圖像的讀寫任務完成,從而實現批量數字圖像讀寫性能的優化。
為了提高圖像加密效果,對用戶輸入的大批量數字圖像進行鏡像變換。在這里,采用的是水平鏡像變化。考慮大批量的圖像處理,為了合理利用線程池,首先對輸入的批量圖像進行分批。
n=N/t
(9)
式(9)中:n為每批次的圖像數量;N為批量圖像總數;t為線程池中空閑線程數。
然后,對于每批的圖像采用輪循機制異步讀取,在讀取任務完成后立刻對圖像進行水平鏡像變換,變換過程為
(10)
式(10)中:x、y和x0、y0為變換前、后的像素坐標;w為圖像的寬。
考慮實際的數字圖像可能像素尺寸極大,尤其是彩色圖像具有3個通道,那么其總像素數據量可能非常龐大的。因此,考慮對尺寸極大的圖像進行分塊,這樣既能降低混沌序列的儲存量,也能提高混沌序列的生成速度,同時更是為后續的性能優化提供了可能。
提取經過預處理后的批量圖像M(m1,m2,…)進行圖像分塊及數據打包。分塊及打包的過程如圖2所示,具體分塊的步驟如下。

圖2 基于線程池的圖像分塊及打包Fig.2 Image partitioning and packaging based on thread pool
(1)對于每一個圖像m,計算圖像大小S=wh,其中w和h為圖像的高和寬。
(2)分塊判斷。當S≥T0時進行分塊,其中T0是分塊閾值。對需要分塊的圖像,將其拆分成四等塊獨立的圖像,即分塊后每一塊圖像的寬與高值分別為
(11)
式(11)中:j=1,2,3,4。
(3)繼續進行分塊檢測直到滿足分塊圖像尺寸小于閾值T0。對于每一個圖像m,最終得到拆分后的像素矩陣m(u0,u1,u2,…)。
(4)圖像計算塊打包。對于每一個圖像m采用Vector>的數據結構,其中List是由圖像矩陣組成的鏈表,作為一個最小單位計算包。最后將打包好的數據存入圖像數組中,方便后續采用GPU優化進行并行處理。
根據1.1節Lorenz動力方程式(1)進行迭代生成混沌序列。設定系統常量,使得Lorenz混沌系統進入最佳的混沌狀態,即取α=10,β=8/3,ρ=28。然后,隨機選取3個初值,以0.01的步長進行迭代畫出生成的混沌序列如圖3所示。考慮彩色圖像的R、G、B三通道,每一輪的混沌序列迭代生成3組混沌序列。最后,將所有的混沌序列寫入TXT文本文件進行儲存用于后續的圖像加密,至此一輪混沌序列生成完成。

圖3 混沌圖Fig.3 Chaos figure
除了讀寫優化之外,批量圖像加解密的效率是關鍵。GPU作為圖形處理器,在處理大批量矩陣計算上的效率遠遠高于CPU,因此引入GPU來加速批量圖像的加解密處理過程。利用GPU進行處理時,必須考慮算法執行的順序以及數據的打包,否則可能導致大量時間被浪費于CPU和GPU的數據通信上。因此,需要進行批量圖像加密任務串并行拆分,再進行GPU異步計算加速。
2.5.1 串行下的計算數據打包
為了對批量圖像加密進行并行化處理,在利用線程池完成所有圖像的鏡像變換和分塊任務后,需要將原本串行執行的圖像像素矩陣與混沌序列做異或運算過程進行計算數據的打包,統一組成一個的矩陣計算數組傳給GPU進行大批量的并行異或運算。
考慮一幅圖像的矩陣計算數據作為一個計算包,那么批量圖像的矩陣運算需要一個數組Vector>存儲若干個計算機包,方便GPU進行批量計算,其中u代表前述中的最小計算塊。
2.5.2 GPU異步計算加速
對已打包圖像分塊數據采用GPU并行計算,具體如下。
(1)構造若干個核函數fun_k(Matu, MatL),其中L是2.4節中基于Lorenz混沌系統產生的混沌序列。
(2)利用GPU編程技術對圖像分塊處理得到數據進行加密,執行F(fun_k(u0,L0),fun_k(u1,L1), fun_k(u2,L2)…)進行并行批量圖像混沌加密,采用的加密方式為
P′i,j=Pi,j⊕Li,j
(12)
式(12)中:P′為密文像素的值;P為明文像素的值。如此,只需將存放對應批量圖像的矩陣數組作為計算包數據與混沌序列進行異或即可完成批量的并行計算。
為了對所設計的批量圖像算法進行評估,對算法的加密安全性和效率進行性能測試,包括利用直方圖、相關性、信息熵等進行分析。
3.1.1 暴力攻擊
密鑰空間是所有可能的生成密鑰集合,密鑰空間的大小影響著加密系統能否被暴力破解。為了應對暴力枚舉攻擊當,一個良好的加密系統的密鑰空間必須足夠大。CBIE的加密密鑰采用Lorenz系統生成的隨機值作為初始密鑰,由隨機生成的3個自定義擴展高精度浮點數表示。自定義擴展高精度浮點數由2個bit數組組成,分別代表小數點前的整數部分和小數點后的小數部分表示,其中整數部分由32位bit組成,小數部分由16位bit組成,總共可以代表248種數。因此,枚舉所有密鑰為
Key=248×248×248=2144
(13)
這即使使用現代高性能計算機,要暴力枚舉上述所有密鑰需要大約248×1 021年。由此可見,CBIE算法能夠抵御任何形式的暴力攻擊。
3.1.2 差分攻擊
密鑰敏感強度測試可以通過修改密鑰K中的某一位得到K′,利用兩個密鑰加密同一張圖像得到C0和C1。根據式(2)和式(3),隨機選取圖像進行測試。式(2)中兩幅圖像在坐標(i,j)的像素值距離D(i,j)的計算方式有多種,實驗計算中采用的計算方式為
(14)
即當兩幅圖像在坐標(i,j)的像素值不同時,D(i,j)=1;當像素值相同時,D(i,j)=0。在此約定下,NPCR和UACI的理想值分別為NPCR=99.609 4%和UACI= 33.463 5%。通過計算兩幅圖像的NPCR和UACI,如果計算值越接近理想值,則說明加密算法的密鑰敏感度越強,加密算法抗差分攻擊能力越強。
經過對100張隨機圖像進行測試,得到它們在R、G、B三通道上平均的NPCR和UACI實驗結果如表1所示,其中平均NPCR在95%~98%,UACI在30%~32%。CBIE算法加密后,像素變化率和像素平均變化強度距理想值略有差距,由此可見CBIE算法有良好的抗差分攻擊能力。

表1 隨機100幅圖像的NPCR和UACITable 1 NPCR and UACI of 100 images for random
3.1.3 統計攻擊
實驗中隨機選擇的數字圖像如圖4(a)所示,經過CBIE算法加密后得到結果如圖4(b)所示,對比兩者可以看出加密后的圖像已無法分辨原圖。為了測試加密后圖像對抗統計攻擊的能力,對明文和密文圖像進行直方圖、像素相關性和信息熵分析。

圖4 明文圖像和其密文圖像Fig.4 Plaintext image and its ciphertext image
1)直方圖分析
對圖4的明文和密文圖像分別進行直方圖分析,所得結果如圖5和圖6所示。可見,明文圖像的彩色圖像直方圖和R、G、B三通道像素直方圖具有較為明顯的特征,而密文圖像的各直方圖則幾乎是均勻的,無明顯特征。

圖5 明文圖像直方圖Fig.5 Histograms of plaintext image

圖6 密文圖像直方圖Fig.6 Histograms of ciphertext image
2)像素相關性分析
根據1.2.2節介紹,利用式(4)~式(7)分別計算圖像在水平、垂直和對角線方的相關系數。對彩色圖像圖4(a)進行加密,然后計算加密前后兩幅圖像R、G、B三通道的各像素之間的相關性,得到的相關性結果如表2所示,同時以水平方向相關性為例,將其圖形化得到結果如圖7和圖8所示。加密前的明文圖像各通道分量的像素相關性均大于0.95,而加密后的密文圖像各通道分量的像素相關性均小于0.02。由此可見,加密后的密文圖像像素間相關性小,可以有效避免統計攻擊。

表2 圖像及其密文圖像的相關性對比Table 2 Relevance comparison between image and its ciphertext

圖7 明文圖像相關性Fig.7 Relevance of plaintext image

圖8 密文圖像相關性Fig.8 Relevance of ciphertext image
3)信息熵分析
根據1.2.2節,信息熵越大則圖像混亂的程度就越大,對統計攻擊的抵抗力就越強。對于彩色圖像,R、G、B通道的強度值為0~255,因此加密后的理想熵值為8。根據式(8),對于明文圖像和密文圖像分別計算R、G、B三通道的信息熵,得到結果如表3所示。對比表3中數據可以看到,明文圖像各通道信息熵為4.12~6.81,而加密圖像的各信息熵則非常接近最佳抗攻擊理論值8。可見加密算法對統計攻擊具有較好的抵抗能力。

表3 加密前后的信息熵Table 3 Information entropy before and after encryption
3.1.4 噪聲攻擊
在現實世界中,圖像傳輸不可避免地會受到各種因素的影響,如噪聲。因此圖像加密算法必須具有足夠的魯棒性,以抵抗實際場景中的噪聲攻擊。抗噪聲能力是測試加密方案性能的一個重要指標,通過仿真實驗對明文圖像分別添加不同程度的不同噪聲類型,同時對密文圖像添加同樣的噪聲然后再進行解密,進行比較。
最常見的噪聲有高斯噪聲、椒鹽噪聲等。對于前述實驗中對明文圖像4(a)和加密后所得的密文圖像4(b)分別添加均值為零,方差為0.0005的高斯噪聲和5%的椒鹽噪聲,同時對加入噪聲的密文圖像進行解密,所得結果如圖9和圖10所示。對比圖9和圖10發現,加密后的密文圖像在高斯噪聲和椒鹽噪聲攻擊下,解密后的圖像也能保存大部分的有效信息;更重要的是加入噪聲的密文圖像解密后得到的圖像比明文圖像直接受到噪聲干擾的圖像更接近原圖,這說明CBIE加密算法對噪聲干擾具有一定的保護作用。

圖9 高斯噪聲攻擊Fig.9 Gaussian noise attack

圖10 椒鹽噪聲攻擊Fig.10 Salt and pepper noise attack
CBIE結合混沌線程池與GPU組合優化批量圖像加密。而優化前通常采用單線程進行圖像文件的讀寫,單線程執行整個加密算法流程對數字圖像進行批量加密。為了展示組合優化的效率,實驗著重測試了從用戶提交批量數字圖像加密任務之后,將兩者在批量圖像讀取效率和批量圖像加密處理效率上進行比較分析。實驗系統環境為Window10系統,Python3.7、微軟VS2017、基于C/C++的Opencv3.4、CUDA10.0。實驗時分別隨機選取100、200、400、2 000張不同大小的彩色圖像。
3.2.1 批量圖像讀取效率
通過在代碼段打時間戳的方式可以獲得執行到指定段的系統時間戳,通過時間戳做差值計算可以獲得代碼段執行的耗時。算法進程對大批量數字圖像文件進行讀取耗時統計,結果如表4和圖11所示。由此可見,優化前后,讀寫耗時在達到一定數量后均線性增長。采用組合優化后,讀寫時間明顯下降,用時僅為優化前的1/3左右,讀寫效率顯著提高。

表4 批量圖像加密時間Table 4 Batch image reading time

圖11 批量圖像讀寫時間Fig.11 Batch image encryption processing time
3.2.2 批量圖像加解密處理效率
類似于3.2.1節,對大批量數字圖像進行優化前后的批量圖像加解密處理的效率進行統計分析,結果如表5和圖12所示。由此可見,優化前后,批量加解密處理耗時在達到一定數量后均線性增長。同時可以看到,采用組合優化后,批量圖像加解密所需時間顯著下降,處理速率對比優化將提升了將近10倍。

表5 批量圖像加密時間Table 5 Batch image encryption time

圖12 批量圖像加密處理時間Fig.12 Batch image encryption processing time
為了解決大批量圖像讀取和加解密碰到的效率問題,提出了一種基于混沌的線程池與GPU組合優化的批量圖像加密算法(CBIE算法)。算法對大批量數字圖像的讀寫性能進行了優化,并且對加密算法的過程進行串并行拆分,采用線程池對加密任務進行計算打包,然后利用GPU能夠高性能地執行大批量矩陣計算的特點,將打包好后的計算包發送給GPU進行批量異步并行計算。通過分析和實驗得到以下結論。
(1)CBIE算法對批量圖像加密具有很高安全性。通過密碼空間以及利用常見的圖像加密算法評價指標進行分析證明了經過CBIE加密后的圖像具有對抗暴力攻擊、統計攻擊以及噪聲攻擊能力。
(2)CBIE算法顯著提高批量圖像讀寫的效率。對不同批大小的批量圖像進行讀寫性能測試和分析,得出CBIE算法比單線程讀寫速度提升近4倍。
(3)CBIE算法顯著提高批量圖像加密處理的效率。對不同批大小的批量圖像進行加密性能測試和分析,得出CBIE算法對批量圖像加解密圖像處理速度提升近10倍。
因此,所設計CBIE算法能夠滿足大數據時代下的大批量圖像快速加密的安全性和實時性需求。根據實際需要,本算法可以進一步變換加密算法和改進GPU技術,為更多的應用提供有價值的參考。