基于混沌的圖像加密算法的硬件實現(xiàn)

數(shù)字圖像數(shù)據(jù)量巨大,加密工作非常耗時,相比較于傳統(tǒng)的軟件實現(xiàn),硬件電路因其并行高速的優(yōu)點在實時處理中大受歡迎。那么我們今天就給大家介紹一下基于混沌的圖像加密算法是如何通過硬件來實現(xiàn)的。

一、基于混沌的圖像加密算法

1、 Baker映射

Baker映射作為一種基于位置置亂的離散二維混沌映射,是對高度不穩(wěn)定的非線形混沌動力學系統(tǒng)Kolmogorov流離散化的結(jié)果,其定義如下:

(1)對于一個正方形的二維圖像(N×N),首先將圖像在水平方向上分為七個矩形塊,每塊有N×ni個像素,即每個矩形塊長度為ni;

(2)每個矩形塊再分成絕個子塊,由于每個大矩形塊有N×ni個像素,所以再分成ni個子塊后,每個子塊正好有N個像素。

(為了實現(xiàn)上的方便,一般只討論N整除ni的情況,即分成的子塊剛好都成矩形。)

離散Baker映射的公式如下:

基于混沌的圖像加密算法的硬件實現(xiàn)

式中:r,s一像素的列、行值,這里行是自下向上計數(shù),列是自左向右計數(shù);ni—分割圖像時所產(chǎn)生的每一個小矩形塊的長度;Ni前面i-1個小矩形塊的各自長度之和;B(r,s)經(jīng)過Baker映射以后的圖像數(shù)組的列、行坐標。

現(xiàn)將一8×8的數(shù)字方陣進行Baker映射運算如下以透徹展示其置亂效果:

在圖1(a)中,水平方向上分為3個矩形塊,每個矩形塊長度分別為2、4、2,即每塊有16、32、16個像素,每個矩形塊再分成2、4、2個小矩形塊,此時每個小矩形塊里面有8個像素。

_基于混沌的圖像加密算法的硬件實現(xiàn)

Baker映射的這個特點,為我們提供了巨大的密鑰空間。據(jù)統(tǒng)計,一副128×128的圖像,其密鑰空間可以達到2103數(shù)量級n1。

相比較于傳統(tǒng)的基于位置置亂的圖像塊加密方法如貓映射等,其保密性大大加強。如此巨大的密鑰空間,給圖像攻擊者帶來了極大的破解難度。

任取一數(shù)做一說明:如元素37(圖1(a)中s=3,r=4,Ni=2,ni=4),由式1得以B(r,s)(5,3),即37應當搬運到的新坐標為(5,3),從圖1(b)中37的位置可以看出正是(5,3),注意這里行值s=3仍然是自下向上計數(shù),列值r5是自左向右計數(shù)。

由于Baker映射分組的塊數(shù)是任意的,也就是說,理論上可以分成N以內(nèi)任意多塊,只要滿足子塊的長度之和為N即可。

但應當指出的是如果僅憑位置置亂進行圖像文件加密,圖像直方圖不會有任何變化,也就是說加密不能改變圖像灰度的分布情況。那么難以抵抗差分攻擊,取一副只有一個黑點的灰度圖(其余均為白像素),經(jīng)過Baker置亂以后,顯然這個灰度值為0的黑點位置將被惟一確定,不斷改變那惟一的黑像素的初始位置進行多輪加密,便可以知道大量的一一對應的位置關(guān)系,圖像的安全性將大為降低。

基于上述考慮,在位置置亂的同時有必要改變圖像的直方圖,即把每個像素的灰度值逐個與若干個隨機數(shù)進行位運算,以此來達到混淆圖像的目的。

2、Logishc映射

Logistic映射是一種典型的混沌映射,其數(shù)學公式如下:

基于混沌的圖像加密算法的硬件實現(xiàn)

式中:μ∈[0,4]——分支參數(shù),當μ=4時,此時的混沌系統(tǒng)具有遍歷性,序列互相關(guān)為0,映射計算產(chǎn)生的混沌序列結(jié)果經(jīng)過性能測試證明具有優(yōu)秀的隨機性,關(guān)于這一點已有很多文章對其進行論述。

二、硬件設計方案

現(xiàn)場可編程門陣列FPGA是在大規(guī)模集成電路基礎上發(fā)展起來的一種可編程邏輯器件,包含大量的門電路,適合時序邏輯設計,具有很高的速度,而且器件具有用戶可編程特性,因此近年來得到了廣泛的工程應用。

1、加密算法的改進

