,,
(廣東工業大學 自動化學院,廣州 510006)
在如今視頻通信和視頻會議等服務不斷擴展的同時,人們對傳輸安全和保密通信的需求也在與日俱增。基于混沌理論的加密技術是近年來新興的密碼技術,由于混沌系統對初始條件具有高度敏感性、有界性和類隨機性,使得通過混沌系統加密的信息具有良好的安全效果[1]。視頻信息具有數據量大、相關性大、實時性高等特點,傳統的文本加密算法難以用于實時視頻流的加密,因此人們設計出了多種新型多媒體混沌加密算法和方法[2],本文通過混沌系統迭代產生的偽隨機序列來進行視頻加密便是其中一種。
由于混沌系統本身的復雜特性,其硬件實現難度較大,關于混沌保密通信技術較多停留在算法設計和數值仿真階段。不過近年來,國內外已有將混沌算法在ARM、FPGA等硬件平臺實現的相關研究[3-4]。相較于以往基于相互獨立的硬件平臺, Xilinx公司推出的Zynq系列芯片采用全可編程片上系統(System-on-a-Chip,SoC)架構,將ARM雙核處理器與28 nm高性能、低功耗的FPGA集成在一起[5],可以根據需要選擇相應的內核并設計出IP核(Intellectual Property Core),從而完成整個系統硬件結構的搭建。若單純使用FPGA資源來實現混沌加密算法和網絡數據傳輸等相關功能,大量的數學運算和繁瑣的網絡協議處理勢必會加大開發難度、消耗大量資源。因此使用簡潔緊湊、靈活方便的C語言,得益于ARM處理器的快速浮點運算能力和完整的網絡協議棧,將會大大降低軟件開發難度、縮短開發周期。而數據采集和協議轉換等工作可以由FPGA完成,發揮其并行高速處理能力來減輕ARM負擔。基于Zynq的視頻混沌加密系統將會充分結合ARM易開發和FPGA高性能、低功耗的優勢,滿足視頻保密通信的需求。
混沌系統的隨機統計特性與其正李亞普諾夫指數的個數相關,如果系統的正李氏指數越多、數值越大,意味著混沌系統的隨機統計特性越好[6]。在離散時間混沌系統設計中,使用一致有界的控制器來對漸進穩定標稱系統實施混沌反控制來構造無簡并系統,通過調節控制器參數使正李氏指數數量最大、數值足夠大,從而使系統達到無簡并狀態。基于反控制的構造方法,得到一個有界離散時間系統:
x(k+1)=Ax(k)+Bf(σx(k),ε)
(1)
令式(1)中的反控制矩陣:

(2)
同時取控制器
f(σx(k),ε)=εsin[σx(k)]
(3)
構造出一個三維離散時間混沌系統:

(4)
取上式中的狀態變量x1(k)用于視頻數據的加密,非奇異矩陣A=aij(i,j=1,2,3)作為密鑰參數為:
(5)
在式(4)中,通過改變混沌系統控制器ε和σ的值對系統進行極點配置,使其正李氏指數數量達到最大,即達到無簡并狀態。當ε=3×108,σ=2×105時,經計算式(4)的三個李氏指數均為較大正數,分別為LE1=14.9,LE1=14.8,LE1=0.19。其中x1(k)與x2(k)的混沌吸引子相圖如圖1所示。

