陳佳文,劉宇,楊濤
(電子科技大學(xué)電子科學(xué)與工程學(xué)院,四川成都,611731)
隨著數(shù)字時(shí)代的不斷深入,如何保證數(shù)字圖像高質(zhì)量、高安全性地在互聯(lián)網(wǎng)上傳輸和存儲(chǔ)已成為一大研究熱點(diǎn)。由于圖像信息屬于高冗余、大數(shù)據(jù)量的二維數(shù)據(jù)結(jié)構(gòu),所以AES、3DES等加解密算法已顯得不再適用[1]。
現(xiàn)階段常用的圖像加密方法可大致分為兩類:圖像置亂和圖像擴(kuò)散。圖像置亂本質(zhì)上是將圖像中各像素點(diǎn)坐標(biāo)位置進(jìn)行打亂,其中最具代表的算法有Zigzag掃描[2]、Arnold算法[3]等;但是單用這類方法往往會(huì)使加密完的圖像很難抵御如選擇明文攻擊、窮舉攻擊等現(xiàn)代密碼分析技術(shù)。圖像擴(kuò)散本質(zhì)上是依據(jù)算法改變圖像中各個(gè)像素點(diǎn)的值,其中最常用的方法是利用混沌序列映射成的種子密圖與待處理圖像進(jìn)行異或處理,典型的算法有Logistic混沌序列算法[4]、Lorenz混沌序列算法[5]等;這種方法涉及到的混沌序列產(chǎn)生算法往往具備很好的初值敏感性,符合密碼設(shè)計(jì)中所需的混淆和擴(kuò)散規(guī)則。
本設(shè)計(jì)將Arnold算法和經(jīng)改進(jìn)后的Logistic混沌序列算法進(jìn)行組合,實(shí)現(xiàn)了一種可完成圖像加密和解密功能的硬件系統(tǒng),該設(shè)計(jì)具有消耗資源少、運(yùn)算速度快、密鑰空間大等特點(diǎn),并且與外界交互端口簡單,方便了設(shè)計(jì)的復(fù)用。
Arnold算法完成了加密過程中的圖像置亂過程,具體公式如下:
其中(x,y)為原像素坐標(biāo),(x′,y')為置亂后的像素坐標(biāo),N為圖像尺寸,也表示的是x、y以及x′、y′的取值范圍。
Arnold迭代具有周期性,且僅能處理方形圖像。輸入圖像尺寸決定了對(duì)應(yīng)的Arnold迭代周期,表1列舉了不同尺寸圖像對(duì)應(yīng)的Arnold迭代周期。
表1 輸入圖像尺寸N與對(duì)應(yīng)Arnold迭代周期T的關(guān)系
當(dāng)人為設(shè)置的迭代次數(shù)T′剛好等于待處理圖像對(duì)應(yīng)的Arnold迭代周期T時(shí),經(jīng)Arnold算法處理得到的輸出圖像將與輸入圖像完全一致,所以每個(gè)T′均對(duì)應(yīng)一個(gè)有效迭代次數(shù)Treal,對(duì)應(yīng)關(guān)系如圖1所示。
圖1 人為設(shè)置的迭代周期次數(shù)T'與對(duì)應(yīng)的有效迭代次
數(shù)Treal的關(guān)系示意圖
Arnold算法是可逆的,對(duì)應(yīng)公式如下:
現(xiàn)階段常用的Arnold解密方法可分為兩類:第一類方法是結(jié)合T'和T求出剩余迭代次數(shù)TlastkT?T′= ,后利用公式(1)對(duì)密文進(jìn)行Tlast次迭代處理,以完成解密,但是這種方法可能引發(fā)因T′過小而導(dǎo)致解密延時(shí)過長的問題;第二類方法主要依據(jù)公式(2),僅需保證解密迭代次數(shù)與加密迭代次數(shù)一致即可正確解密。
加密時(shí),本設(shè)計(jì)采用了提取有效迭代次數(shù)Treal的方法,避免了執(zhí)行過程中的無效迭代;解密時(shí),本設(shè)計(jì)依據(jù)第二類解密方法,保證了解密延時(shí)穩(wěn)定性。Arnold算法涉及到的密鑰如表2所示。
表2 Arnold算法對(duì)應(yīng)密鑰
Logistic算法本質(zhì)上是產(chǎn)生圖像擴(kuò)散必須的種子密圖。本設(shè)計(jì)采用的是密鑰空間更大、初值敏感性更好的分段Logistic混沌映射算法,如公式(3)所示:
方 程 內(nèi) 控 制 參 數(shù)μ∈ ( 0.344,0.736 ) ∪ ( 0.848,1.752)∪(1 .792,2),初值x0∈( ?1 ,1),當(dāng)前迭代次數(shù)n= 0,1,2…。
為了避免數(shù)字混沌序列內(nèi)部存在的短周期問題、提高混沌序列的隨機(jī)性,本設(shè)計(jì)在混沌序列產(chǎn)生過程中引入了M序列擾動(dòng),原理如圖2所示,其中Titer為擾動(dòng)間隔,iter_cnt為迭代次數(shù)計(jì)數(shù)器。
圖2 M序列擾動(dòng)原理示意圖
當(dāng)?shù)螖?shù)等于擾動(dòng)間隔時(shí),iter_cnt清零,Logistic算法當(dāng)前迭代結(jié)果xn+1將與線性反饋移位寄存器(LFSR)當(dāng)前迭代結(jié)果mn進(jìn)行基于一定位寬的位異或,位寬數(shù)值由擾動(dòng)幅度aD確定。擾動(dòng)結(jié)果將作為Logistic算法下次迭代的輸入以及當(dāng)前迭代得到的混沌序列元素。
本設(shè)計(jì)M序列產(chǎn)生依據(jù)的本原方程式如公式(4)所示[6]:
本設(shè)計(jì)將利用Logistic算法得到種子密圖與待處理圖像進(jìn)行像素點(diǎn)間的異或處理。由于異或存在可逆性,所以加密和解密時(shí)的Logistic算法執(zhí)行過程完全一致,僅需保證解密密鑰與加密密鑰一致,即可正確解密。Logistic算法涉及到的密鑰如表3所示。
表3 Logistic算法對(duì)應(yīng)密鑰
因Arnold算法僅可處理方圖,為了使本設(shè)計(jì)的應(yīng)用場景一般化,項(xiàng)目中增加了對(duì)待處理圖像的補(bǔ)零和拆解處理,用于非方圖與方圖之間的轉(zhuǎn)換,其中拆解是補(bǔ)零的逆操作,具體原理如圖3所示。
圖3 待處理圖像補(bǔ)零過程示意圖
本設(shè)計(jì)采用了Arnold算法和Logistic混沌算法相結(jié)合的圖像加解密方法。加密時(shí),輸入圖像數(shù)據(jù)將依次經(jīng)過補(bǔ)零處理、Arnold算法處理以及Logistic算法處理,Logistic算法處理結(jié)果作為加密最終結(jié)果。解密時(shí),基于各算法處理特點(diǎn),解密過程為加密的逆過程:待處理圖像將依次經(jīng)過Logistic算法處理、Arnold算法處理以及拆解處理,拆解處理的結(jié)果即為解密最終結(jié)果。
為驗(yàn)證算法的可行性,本設(shè)計(jì)采用Matlab對(duì)圖像加密和解密過程分別進(jìn)行了仿真驗(yàn)證,其中以143×181分辨率的輸入圖像為例,仿真結(jié)果如圖4和圖5所示。
圖4 143×181輸入圖像加密
圖5 143×181輸入圖像解密
本設(shè)計(jì)架構(gòu)圖如圖6所示,各模塊之間以及模塊與外界之間的交互均采用vaild-ready握手方式。整個(gè)設(shè)計(jì)包括5個(gè)模塊,分別是頂層控制模塊Ctrl_top、補(bǔ)零拆解模塊Pad_Slic、緩存模塊PIPO_RAM、圖像置亂模塊Arnold和圖像擴(kuò)散模塊Logistic。
圖6 硬件系統(tǒng)架構(gòu)圖
頂層控制模塊主要包含3個(gè)功能:
(1)接收外界模塊傳來的加/解密開始信號(hào)、配置參數(shù)包等信號(hào),加密時(shí)需額外接收外界模塊提供的輸入圖像數(shù)據(jù);
(2)對(duì)外界模塊傳來的配置參數(shù)包進(jìn)行拆包,得到各算法模塊所需密鑰和配置參數(shù),后將這些參數(shù)傳送給各個(gè)算法模塊;
(3)將緩存模塊發(fā)出的加/解密完成信號(hào)、加/解密結(jié)果圖像數(shù)據(jù)以數(shù)據(jù)流的形式輸出給外界模塊。
補(bǔ)零拆解模塊主要完成加密時(shí)的補(bǔ)零處理和解密時(shí)的拆解處理。當(dāng)補(bǔ)零拆解模塊與緩存模塊達(dá)成握手時(shí),補(bǔ)零拆解模塊將按地址順序依次讀出待處理輸入圖像像素,并以流水線的形式對(duì)各像素進(jìn)行處理和寫回。
緩存模塊主要包含3個(gè)功能:
(1)負(fù)責(zé)待處理輸入圖像的緩存;
(2)負(fù)責(zé)加密或解密過程中所有中間處理圖像結(jié)果的緩存;
(3)負(fù)責(zé)處理完成結(jié)果圖像的緩存。
為追求資源消耗和系統(tǒng)性能的平衡,緩存模塊的實(shí)現(xiàn)依據(jù)乒乓緩存原理,這樣可以保證讀寫訪問的相互獨(dú)立、防止數(shù)據(jù)覆蓋。因本設(shè)計(jì)應(yīng)用場景涉及的圖像尺寸不大,所以采用2個(gè)RAM作為乒乓緩存單元,RAM的位寬取決于像素位寬、深度取決于輸入圖像像素總數(shù)。
緩存模塊與各模塊的握手交互由內(nèi)部狀態(tài)機(jī)控制,對(duì)應(yīng)的狀態(tài)跳轉(zhuǎn)圖如圖7所示。wr_data_last信號(hào)為緩存模塊輸入,由各處理模塊提供,表示當(dāng)前寫入緩存模塊的像素是圖像的最后一個(gè)像素;iter_last信號(hào)表示當(dāng)前迭代是最后一次迭代;iter_pass表示跳過迭代提前結(jié)束。當(dāng)處于空閑狀態(tài)(IDLE)時(shí),緩存模塊僅對(duì)頂層控制模塊開放讀ready握手信號(hào),保證頂層控制模塊可以從緩存模塊中讀取處理結(jié)果圖像;當(dāng)處于配置狀態(tài)(CONFIG)時(shí),緩存模塊僅對(duì)頂層控制模塊開放寫ready握手信號(hào),保證頂層控制模塊可以向緩存模塊中寫入待處理圖像像素的同時(shí),也提醒了外界模塊算法處理完成。其余各狀態(tài),緩存模塊僅對(duì)對(duì)應(yīng)處理模塊開放讀寫握手信號(hào)。
圖7 緩存模塊內(nèi)狀態(tài)機(jī)跳轉(zhuǎn)圖
圖像置亂模塊主要依據(jù)Arnold算法原理,以流水線的形式完成加密和解密過程中的圖像置亂處理。
圖像擴(kuò)散模塊主要包含3個(gè)功能:
(1)依據(jù)Logistic算法產(chǎn)生混沌序列;
(2)將混沌序列中各元素?cái)?shù)值通過線性變換成0到255內(nèi)的整數(shù),以得到種子密圖;
(3)當(dāng)緩存模塊向圖像擴(kuò)散模塊開放讀寫握手信號(hào)時(shí),圖像擴(kuò)散模塊將依據(jù)現(xiàn)有的種子密圖像素,向緩存模塊讀取待處理圖像像素,并作異或擴(kuò)散處理,后將得到的結(jié)果寫回緩存模塊。
為提高系統(tǒng)性能,Logistic算法產(chǎn)生種子密圖的過程與補(bǔ)零/拆解以及Arnold處理過程相互獨(dú)立,Arnold處理延時(shí)僅會(huì)影響到異或擴(kuò)散過程。Logistic算法模塊架構(gòu)圖如圖8所示。
圖8 Logistic算法模塊架構(gòu)圖
本設(shè)計(jì)以143×181分辨率的圖像為例,選用Xilinx Artix-7 FPGA開發(fā)板進(jìn)行上板演示,演示結(jié)果如圖9所示。圖中的LCD屏分別呈現(xiàn)了原圖以及經(jīng)系統(tǒng)處理后的加密結(jié)果、正確解密結(jié)果和非正確解密結(jié)果,對(duì)比軟件仿真可知一致,證明設(shè)計(jì)成功。
圖9 上板演示結(jié)果
本設(shè)計(jì)選用圖像加密中常用的Arnold算法和經(jīng)過改進(jìn)后的Logistic混沌序列算法,實(shí)現(xiàn)了一種可完成圖像加密和解密功能的硬件系統(tǒng)。該設(shè)計(jì)采用乒乓緩存機(jī)制,在保證消耗資源少的同時(shí)提高了系統(tǒng)整體性能,另外設(shè)計(jì)還采用了提取有效迭代次數(shù)、多算法并行執(zhí)行、結(jié)果預(yù)取等優(yōu)化處理。外界模塊僅需依據(jù)握手交互原則,在加密和解密前向設(shè)計(jì)提供開始信號(hào)、密鑰以及待處理圖像數(shù)據(jù),系統(tǒng)便會(huì)自動(dòng)進(jìn)行密鑰分配以及算法處理,當(dāng)算法處理完畢時(shí),系統(tǒng)便會(huì)開放對(duì)外界模塊的握手供外界模塊訪問。