在ic設計中,工程師往往特別關(guān)注電路實現(xiàn)的面積與速度。同時需要指出的是FPGA作為一種數(shù)字門陣列,在處理加法與移位運算上十分方便,而直接用其計算乘除卻很占用資源,針對Baker映射中大量的乘除運算,可以運用VHDL全部將其轉(zhuǎn)化為移位和相加運算,實驗結(jié)果顯示實現(xiàn)速度得到明顯提高。

從公式(2)可知運算得到的將是浮點小數(shù),采用硬件實現(xiàn)較為復雜,現(xiàn)對其進行改進以適應硬件電路的特點。

當x∈(o,1)時,運算得到的將是在0到l之間的隨機小數(shù),考慮到在實際的圖像加密中需要的密鑰流是0到255的隨機整數(shù),現(xiàn)將O到l之間的隨機小數(shù)擴大256倍后取整,即將公式(2)變形如下:

基于混沌的圖像加密算法的硬件實現(xiàn)

為了硬件實現(xiàn)的方便,這里將本該連續(xù)分布的小數(shù)密鑰流經(jīng)過數(shù)字化的過程轉(zhuǎn)變?yōu)镺到255之間離散分布的整數(shù)密鑰流,于是密鑰周期由原來的無窮大降為了2的8次方,混沌系統(tǒng)出現(xiàn)退化,于是不可避免地造成了保密性的降低。作者按照美國商業(yè)部下屬的國家標準與技術(shù)研究所制訂的FIPS PUB 140-2標準對其進行了質(zhì)量評估,其中的游程測試結(jié)果如表1所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

 

從表中可以看出退化后的混沌系統(tǒng)顯然不再符合密鑰序列質(zhì)量標準。為了解決這一問題,作者這里再提出一種仍然是針對硬件實現(xiàn)的改進方案,即采用定點數(shù)表示小數(shù)的方法來完成,具體方法如下:

首先將初值(純小數(shù))按照“乘2取整”的方法轉(zhuǎn)化為二進制數(shù)據(jù),經(jīng)過計算機模擬試驗表明只要小數(shù)位數(shù)達到32位,那么產(chǎn)生的序列仍未脫離混沌狀態(tài)。因此我們將初值轉(zhuǎn)化為一個32位寬的邏輯矢量然后再參與Logistic迭代,每次迭代的結(jié)果仍然是一個小數(shù),再取高8位輸出就相當于左移了8位(即乘以256),得到的就是一個0到255之間的整數(shù)了,也就是我們所需要的偽隨機序列。同樣對其進行質(zhì)量評估,結(jié)果如表2、表3所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

從表中可以看出,經(jīng)過改進的加密算法符合了FIPS PUB140-2標準。以上兩種方案各有長處,前者計算量不大,速度較快,但保密性打了折扣,后者計算速度較慢,硬件實現(xiàn)面積較大,但可以保證安全性,實際中作者采用了后者。實驗結(jié)果顯示可以讓明文圖像的直方圖得到相當程度的均衡,達到“替換”的目的,如圖5(c)所示。

本文中選取的初始值是禹0.732*256四舍五入后為187,μ=4。經(jīng)過16384次迭代運算產(chǎn)生偽隨機序列,即圖像加密中要使用的密鑰流。

在已經(jīng)生成了符合標準得密鑰流基礎上,為了有效地抵抗選擇明文攻擊,現(xiàn)在加密之前產(chǎn)生一個輔助密鑰,這里提出一種方法:可從明文圖像中任取8個像素點,每兩個像素點一對,按比特位進行異或操作,得到4個8位的數(shù)ka、kb、kc、kd,然后將其相互做位運算,直至產(chǎn)生最后得輔助密鑰。輔助密鑰的選取可以選擇其它方法,只要保證針對不同的加密圖像結(jié)果不同即可。我們將這個輔助密鑰與Logistic的初始值進行異或后再參與后面的迭代,從而使每個明文的各自獨有的信息均參與到后面的迭代過程中去,使得每副密文圖像均含有其本來圖像的信息,這樣一來,選擇明文攻擊將失效。

2、總體流程

用FPGA進行圖像加密時首先應該將圖像轉(zhuǎn)化為硬件可以接受的數(shù)據(jù)流,這里我們采用了Matjab作為ISE(一種開發(fā)FPGA的軟件平臺)與圖像的接口,然后通過書寫ISE的Testbcnch激勵測試文件將經(jīng)過Matlab轉(zhuǎn)化的圖像數(shù)據(jù)送入FPGA。

基于FPGA實現(xiàn)的圖像加密系統(tǒng)工作流程如圖2所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