圖1 三維無簡并混沌系統x1-x2相圖
由于離散時間混沌系統每次迭代會產生新的狀態變量且具有偽隨機特性,因此利用偽隨機的序列作為密鑰和像素值進行異或運算便能達到良好的加密效果,解密時采用相同的混沌系統產生的偽隨機序列和密文進行異或完成像素的還原。內存中的像素數據以32位的ARGB(Alpha,Red,Green,Blue)格式存儲,4個分量各為8位,其中作為透明度信號的A分量常用作圖像處理,視頻顯示時并沒有使用,因此只針對三色分量RGB分別進行加密,以此減少加密和網絡傳輸的數據量。令式(4)中的三個狀態變量分別為X(k)、Y(k)、Z(k),則加密字節為:
O(k)=Mod(X(k),28)⊕I(k)
(6)
其中雙精度浮點數的狀態變量X(k)為密鑰,將其取整后再對28取模,結果與R(n)、G(n)、B(n)中的一個字節I(k)進行異或運算得到O(k),即分別對應加密后的R*(n)、G*(n)、B*(n)。將O(k)取代控制器、F2(g)和F3(g)中的X(k),與Y(k)、Z(k)反饋至三個方程中參與下一次迭代運算,實現基于數據流的一次一密鑰加密。在加密一個像素的4次循環中,ARGB字節從內存倒序取出,加密方程循環迭代三次,依次對B(n)、G(n)、R(n)加密,最后一次循環跳過A(n),加密原理如圖2所示。

圖2 混沌加密實現原理圖
混沌解密是加密的逆過程,在接收端采用密鑰參數相同的混沌解密方程,將加密的R*(n)、G*(n)、B*(n)字節依次解密后再補充A(n)字節存入內存,以確保視頻的正確顯示。
系統使用兩套Xilinx公司的ZC702開發平臺分別作為發送端和接收端,該平臺搭載了一顆可全編程SoC芯片Zynq-7020,它由集成了ARM Cortex-A9雙核處理器等資源的處理系統(Processing System,PS)和包含85 KB邏輯單元的FPGA可編程邏輯(Programmable Logic,PL)組成[5]。其中由PL端的視頻采集模塊處理攝像頭的視頻數據,高清晰度多媒體接口(High Definition Multimedia Interface,HDMI)控制器輸出視頻,由PS端的ARM處理器產生混沌序列加解密視頻數據,完成網絡收發。Zynq的PS和PL之間通過DDR內存中的三個幀緩存進行視頻數據的緩存與共享, PL端的視頻直接內存訪問控制器(Video Direct Memory Access,VDMA)和PS端的ARM處理器分別交替讀寫不同的幀緩存,以免發生讀寫沖突同時減少視頻數據讀寫的等待時間,總體方案原理如圖3所示。

圖3 總體方案原理圖
視頻采集和顯示使用Verilog HDL,硬件描述語言開發由 FPGA邏輯資源實現。同時使用基于IP核的設計方法,視頻的顯示使用ADI公司提供的HDMI控制器軟IP核驅動開發平臺上的HDMI顯示芯片顯示圖像。在FPGA開發中使用第三方IP核將會有效降低開發難度,本文設計實現的視頻采集模塊也會封裝成為軟IP核,以供不同平臺間移植使用,發揮模塊的可重用性。
2.2.1 視頻采集IP核的實現
攝像頭的COMS圖像傳感器為OV7725模塊,最高可以輸出640×480分辨率下幀率為60 fps的視頻,像素數據為8位的RGB565格式以首字節和次字節依次輸出。視頻數據和控制信號經過視頻采集IP核轉換為AXI4-Stream總線協議的視頻流數據,該總線協議是由ARM提出的單向的、基于握手信號的傳輸總線[7],由于其沒有地址項,更適合高速視頻流數據的突發傳輸。
如圖4所示,攝像頭配置模塊由狀態機產生SIOC和SIOD信號配置攝像頭寄存器,在系統復位后由FPGA完成像素時鐘頻率、輸出分辨率、輸出數據格式等初始化設置,從而簡化軟件設計。視頻捕獲模塊負責將兩個8位的RGB565拼接為R分量為5位,G分量為6位,B分量為5位共16位的rgb_data[16],再由AXI4-Stream轉換模塊補齊為32位 ARGB格式的tdata[32],由于攝像頭的數據并不包含透明度A字節,且A字節的值不會影響顯示效果,因此將其以0填充。

