鐘 鳴 劉建東 劉 博,2 劉玉杰 李 博
(北京石油化工學院信息工程學院 北京 102617) 2(北京化工大學信息科學與技術學院 北京 100029)
信息技術的迅速發(fā)展使得傳統(tǒng)單機無法滿足對大量數(shù)據(jù)進行快速計算處理的要求,而大數(shù)據(jù)技術的興起為處理大量數(shù)據(jù)提供了新的方式,使用大數(shù)據(jù)技術可以輕易掌握并處理龐大的信息數(shù)據(jù)集[1-3]。常見的大數(shù)據(jù)平臺有很多種,其中,Spark是一種混合式計算框架,可以進行批處理和流處理,能夠快速實現(xiàn)對大數(shù)據(jù)的并行處理。其繼承了主流大數(shù)據(jù)平臺所具有的優(yōu)點,同時在計算速度和工作負載等方面又表現(xiàn)得更加優(yōu)秀。這些平臺為用戶提供了有效的大數(shù)據(jù)處理手段,但缺少了對于數(shù)據(jù)安全性問題的關注,如何保證這些數(shù)據(jù)集在傳輸和存儲時的安全性也逐漸成為人們關注的一個熱點問題[4-6]。
混沌系統(tǒng)對狀態(tài)變化反饋極度敏感,導致系統(tǒng)變化呈現(xiàn)偽隨機狀態(tài),且系統(tǒng)運行的軌道難以控制,這在一定程度上符合了密碼學的相關要求,從而衍生出混沌密碼。不同于其他密鑰生成方法,通過對混沌系統(tǒng)進行迭代計算就可以得到滿足要求的偽隨機序列,可用作對圖像進行加密的密鑰。目前,基于混沌系統(tǒng)設計的圖像加密方案較多,但很少有將其與Spark大數(shù)據(jù)平臺結合進行研究的相關文獻,且對于大數(shù)據(jù)平臺與混沌系統(tǒng)相結合的加密研究多采用了Hadoop平臺。文獻[7]設計了一種高維度且離散的超混沌系統(tǒng),同時采用閉環(huán)耦合控制和密文反饋的思想設計了一種基于Hadoop大數(shù)據(jù)平臺中MapReduce并行加密的算法,具有良好的實現(xiàn)效率。文獻[8]基于改進后的Logistic映射和Tent映射組成的雙混沌系統(tǒng)設計了加密算法,這一雙混沌系統(tǒng)的MapReduce并行編程能夠安全高效地對數(shù)據(jù)進行加密。文獻[9]針對Hadoop平臺設計了一種改進對稱密鑰算法,該算法在私鑰基礎上加入了動態(tài)密鑰,使用了雙密鑰機制,提高了安全性,同時Hadoop平臺的讀寫機制也提高了算法的運行效率。
目前將大數(shù)據(jù)平臺結合混沌系統(tǒng)的加密方法還存在著一定的不足。首先,在混沌系統(tǒng)的選取方面,部分方法采用的混沌系統(tǒng)性能不佳,低維系統(tǒng)無法快速生成多條偽隨機序列,而高維生成的偽隨機序列間獨立性不夠,使得加密效果大打折扣。其次,對大數(shù)據(jù)平臺處理數(shù)據(jù)的方式理解不到位,沒有充分發(fā)揮大數(shù)據(jù)平臺能夠并行處理大量數(shù)據(jù)的優(yōu)勢,導致單機計算時間和大數(shù)據(jù)平臺計算時間之間差異較小,加密效率提升不明顯。對于上述問題,本文提出一種基于Spark大數(shù)據(jù)平臺和三維動態(tài)整數(shù)帳篷映射的加密算法。該算法采用三維動態(tài)整數(shù)帳篷映射作為偽隨機序列發(fā)生器,可以快速生成多條獨立性較強的序列。利用Spark大數(shù)據(jù)平臺將圖像數(shù)據(jù)切片,利用生成的偽隨機序列作為密鑰分別對每片數(shù)據(jù)進行加密,最后將得到的數(shù)據(jù)塊進行整合分析。分析表明,采用Spark大數(shù)據(jù)平臺進行多圖片加密操作,可以發(fā)揮出其并行高效的特點,加密得到的密文圖像具有一定的安全性。
帳篷映射定義為:
(1)
相對于Logistic映射難以遍歷整個取值空間的缺陷,帳篷映射可以通過對數(shù)值的不斷拉伸折疊將其限制在取值空間,并遍歷取值空間,性能更加優(yōu)秀。
通過擴展空間維度、增加計算精度、施加動態(tài)擾動可構建三維動態(tài)整數(shù)帳篷映射,表述為:
F:a(xi+1,yi+1,zi+1)=
(2)
該系取值空間為:
針對定義中參量gi、hi和si作如下表述:
(3)
式中:mi、ki和vi為動態(tài)參數(shù),對定義于整數(shù)域空間的三維動態(tài)整數(shù)帳篷映射進行動態(tài)擾動;At表示隨三維系統(tǒng)的迭代時間以及迭代得到的偽隨機序列值,矩陣A對每行和每列做幻方變換,變換結束后僅取某一列向量,并表示為At,t=1,2,3。
矩陣A表示為:
(4)
對其進行幻方變換的過程可根據(jù)上一次迭代計算得到的x、y、z值來指定分別對每行和每列做循環(huán)位移,若值為奇數(shù)則每行每列循環(huán)左移,為偶數(shù)則每行每列循環(huán)右移。通過幻方變換并去某一列,從而將輸出的值重新代入到迭代方程中,構成環(huán)形耦合。三維動態(tài)整數(shù)帳篷映射如圖1所示。
圖1 三維動態(tài)整數(shù)帳篷映射
通過擴展維度可以將帳篷映射擴展至三維,增加運行混沌系統(tǒng)獲得的序列數(shù)。增加精度可以擴大混沌系統(tǒng)的取值空間,增加取值的隨機性。將帳篷映射由實數(shù)域轉換至整數(shù)域進行計算會較快地產(chǎn)生短周期現(xiàn)象,可以通過施加動態(tài)擾動避免短周期影響。
Spark大數(shù)據(jù)平臺架構如圖2所示,其中,任務控制節(jié)點負責構造任務執(zhí)行的入口,并將其標注為SparkContext。任務進入后,需要集群資源管理器根據(jù)任務量進行資源的調度分配,并根據(jù)任務要求選擇合適的模式工作,控制工作節(jié)點以及執(zhí)行進程占有計算資源并進行任務處理。
圖2 Spark大數(shù)據(jù)平臺架構
Spark進行數(shù)據(jù)處理的基礎是RDD。RDD有分區(qū)特性,可以分布于集群中的各個節(jié)點上,支持并行計算。Spark對RDD的Transformation操作采用了惰性操作,對于RDD的轉化不會立刻執(zhí)行,只有在調用Action操作執(zhí)行數(shù)據(jù)操作時才會進行計算,有效節(jié)約了計算資源。在需要對數(shù)據(jù)進行多次操作時,也可以使用內置方法將RDD持久化,避開惰性機制,提高運行效率。
Spark針對Hadoop平臺磁盤IO開銷大、MapReduce操作時延高等問題進行了優(yōu)化設計。為了降低磁盤的IO開銷,Spark將數(shù)據(jù)塊盡可能存放于內存,減少每次計算后將數(shù)據(jù)寫入磁盤的次數(shù)。此外,Spark在實現(xiàn)Hadoop MapReduce操作的基礎上,還提供了各種便捷的API,便于進行數(shù)據(jù)塊操作,簡化了Hadoop中Map操作和Reduce操作的編程,縮減了整體的代碼量。此外,Spark平臺支持多種編程語言,可以運行于獨立的集群,也可以運行于Hadoop等生態(tài)環(huán)境中,同時能夠讀取HDFS、HBase等多種數(shù)據(jù)源,具有較強的靈活性[11-13]。
采用三維動態(tài)整數(shù)帳篷映射作為偽隨機序列生成器,結合Spark大數(shù)據(jù)平臺處理數(shù)據(jù)的特點,設計一種彩色圖像加密方案,流程如圖3所示,其中主要包括了三維動態(tài)整數(shù)帳篷映射生成偽隨機序列、圖像RGB分量異或運算、Arnold置亂、DNA編碼混淆?;赟park的加密算法操作流程如圖4所示,主要包括了明文圖像分片成為RDD數(shù)據(jù)集、map函數(shù)對數(shù)據(jù)塊進行加密操作、數(shù)據(jù)塊合成密文圖像三個部分。
圖3 基于三維動態(tài)整數(shù)帳篷映射的加密算法流程
圖4 基于Spark平臺的加密算法流程
根據(jù)圖4,基于Spark平臺和三維動態(tài)整數(shù)帳篷映射的加密算法具體流程表述如下:
1) 在準備階段,創(chuàng)建Spark應用程序接口SparkContext,讀取待加密明文圖像L,同時利用三維動態(tài)整數(shù)帳篷映射運行兩次,生成長度為M×N的偽隨機序列X1、Y1、Z1、X2、Y2、Z2,M×N為明文圖像L的大小。
2) 在分片階段,創(chuàng)建RDD數(shù)據(jù)集合,使用Spark中的parallelize函數(shù)對明文圖像進行分片,為了充分利用Spark集群并行處理數(shù)據(jù)的特性,提高運行的效率,可以設置數(shù)據(jù)分片數(shù)目為h,h為集群中Executor的數(shù)目,每片中包含的像素點數(shù)為b。
數(shù)據(jù)分片操作如下:
輸入:明文圖像L。
輸出:明文圖像L的RDD。
RDD←parallelize(L,h)
3) 在圖像加密階段,使用map函數(shù)實現(xiàn)對RDD數(shù)據(jù)的并行處理。輸入量為分片處理后得到的RDD數(shù)據(jù)集,使用偽隨機序列X1、Y1、Z1對應每塊數(shù)據(jù)中RGB各通道的像素點LRj、LGj和LBj做異或運算,得到中間密文CRj、CGj和CBj,其中,j=1,2,…,h,對應了分片后得到的RDD數(shù)目。
對中間密文CRj、CGj和CBj中的像素點及偽隨機序列X2、Y2、Z2做任意一種DNA編碼,編碼規(guī)則如表1所示。
表1 DNA編碼規(guī)則
針對每個像素點和偽隨機序列數(shù),按照一定的規(guī)則從DNA加法、DNA減法、DNA異或中取一種方法進行計算,計算遵循二進制計算規(guī)則,結果僅保留最后兩位。以表1中第一種規(guī)則為例,DNA加法、DNA減法、DNA異或的計算結果如表2至表4所示。
表2 規(guī)則1做DNA加法
表3 規(guī)則1做DNA減法
表4 規(guī)則1做DNA加異或
對經(jīng)過DNA編碼處理的做DNA解碼獲得像素點數(shù)值,對每個像素點分解出八個位平面,對位平面中的每個比特位使用Arnold映射進行置亂,Arnold映射定義如下:
(5)
式中:參數(shù)x和y表示比特位的坐標值;x′和y′表示原比特位坐標值經(jīng)過Arnold映射變換后得到的新比特位坐標值;p和q為參數(shù),可以從對應的X、Y、Z序列中任意取值為p和q賦值。
經(jīng)過map函數(shù)中的異或運算和Arnold映射置亂后,得到結果,輸出量為加密操作后得到的RGB各通道的密文矩陣。
RDD數(shù)據(jù)map操作如下:
輸入:明文圖像L的RDD。
輸出:圖像L各密文通道的RDD。
(LRj,LGj,LBj)←split(RDD)
fori=1;i≤b;i++ do
forj=1;j≤h;j++ do
CRj(i)=X1(i)?LRj(i)
CGj(i)=Y1(i)?LGj(i)
CBj(i)=Z1(i)?LBj(i)
end
end
(X2(i)′,CRj(i)′)←DNA(X2(i),CRj(i))
(Y2(i)′,CGj(i)′)←DNA(Y2(i),CGj(i))
(Z2(i)′,CBj(i)′)←DNA(Z2(i),CBj(i))
forj=1;j≤h;j++ do
ifX2(i)′%3=0 then
RDD←Arnold(CRj(i)′+X2(i)′)
else ifX2(i)′%3=1 then
RDD←Arnold(CRj(i)′-X2(i)′)
else ifX2(i)′%3=2 then
RDD←Arnold(CRj(i)′?X2(i)′)
ifY2(i)′%3=0 then
RDD←Arnold(CGj(i)′+Y2(i)′)
else ifY2(i)′%3=1 then
RDD←Arnold(CGj(i)′-Y2(i)′)
else ifY2(i)′%3=2 then
RDD←Arnold(CGj(i)′?Y2(i)′)
ifZ2(i)′%3=0 then
RDD←Arnold(CBj(i)′+Z2(i)′)
else ifZ2(i)′%3=1 then
RDD←Arnold(CBj(i)′-Z2(i)′)
else ifX2(i)′%3=2 then
RDD←Arnold(CBj(i)′?Z2(i)′)
end
map操作中,split為數(shù)據(jù)分片,RDD表示明文或密文的彈性數(shù)據(jù)分布集,Arnold表示將加密像素點的每個位平面的比特位進行位置變換,DNA表示將偽隨機序列和像素點轉二進制后按照從規(guī)則1到規(guī)則8的順序依次做相加、相減和異或的運算,運算法則同表2至表4,最后解碼得到加密像素點。
4) 在輸出階段,調用PIL庫中的fromarray函數(shù)將RDD數(shù)據(jù)處理為矩陣形式,將各分量的矩陣進行合并可以得到密文圖像L′。
Spark平臺安裝于VMware虛擬機中,共搭建了三個虛擬節(jié)點模擬集群效果。其中,兩個節(jié)點作為Worker節(jié)點,用于并行處理明文圖像分塊后得到的Application數(shù)據(jù)塊,另一個節(jié)點既作為Worker節(jié)點處理數(shù)據(jù)塊,還作為Cluster Manager節(jié)點,負責監(jiān)控管理Worker節(jié)點的狀態(tài),控制集群的運行,并獲取各個節(jié)點的資源調度信息。
實驗用物理機使用的處理器為Intel(R) Core(TM) i5-9300H CPU @ 2.40 GHz,物理機的內存大小為8 GB。虛擬機VMware版本為12.5.9,為了在不影響物理機性能的基礎上最大化虛擬機性能,考慮將VMware中的每個虛擬機節(jié)點內存配置為1 GB,處理器個數(shù)設置為1,每個節(jié)點安裝的操作系統(tǒng)版本為64位Linux Ubuntu 16.04.6,JDK采用了JDK1.8,Scala版本為Scala2.11.11,搭載的Hadoop版本為Hadoop2.7.3,使用Spark版本為Spark2.2.0。
對算法使用Python編程實現(xiàn),其中需要調用PIL、numpy、matplotlib庫進行圖像處理。Spark啟動后采用Standalone client模式調用Python程序,相較于Standalone cluster模式,Standalone client模式將任務進程驅動運行在客戶端,便于對程序進行相關操作。
測試數(shù)據(jù)使用aerials標準測試圖像,其中包括了Lena、Peppers、Lake、Baboon等常用于圖像加密測試的圖像,圖像集中單幅圖片大小為768 KB,分辨率為512×512。
在Spark集群中對多幅圖片進行加密處理,記錄處理過程所消耗的時間,同時在單機環(huán)境下對相同數(shù)量的圖片進行加密處理,并記錄所消耗的時間。將兩種不同情況下圖像加密處理所消耗的時間作對比,對比結果如圖5所示。
圖5 不同環(huán)境下圖像加密的時間消耗
可以看出,當需要處理的圖像數(shù)據(jù)量較小時,單機環(huán)境下所消耗的時間與集群并行環(huán)境下所消耗的時間差別很小,運行環(huán)境的差別對加密算法的效率影響很小。當圖像數(shù)據(jù)量逐漸增大到20幅時,Spark并行環(huán)境下處理數(shù)據(jù)所消耗的時間要小于單機環(huán)境下的耗時,兩者的時間差距也逐漸增大到約28 s。當使用分辨率更高、數(shù)據(jù)量更大的圖片進行加密時,集群并行對于加密效率的提升會更加明顯。
設置數(shù)據(jù)分片數(shù)為h=1,2,3,4,研究不同分片數(shù)對運行時間的影響,結果如表5所示。
表5 分片數(shù)對運行效率的影響
由表5可得,當分片數(shù)h取值越接近集群中Executor的數(shù)目,效率的提升越明顯,用時越短,當分片數(shù)取值超過Executor的數(shù)目時,集群運行效率不再有顯著提升。
對密文圖像做NIST隨機數(shù)測試可以判斷密文圖像像素點的隨機程度。若得到的15項測試結果均大于1%,則表明密文圖像像素點總體的隨機性較好,復雜度較高[14]。
利用本文提出的基于Spark平臺和三維動態(tài)整數(shù)帳篷映射的算法對圖像Peppers進行加密,加密效果如圖6所示。對得到的Peppers密文圖像的RGB各通道做NIST測試,測試結果如表6所示。
表6 Peppers密文RGB通道NIST測試
圖6 Peppers明文圖像和密文圖像
由表6可得,明文圖像經(jīng)過Spark并行加密處理后,得到的密文圖像的RGB各通道像素值均可以通過NIST測試,各項測試的P-value值均在1%以上,說明密文圖像具有一定的安全性。
通過圖像直方圖可以分析密文圖像中灰度值的分布情況,進而分析加密算法對圖像的置亂程度,評估密文圖像所包含的信息量。對明文Peppers和密文Peppers的RGB各通道進行直方圖分析,分析結果如圖7至圖8所示。
(a) 明文R分量直方圖
(a) 密文R分量直方圖
可以看出,Peppers明文圖像的直方圖落差較大,說明明文圖像中像素點的分布包含了較多的信息量,不同數(shù)值的像素點分布不均勻。經(jīng)過Spark平臺加密處理后,得到的密文圖像直方圖較為均勻,各個像素點被置亂,明文信息被隱藏到置亂的像素點中。
通過對圖像進行信息熵測試,可以分析圖像的置亂程度。理想的信息熵值為8,計算結果越接近8,圖像整體的混亂程度越高,各像素點的排列越接近于無序[15-16]。信息熵定義為:
(6)
式中:p(Ai)表示序列A中第i個數(shù)出現(xiàn)的頻率。
利用式(6)分別計算Peppers明文圖像和Peppers密文圖像RGB各通道的信息熵值,計算結果如表7所示。
表7 Peppers明文圖像和密文圖像信息熵
分析表7結果,相對于明文圖像,密文圖像的計算結果更趨近于理想值,說明密文圖像達到了理想的置亂效果。
本文提出一種以三維動態(tài)整數(shù)帳篷映射為偽隨機序列發(fā)生器,基于Spark大數(shù)據(jù)平臺運行的混沌并行圖像加密算法。研究的主要目的在于解決大數(shù)據(jù)安全問題,同時提高加密算法的運行效率。實驗研究表明,三維動態(tài)整數(shù)帳篷映射的引入使得密文圖像具有良好的安全性,Spark大數(shù)據(jù)平臺的引入顯著提升了大數(shù)據(jù)量圖像信息的加密效率。
本文方法針對Spark大數(shù)據(jù)平臺的安全問題以及圖像加密的效率問題提出,但不局限于Spark平臺,在Hadoop、Storm等平臺中也有一定的適用性,在海量機密圖像數(shù)據(jù)的高效加密和安全傳輸方面具有一定的應用前景。