另外,考慮到圖像數(shù)據(jù)的巨大,本文采用的測試圖共有16384個像素值,如果說直接使用片子內(nèi)部的Distributcdram(分布式內(nèi)存)存儲將顯得力不從心,假定一個像素用一個8位邏輯矢量表示,那么一副圖像將耗用一個大小為16384x8的二維內(nèi)存空間,這樣大的空間,如果直接使用FPGA內(nèi)部的LUT(查找表)的話,電路綜合與實現(xiàn)將十分困難。這里我們采用FPGA內(nèi)部的Blockram來進行圖像數(shù)據(jù)的存儲。Blockram是FPGA中分布在芯片左右兩側(cè),獨立于片內(nèi)LUT和觸發(fā)器之外的具有固定大小的塊狀RAM。實驗操作時我們使用了ISE里面CORE GENFRATOR生成一個單口RAM(位寬為8,深度16 384)進行讀寫,如圖3所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

工作流程中各個單元均是在控制器發(fā)出相應的控制信號下進行工作的,如圖4所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

至于圖像的解密,由于Bakcr映射牽扯到取模運算。除非另外能夠得知中間的某些計算結(jié)果,否則一般條件下是不能直接完成逆運算的,故這里采用建立加解密位置對照表的方法來進行原始位置的恢復,具體方法如下:

利用IPCORE建立一個位寬14位(因為這里存放的數(shù)據(jù)不是灰度而是像素的地址2的14次方=16384),深度也是14位的存儲區(qū)域(28KB)作為明文位置與密文位置的對照表。但是,應當指出對照表的建立也是占用FPGA的Blockram,所以只要Blockram空間夠大,是完全可以實現(xiàn)圖像的加解密的。我們采用的是Xilinx公司的xc3sl000型號的FPGA進行加密解密運算的,這種型號的FPGA其Blockram容量為54 KB,而實際圖像大小為16KB,解密時建立的對應表大小28 KB。二者總和44 KB,尚在Blockram的容量范圍以內(nèi),完全可以硬件實現(xiàn)。

三、實驗結(jié)果與分析

圖像加密前后的比較,如圖5所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

對于一個混沌系統(tǒng)而言,初始條件任意微小的改變都會引發(fā)系統(tǒng)在演化過程中得到完全不同的結(jié)果,表現(xiàn)出顯著的隨機性。如果解密的時候稍稍改動一下Logistic映射的初始值,把x0由0.732×256改為0.7325×256,而映射參數(shù)與Baker映射的分組方案均不做變化,對圖5(b)進行解密如圖6、圖7所示。

基于混沌的圖像加密算法的硬件實現(xiàn)

顯而易見,即便混沌映射初值僅有微小差異都不可能正確解密,這與上面的分析結(jié)果一致,保密性也因此可見一斑。

經(jīng)測試,在xc3sl000型號的FGPA上完成解密運算僅耗用Slices186個,占芯片的2%,LUT耗用315個,占芯片總量的2%,最高運算頻率達到了144.467 MHz,這樣處理一幀128*128的數(shù)字圖像耗用時間最短可以達到0.113 ms,我們曾經(jīng)對上文描述的加密算法在VC+4- 6.0環(huán)境下仿真,由于軟件實現(xiàn)中,指令必然是一條一條順序進行的,這顯然限制了加密速度的提高,在VC下運用timcGetTime函數(shù),測試出完成這個加密運算C++-實現(xiàn)需要47 ms,比起硬件實現(xiàn)慢了許多,用FPGA實現(xiàn)圖像文件加密的速度優(yōu)勢凸顯而出。

實際應用中,為增大保密性,圖像加密常常進行多輪迭代。通過迭代,可以使得初始明文圖像的微小差異在加密過程中得到不斷的擴散,從而有效地人為增加像素之間的相關(guān)性,進一步抵抗選擇明文攻擊。如果運用硬件迭代的話,那么其速度必然相比于軟件成倍地增加,因此FPGA實現(xiàn)圖像加密的速度優(yōu)勢將發(fā)揮得更加淋漓盡致。

小知識之Block RAM

Block RAM(BRAM):塊隨機存儲器。Xlinx的SP3系列FPGA,包含兩種RAM:Block RAM和分布式RAM(Distributed RAM)。

SP3含有最多1.87Mbit的Block RAM,主要應用于構(gòu)造數(shù)據(jù)高速緩沖存儲器、深的FIFO和緩沖器等。

每個Block RAM均為18Kbit,結(jié)構(gòu)為真正雙端口RAM,包含兩套完備的36bit讀寫數(shù)據(jù)總線以及相應的控制總線。每塊Block RAM均可被配置為單端口RAM(最大帶寬為72bit)或雙端口RAM(最大帶寬為36bit),并支持級聯(lián),可級聯(lián)多達104個同步18Kbit Block RAM。SP3的Block RAM支持多種縱橫比、多種數(shù)據(jù)帶寬轉(zhuǎn)換,并支持奇偶性操作。