圖4 視頻采集IP核功能框圖
對于視頻采集IP核的三個輸入時鐘來說,系統時鐘sys_clk與總線時鐘axis_clk均為Zynq產生的時鐘,而攝像頭接口的像素時鐘PCLK與axis_clk并不在同一個時鐘域。為了防止產生亞穩態,AXI4-Stream轉換模塊內使用了一個異步FIFO負責跨時鐘域的數據轉換和緩沖。
2.2.2 VDMA的配置
VDMA是視頻采集核及HDMI控制器與DDR內存之間的橋梁。它是專門用于視頻流傳輸的軟IP核,可由其中的讀寫通道直接操作DDR內存數據,無需ARM處理器參與,有利于提升系統運行速度。在Zynq中共有AXI4-Lite、AXI4-Stream和AXI4三種總線協議,其中ARM使用AXI4-Lite總線配置VDMA的寄存器,各IP核之間視頻流數據通過AXI4-Stream總線傳輸,VDMA和DDR內存控制器的高速數據交換通過AXI4總線,因此VDMA也起到總線協議轉換的作用。
系統的發送端PL部分使用了一個VDMA,并開啟了讀內存通道和寫內存通道,原理圖如圖5所示。

圖5 發送端的DVMA原理圖
接收端只開啟了讀通道負責視頻顯示,功能和原理與發送端的讀通道相同。
對于寫通道,將視頻采集的AXI4-Stream總線中tuser信號配置為寫通道的幀同步信號。tuser上升沿觸發VDMA寫通道寫入新一幀視頻,完成寫入后等待下一個tuser上升沿的到來,依次循環寫入3個幀緩存中。對于讀通道來說,將fsync信號配置為讀通道的幀同步信號,該信號受HDMI控制器控制。當HDMI控制器向外部顯示器完成一幀視頻的顯示后,通過fsync信號上升沿觸發VDMA,依次循環從3個幀緩存中讀取視頻。
由于系統采用了VDMA與ARM操作DDR內存的3個幀緩存實現數據交換,且兩者的讀寫速率不同,為了避免自由操作幀緩存造成接收端視頻閃爍、圖像撕裂等現象,視頻幀緩存的讀寫順序和讀寫通道之間的協調處理顯得極為重要。VDMA的每個通道都可以選擇動態同步鎖相主/從(Dynamic Genlock Master/Slave)等模式,同步鎖相機制可以禁止主從接口同時訪問同一幀緩存,從接口總是操作主接口上一幀的緩存地址,從而使視頻的輸入和輸出順序保持一致。因此,配置VDMA讀寫通道均為Dynamic Genlock Slave模式,由ARM將操作完成的幀緩存序號通過GPIO輸出到VDMA的frame_ptr_in,使其讀寫新的幀緩存。讀寫通道之間由外部frame_ptr_in和frame_ptr_out進行同步,實際上由于VDMA讀寫速度大于ARM的速度,在幀輸入frame in信號刷新之前,VDMA會一直操作當前的幀緩存。
ARM端的無操作系統方案(Standalone)提供了基本的處理器功能,可以更方便完成硬件初始化、軟件加解密和網絡數據包的收發等任務。VDMA和HDMI控制器在DDR內存中均有分配基地址,ARM對這些基地址和對應的偏移地址直接操作就可以完成寄存器配置,這樣直接對底層硬件的操作會使代碼效率更高。
ARM啟動時,先進行外部HDMI顯示芯片的初始化,接著對PL端的HDMI控制器和VDMA初始化,配置HDMI控制器的顯示分辨率和像素時鐘,然后向VDMA寄存器寫入劃分好的3個幀緩存的地址、有效列數和行數,同時啟動讀寫通道。連接到VDMA的幀輸入frame in信號由GPIO輸出實現,在初始化GPIO過程中,將frame in信號由1~3依次輸出一次,發送端的VDMA便將視頻采集的數據通過寫通道寫滿3個幀緩存,實現本地視頻實時顯示。隨后進行TCP/IP網絡的初始化,TCP/IP網絡的實現基于輕量型IP(Light Weight IP,LwIP)協議棧,有無操作系統都可以運行,保留了TCP協議主要功能的同時減少了對系統的占用。
發送端作為服務器與客戶端建立好連接之后,發送指針便從首個幀緩存的首地址開始,以指針偏移形式每次對一個數據包進行RGB字節的混沌加密和發送,當循環完成發送一幀的視頻數據后,由GPIO輸出當前幀的序號讓VDMA刷新幀緩存,隨后發送指針便指向下一個幀緩存的首地址。以此類推,發送指針和幀輸出信號依次在三個幀緩存之間循環順序切換,流程如圖6所示。

圖6 發送端軟件流程圖
接收端初始化視頻顯示的部分與發送端基本相同,完成網絡初始化與服務端建立連接后,接收指針便指向首個幀緩存的首地址。當收到加密的數據包后進行混沌解密、插入A字節存放到接收指針的地址,隨后接收指針偏移一個數據包的長度。循環完成一幀視頻的接收后,GPIO將輸出當前幀的序號,使VDMA讀取剛接收的一幀完整視頻數據由HDMI控制器輸出顯示。最后接收指針指向下一個幀緩存地址準備存放下一幀數據,依次完成三幀緩存的循環寫入和VDMA循環讀出,軟件流程如圖7所示。

圖7 接收端軟件流程圖
Zynq的PS端ARM時鐘頻率為667 MHz,PL端系統時鐘頻率100 MHz。攝像頭采集分辨率配置為320×240,幀率為60 fps,液晶顯示器分辨率為640×480,刷新率為60 Hz。在DDR內存中每幀圖像幀緩存大小為320×240×4 = 307 200字節,經加密后的每幀圖像數據大小為320×240×3 = 230 400字節。由于LwIP協議棧中每個網絡數據包的有效數據最大為1 446字節,因此在軟件配置中將每次發送的數據包設為960字節,經過240次就可以完成一幀320×240分辨率加密后的圖像發送。采用1 000 Mbps帶寬的路由器搭建局域網通信環境,兩個ZC702開發板通過RJ45網線與路由器連接。
實驗結果表明,發送端原始視頻顯示清晰,圖像穩定,畫面流暢。接收端與發送端密鑰失配時,視頻解密失敗,其中的每個像素均被加密,原視頻不可見,達到了良好的加密效果,如圖8(a)所示。當接收端解密方程密鑰與發送端匹配時,視頻解密成功,接收端顯示效果與發送端相同,圖像略有延遲,視頻幀率低于發送端,如圖8(b)所示。

圖8 320×240分辨率的視頻效果
同時也測試了攝像頭640×480分辨率下的實驗效果,圖像的視野更廣,畫質更好,但視頻幀率顯著降低出現卡頓,數據對比見表1。

表1 不同攝像頭分辨率下的數據比較
當視頻分辨率更高時,隨之而來的視頻數據量也會增加,對于ARM處理器的運算能力來說,執行加密和解密處理一幀視頻數據所消耗的時間過長導致視頻卡頓。今后可以在此基礎上優化算法壓縮數據或者采用FPGA實現混沌加解密模塊,這將大大增加視頻的實時性和更高分辨率下的流暢度。

[1] 李力.基于混沌理論的密碼算法研究和實現[D].長沙:中南大學,2005.
[2] 禹思敏,呂金虎,李澄清.混沌密碼及其在多媒體保密通信中應用的進展[J].電子與信息學報,2016(3):735-752.
[3] Chen P,Yu S,Zhang X,et al.ARM-embedded implementation of a video chaotic secure communication via WAN remote transmission with desirable security and frame rate[J].Nonlinear Dynamics,2016,86(2):725-740.
[4] 陳仕坤,禹思敏.視頻混沌加密及其FPGA實現[J].電子技術應用,2015,41(1):111-114.
[5] Xilinx Inc.ZC702 Evaluation Board for the Zynq-7000 XC7Z020 All Programmable SoC[EB/OL].[2018-03].https://www.xilinx.com/support/documentation/boards_and_kits/zc702_zvik/ug850-zc702-eval-bd.pdf.
[6] 陳關榮.Lorenz系統族的動力學分析、控制與同步[M].北京:科學出版社,2003.
[7] 賀理,趙鶴鳴,邵雷.AXI4-Stream總線的FPGA視頻系統的開發研究[J].單片機與嵌入式系統應用,2015,15(12):42-45.