【《某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例》11000字】_第1頁(yè)
【《某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例》11000字】_第2頁(yè)
【《某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例》11000字】_第3頁(yè)
【《某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例》11000字】_第4頁(yè)
【《某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例》11000字】_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例目錄TOC\o"1-3"\h\u32758某圖像加密系統(tǒng)的硬件設(shè)計(jì)案例 1319051.1圖像加密系統(tǒng)框架及硬件設(shè)計(jì) 1272271.2密鑰傳輸模塊設(shè)計(jì) 513271.3ZUC-256模塊設(shè)計(jì)及其優(yōu)化 869421.3.1ZUC-256模塊的硬件架構(gòu) 8119701.3.2流管理模式與LFSR模塊設(shè)計(jì) 965151.3.3關(guān)鍵路徑優(yōu)化 13140071.3.4BR模塊與NLF模塊設(shè)計(jì) 1672541.3.5密鑰隨機(jī)性測(cè)試 19294111.4Arnold模塊設(shè)計(jì) 20230181.5加密模塊與顯示模塊設(shè)計(jì) 2387011.5.1加密模塊設(shè)計(jì) 23232321.5.2LCD顯示模塊設(shè)計(jì) 251.1圖像加密系統(tǒng)框架及硬件設(shè)計(jì)通過(guò)算法特性分析本文設(shè)計(jì)了一種基于序列密碼ZUC-256算法的圖像加密系統(tǒng),系統(tǒng)的框架圖如圖3-1所示。圖3-1圖像加密流程Figure3-1Imageencryptionprocess由于ZUC-256算法的一次一密特性以及流密鑰的快速生成特性,只要輸入密鑰生成器中的初始密鑰與初始向量相同,在觸發(fā)信號(hào)的作用下便可以多次生成相同的密鑰流序列。圖像解密流程如圖3-2所示,解密流程中兩次逆擴(kuò)散利用了序列密碼的流加密模式,即使用ZUC-256算法產(chǎn)生的密鑰流與明文數(shù)據(jù)進(jìn)行異或,并加入了密文反饋?lái)?xiàng)參與加密。而后固定住Arnold置亂和逆置亂的參數(shù)與置亂次數(shù),使得加密與解密過(guò)程基本相同,在設(shè)計(jì)子模塊時(shí)可以節(jié)省許多資源。 圖3-2圖像解密流程Figure3-2Imagedecryptionprocess根據(jù)圖3-1與圖3-2的流程框架,本文設(shè)計(jì)了圖像加解密流程的硬件架構(gòu)。整個(gè)硬件架構(gòu)可以劃分為PLL鎖相環(huán)、RST復(fù)位模塊、KEY密鑰傳輸模塊、ZUC-256算法模塊、Arnold置亂算法模塊、加解密數(shù)據(jù)模塊以及LCD圖像顯示模塊。圖像加密系統(tǒng)的頂層硬件架構(gòu)如圖3-3所示,其中頂層模塊的輸入輸出信號(hào)在表3-1中進(jìn)行了簡(jiǎn)要說(shuō)明。圖3-3圖像加密系統(tǒng)頂層架構(gòu)Figure3-3toplevelarchitectureofimageencryptionsystem表3-1圖像加密系統(tǒng)頂層信號(hào)列表Table3-1toplevelsignallistofimageencryptionsystem信號(hào)名稱(chēng)信號(hào)位寬輸入/輸出信號(hào)功能sys_clk_p1bit輸入差分時(shí)鐘輸入sys_clk_n1bit輸入差分時(shí)鐘輸入rst_n1bit輸入復(fù)位信號(hào)en1bit輸入加密控制信號(hào)de1bit輸入解密控制信號(hào)rxd1bit輸入串口轉(zhuǎn)并輸入txd1bit輸出并寄存轉(zhuǎn)串口輸出lcd_pwn1bit輸出LCD顯示控制信號(hào)lcd_dclk1bit輸出LCD33M掃描時(shí)鐘lcd_r8bit輸出紅色信號(hào)輸出lcd_g8bit輸出綠色信號(hào)輸出lcd_b8bit輸出藍(lán)色信號(hào)輸出lcd_hsync1bit輸出lcd行同步信號(hào)lcd_vsync1bit輸出lcd場(chǎng)同步信號(hào)lcd_de1bit輸出lcd顯示控制信號(hào)介紹完頂層架構(gòu)與信號(hào)列表后對(duì)圖像加解密系統(tǒng)的過(guò)程進(jìn)行如下描述:首先使用差分時(shí)鐘輸入接入鎖相環(huán)產(chǎn)生全局時(shí)鐘信號(hào)與LCD顯示屏的驅(qū)動(dòng)時(shí)鐘,通過(guò)鎖相環(huán)產(chǎn)生的全局時(shí)鐘可以有效去除時(shí)鐘偏移和抖動(dòng),同時(shí)產(chǎn)生locked信號(hào)作為時(shí)鐘穩(wěn)定標(biāo)志,當(dāng)其為高電平時(shí)證明分頻后時(shí)鐘穩(wěn)定;locked信號(hào)進(jìn)入復(fù)位模塊后與系統(tǒng)復(fù)位信號(hào)reset共同生成輸出rst_n復(fù)位信號(hào),低電平復(fù)位有效。當(dāng)rst_n復(fù)位拉高時(shí)復(fù)位結(jié)束,并且PLL時(shí)鐘此時(shí)已經(jīng)生成穩(wěn)定時(shí)鐘,圖像轉(zhuǎn)化為coe文件存入RAM中,系統(tǒng)準(zhǔn)備結(jié)束可以正常工作;系統(tǒng)運(yùn)行之初首先通過(guò)串口發(fā)送8位初始向量與初始密鑰進(jìn)入系統(tǒng),通過(guò)FIFO轉(zhuǎn)換為32位輸出,并通過(guò)寄存器拼接產(chǎn)生256位初始密鑰key與184位初始向量iv,而后拉高觸發(fā)信號(hào)trigger并將其輸入ZUC-256算法模塊;ZUC-256算法模塊在接到觸發(fā)信號(hào)trigger與初始向量及初始密鑰后開(kāi)始運(yùn)行,經(jīng)初始化階段迭代后進(jìn)入工作階段。舍棄1輪數(shù)據(jù)后zuc_log信號(hào)拉高,此時(shí)代表產(chǎn)生的zuc_out數(shù)據(jù)有效,同時(shí)開(kāi)始進(jìn)行密鑰流序列計(jì)數(shù)。當(dāng)計(jì)到圖像像素總數(shù)時(shí),zuc_log信號(hào)拉低,密鑰流停止產(chǎn)生;當(dāng)zuc_log信號(hào)拉高時(shí),從ARNOLD置亂模塊中的RAM1中讀出原始圖像的數(shù)字圖像像素,同時(shí)zuc_log信號(hào)作為加密模塊的觸發(fā)信號(hào)輸入到ED數(shù)據(jù)加密模塊,ED加密模塊產(chǎn)生一個(gè)en_flag信號(hào),即當(dāng)加密數(shù)據(jù)en_data有效輸出時(shí)en_flag信號(hào)拉高電平,當(dāng)en_flag電平由高變低時(shí)加密結(jié)束;en_flag信號(hào)在ARNOLD中作為RAM1的寫(xiě)使能將ED模塊產(chǎn)生的數(shù)據(jù)輸入寫(xiě)入RAM1中。當(dāng)接收到en加密觸發(fā)信號(hào)時(shí),ARNOLD置亂模塊產(chǎn)生置亂的新地址,通過(guò)遞加的地址順序讀出RAM1中存儲(chǔ)的數(shù)據(jù)并按置亂后的新地址寫(xiě)入RAM2中,重復(fù)如下過(guò)程直至達(dá)到預(yù)期置亂次數(shù),產(chǎn)生flag信號(hào)再次觸發(fā)ZUC-256模塊2次產(chǎn)生密鑰流,并讀出最終置亂數(shù)據(jù)與密鑰流進(jìn)行加密;解密流程與加密流程類(lèi)似,當(dāng)接收到de解密觸發(fā)信號(hào)時(shí),產(chǎn)生新地址模塊為ARNOLD逆置亂模塊,作為兩個(gè)RAM的寫(xiě)地址,當(dāng)逆置亂次數(shù)達(dá)到加密置亂次數(shù)后結(jié)束,并重新觸發(fā)ZUC-256算法產(chǎn)生密鑰重復(fù)上述過(guò)程;當(dāng)結(jié)束置亂過(guò)程后讀出RAM2中的置亂結(jié)果進(jìn)入ED模塊中進(jìn)行二次加解密,并將加解密數(shù)據(jù)通過(guò)ed_lcd信號(hào)輸入LCD顯示模塊進(jìn)行圖像的顯示;在進(jìn)行加解密過(guò)程后數(shù)據(jù)送入LCD顯示模塊,同時(shí)控制信號(hào)拉高,lcd_vsync和lcd_hsync信號(hào)拉高,同時(shí)開(kāi)始按從左到右從上到下的順序掃描圖像在LCD液晶顯示屏上進(jìn)行顯示。至此圖像加密系統(tǒng)的硬件架構(gòu)設(shè)計(jì)結(jié)束,接下來(lái)的小節(jié)將對(duì)圖像加密系統(tǒng)中涉及的子模塊進(jìn)行描述。1.2密鑰傳輸模塊設(shè)計(jì)考慮到要將ZUC-256算法所需的初始密鑰與初始向量裝入ZUC-256算法模塊中,并提供觸發(fā)信號(hào)trigger使ZUC-256算法開(kāi)始進(jìn)行迭代。本文設(shè)計(jì)了ZUC-256算法的密鑰傳輸模塊KEY,其作用是通過(guò)上位機(jī)向FPGA硬件中輸入初始密鑰與初始向量,并產(chǎn)生觸發(fā)信號(hào)trigger使ZUC-256算法模塊開(kāi)始工作??紤]到信號(hào)逐級(jí)傳遞時(shí)無(wú)法查看信號(hào)是否作用于下一模塊,本文利用狀態(tài)機(jī)控制數(shù)據(jù)傳遞,當(dāng)數(shù)據(jù)輸入下一模塊后向上位機(jī)輸入標(biāo)志信號(hào),證明數(shù)據(jù)成功輸入。KEY頂層模塊如圖3-4所示,頂層信號(hào)列表如表3-2所示。圖3-4KEY頂層模塊Figure3-4Keytoplevelmodule表3-2KEY模塊信號(hào)列表Table3-2KEYmodulesignallist信號(hào)名稱(chēng)信號(hào)位寬輸入/輸出信號(hào)功能clk1bit輸入時(shí)鐘信號(hào)rst_n1bit輸入復(fù)位信號(hào)rxd1bit輸入串口轉(zhuǎn)并輸入txd1bit輸出并寄存轉(zhuǎn)串口輸出key256bit輸出初始密鑰iv184bit輸出初始向量trigger1bit輸出ZUC-256觸發(fā)標(biāo)志KEY模塊的內(nèi)部頂層架構(gòu)如圖3-5所示。其中DIV模塊為系統(tǒng)內(nèi)部分頻模塊,用以產(chǎn)生串口通信時(shí)設(shè)定波特率使用的內(nèi)部時(shí)鐘,本文選用9600的波特率從上位機(jī)使用串口助手進(jìn)行密鑰的發(fā)送,即在200MHz的主頻時(shí)鐘下進(jìn)行1302分頻。RX和TX為串口通信的收發(fā)模塊,RX模塊用以通過(guò)串口助手接收上位機(jī)發(fā)送的初始密鑰和初始向量,而TX模塊則是在初始向量與初始密鑰拼接完成后向上位機(jī)發(fā)送成功標(biāo)志。由于串口模塊僅能實(shí)現(xiàn)8位拼接,故本文在KEY模塊內(nèi)部引入了一個(gè)同步FIFO用以加快密鑰拼接,經(jīng)過(guò)FIFO將串口傳輸數(shù)據(jù)轉(zhuǎn)為32位data_fsm數(shù)據(jù)進(jìn)入內(nèi)部狀態(tài)機(jī)KEY_FSM中,同時(shí)利用FIFO中的空信號(hào)empty和讀數(shù)據(jù)valid有效信號(hào)作為觸發(fā)狀態(tài)跳轉(zhuǎn)的條件。圖3-5KEY模塊頂層內(nèi)部架構(gòu)Figure3-5Toplevelinternalarchitectureofkeymodule圖3-6KEY模塊狀態(tài)流程圖Figure3-6KeymodulestatusflowchartKEY模塊的狀態(tài)運(yùn)行圖如圖3-6所示,預(yù)期設(shè)計(jì)流程如下:rst_n為低電平時(shí)進(jìn)行復(fù)位,復(fù)位時(shí)除flag信號(hào)外所有信號(hào)置零,此時(shí)KEY_FSM模塊處在S0等待狀態(tài),flag信號(hào)為高時(shí)證明此時(shí)無(wú)數(shù)據(jù)返回上位機(jī),fifo空信號(hào)empty=1,證明此時(shí)無(wú)數(shù)據(jù)寫(xiě)入fifo;串口將初始密鑰發(fā)送至RX模塊,當(dāng)數(shù)據(jù)輸入RX模塊時(shí)KEY_FIFO模塊的寫(xiě)請(qǐng)求拉高,將8bit數(shù)據(jù)寫(xiě)入KEY_FIFO模塊,同時(shí)empty信號(hào)拉低為0;當(dāng)KEY_FSM模塊接收到empty=0時(shí),拉高KEY_FIFO模塊的讀請(qǐng)求,同時(shí)跳轉(zhuǎn)至S1狀態(tài);當(dāng)讀請(qǐng)求拉高時(shí)延遲一拍valid有效信號(hào)會(huì)拉高,此時(shí)KEY_FSM模塊中32bit的輸出數(shù)據(jù)data_fsm寫(xiě)入KEY_FSM模塊的寄存器中,當(dāng)計(jì)數(shù)器計(jì)至8時(shí)清空計(jì)數(shù)器,并進(jìn)行密鑰拼接,拼接完成跳轉(zhuǎn)至S2狀態(tài);串口將初始向量發(fā)送至RX模塊,當(dāng)再次接收到KEY_FIFO模塊中信號(hào)empty=0時(shí),KEY_FSM模塊會(huì)跳轉(zhuǎn)至S3狀態(tài);由于初始向量為184bit,故當(dāng)KEY_FSM模塊計(jì)數(shù)器計(jì)至6時(shí)清空計(jì)數(shù)器,并截?cái)嗟?個(gè)data_fsm的高8位進(jìn)行向量拼接,拼接完成后進(jìn)入S4狀態(tài);在S4下將trigger觸發(fā)信號(hào)拉高觸發(fā)ZUC-256算法模塊,將初始密鑰與初始向量送入ZUC-256算法模塊進(jìn)行密鑰流生成,并在下一時(shí)鐘跳轉(zhuǎn)至S5狀態(tài);S5狀態(tài)下串口發(fā)送初始數(shù)據(jù)成功裝填信息給上位機(jī),此時(shí)flag信號(hào)拉低,當(dāng)信息發(fā)送完flag信號(hào)重新拉高,此時(shí)無(wú)信息返回上位機(jī),狀態(tài)機(jī)跳轉(zhuǎn)回S0狀態(tài)。1.3ZUC-256模塊設(shè)計(jì)及其優(yōu)化ZUC-256算法主要實(shí)現(xiàn)圖像加解密的擴(kuò)散部分,通過(guò)給定初始密鑰與初始向量裝入系統(tǒng)經(jīng)過(guò)32輪迭代產(chǎn)生密鑰流序列,通過(guò)產(chǎn)生的密鑰流序列與圖像明文數(shù)據(jù)進(jìn)行加解密,從而改變圖像的像素來(lái)達(dá)到隱藏重要信息的目的。1.3.1ZUC-256模塊的硬件架構(gòu)考慮到系統(tǒng)設(shè)計(jì)中的節(jié)拍延遲及系統(tǒng)的穩(wěn)定性,結(jié)合第2章中2.2小節(jié)的相關(guān)理論基礎(chǔ),依照FPGA設(shè)計(jì)自頂向下的設(shè)計(jì)理念本文設(shè)計(jì)了ZUC-256的頂層模塊,ZUC-256算法的頂層模塊如圖3-7所示。圖3-7ZUC-256算法頂層模塊Figure3-7Toplevelmoduleofzuc-256algorithm表3-3給出了ZUC-256模塊的頂層信號(hào)列表。圖3-8給出了ZUC-256算法硬件設(shè)計(jì)中的頂層展開(kāi)架構(gòu)圖,ZUC-256算法模塊包括LFSR子模塊、BR子模塊、NLF子模塊,LFSR中對(duì)應(yīng)2.2小節(jié)共有16個(gè)寄存器參與移位,但僅有8個(gè)寄存器為重組層提供數(shù)據(jù)。經(jīng)過(guò)BR重組后的數(shù)據(jù)作為輸入進(jìn)入NLF模塊,NLF模塊中對(duì)應(yīng)非線(xiàn)性函數(shù)層的運(yùn)算,同時(shí)承擔(dān)產(chǎn)生密鑰流序列的任務(wù)。根據(jù)頂層展開(kāi)架構(gòu)設(shè)計(jì)的具體運(yùn)行流程如下所示:表3-3ZUC-256頂層信號(hào)列表Table3-3ZUC-256toplevelsignallist信號(hào)名稱(chēng)信號(hào)位寬輸入/輸出信號(hào)功能clk1bit輸入時(shí)鐘信號(hào)rst_n1bit輸入復(fù)位信號(hào)trigger1bit輸入觸發(fā)信號(hào)key256bit輸入初始密鑰iv184bit輸入初始向量zuc_out32bit輸出迭代后產(chǎn)生密鑰zuc_log1bit輸出密鑰流有效信號(hào) 圖3-8ZUC-256算法頂層框架Figure3-8toplevelframeworkofzuc-256algorithmrst_n信號(hào)拉低后系統(tǒng)復(fù)位,此時(shí)三個(gè)子模塊都處在等待狀態(tài);當(dāng)接收到觸發(fā)信號(hào)trigger后初始密鑰與初始向量和常數(shù)先進(jìn)行拼接,LFSR模塊開(kāi)始進(jìn)行初始化階段,按照信號(hào)傳遞順序依次進(jìn)入BR模塊與NLF模塊,此時(shí)產(chǎn)生的數(shù)據(jù)w截取最低位后余下的31位數(shù)據(jù)作為信號(hào)u反饋回LFSR模塊中;系統(tǒng)開(kāi)始運(yùn)行后在LFSR模塊與NLF模塊中各有一個(gè)6bit計(jì)數(shù)器,用以計(jì)數(shù)初始化迭代輪數(shù),當(dāng)計(jì)數(shù)器計(jì)到32之后LFSR模塊進(jìn)入工作模式,此時(shí)u信號(hào)不參與運(yùn)算,此時(shí)內(nèi)部狀態(tài)機(jī)會(huì)預(yù)先緩存計(jì)算結(jié)果,而后開(kāi)始產(chǎn)生有效密鑰流序列。此時(shí)zuc_log信號(hào)拉高,當(dāng)產(chǎn)生足夠明文數(shù)據(jù)使用的密鑰流序列之后運(yùn)算結(jié)束。1.3.2小節(jié)至1.3.4小節(jié)中將會(huì)對(duì)ZUC-256算法實(shí)現(xiàn)過(guò)程及優(yōu)化方法進(jìn)行闡述。1.3.2流管理模式與LFSR模塊設(shè)計(jì)在FPGA電路實(shí)現(xiàn)過(guò)程中,大多依靠有限狀態(tài)機(jī)與邏輯電路相結(jié)合以保障系統(tǒng)的穩(wěn)定性,如文獻(xiàn)[60]中針對(duì)ZUC-128算法使用控制管理模式進(jìn)行算法的實(shí)現(xiàn),控制管理模式的基本框圖如圖3-9所示。在系統(tǒng)運(yùn)行過(guò)程中外部觸發(fā)信號(hào)進(jìn)入有限狀態(tài)機(jī)FSM,狀態(tài)機(jī)通過(guò)內(nèi)部狀態(tài)變化在不同階段發(fā)出不同的控制信號(hào)傳遞給子模塊,子模塊接收控制信號(hào)產(chǎn)生數(shù)據(jù)流信號(hào)和新的觸發(fā)信號(hào),數(shù)據(jù)流輸入下一模塊參與新的運(yùn)算,而新的觸發(fā)信號(hào)進(jìn)入狀態(tài)機(jī)觸發(fā)新的狀態(tài)。使用控制管理模式可以使整個(gè)系統(tǒng)層次分明,穩(wěn)定性提升。但這種設(shè)計(jì)方式有一些潛在弊端,以圖3-9為例,控制信號(hào)進(jìn)入子模塊時(shí)會(huì)延時(shí)一拍作用,同理子模塊的觸發(fā)信號(hào)作用于狀態(tài)機(jī)時(shí)也會(huì)延時(shí)一拍,會(huì)導(dǎo)致數(shù)據(jù)延時(shí)兩拍輸出。圖3-9控制管理模式框圖Figure3-9blockdiagramofcontrolmanagementmode本文選用了流管理模式來(lái)實(shí)現(xiàn)ZUC-256算法,流管理模式的框圖如圖3-10所示。流管理模式在子模塊內(nèi)部使用狀態(tài)機(jī)來(lái)實(shí)現(xiàn)模塊自身功能,即邏輯較多的模塊內(nèi)部均存在一個(gè)控制自身的狀態(tài)機(jī),雖然增大了一些代碼量,但是可以有效緩解寄存器打拍現(xiàn)象,原有的控制管理模式打拍的兩拍可縮減為一拍,模塊越多節(jié)省的節(jié)拍越多,密鑰流產(chǎn)生的時(shí)間節(jié)點(diǎn)也會(huì)提前。需要注意在流管理模式中存在一定的潛伏期弊端,即當(dāng)系統(tǒng)的子模塊過(guò)多時(shí),從后方模塊向最前方模塊要數(shù)據(jù)時(shí),由于子模塊的個(gè)數(shù)過(guò)多,數(shù)據(jù)延時(shí)拍數(shù)較大會(huì)導(dǎo)致運(yùn)算不穩(wěn)定易錯(cuò),在這種情況下可以在中間插入FIFO進(jìn)行數(shù)據(jù)中間的超前緩存,由于本文設(shè)計(jì)模塊數(shù)量相對(duì)合理,不需要利用FIFO進(jìn)行數(shù)據(jù)的超前緩存。圖3-10流管理模式框圖Figure3-10flowmanagementmodeblockdiagram在ZUC-256算法模塊的硬件電路設(shè)計(jì)中由于比特重組層BR在原理上較為簡(jiǎn)單,為中間數(shù)據(jù)抽取重組,用簡(jiǎn)單的組合邏輯就能實(shí)現(xiàn)。而非線(xiàn)性函數(shù)層除R1與R2兩個(gè)寄存單元外其余變量數(shù)據(jù)即出即用,也均可為組合邏輯所實(shí)現(xiàn)。但通過(guò)分析ZUC-256算法可以發(fā)現(xiàn),ZUC-256算法的一些計(jì)算流程為順序進(jìn)行,并且在優(yōu)化過(guò)程中使用寄存器對(duì)數(shù)據(jù)進(jìn)行打拍,由于FPGA并行執(zhí)行的特點(diǎn)會(huì)導(dǎo)致密鑰流生成錯(cuò)誤。針對(duì)這一問(wèn)題本文采用有限狀態(tài)機(jī)FSM來(lái)進(jìn)行LFSR層與NLF層的硬件設(shè)計(jì)。FPGA中FSM狀態(tài)機(jī)主要分為2大類(lèi):根據(jù)狀態(tài)運(yùn)轉(zhuǎn)是否與輸入相關(guān)聯(lián)可分為Mealy型和Moore型兩大類(lèi),前者在設(shè)計(jì)中輸出與狀態(tài)和輸入相關(guān)聯(lián),只有在特定狀態(tài)接收到輸入才會(huì)進(jìn)行運(yùn)轉(zhuǎn)產(chǎn)生輸出;后者相對(duì)簡(jiǎn)單,輸出不與輸入相關(guān)聯(lián),只要到達(dá)指定狀態(tài)便可產(chǎn)生。在FPGA中,Mealy類(lèi)狀態(tài)機(jī)最后的輸出判斷條件為狀態(tài)機(jī)當(dāng)前狀態(tài)與輸入狀態(tài),當(dāng)且僅當(dāng)二者同時(shí)滿(mǎn)足條件時(shí)才會(huì)發(fā)生變化;Moore類(lèi)狀態(tài)機(jī)最后的輸出判斷條件為狀態(tài)機(jī)當(dāng)前狀態(tài)。除狀態(tài)機(jī)類(lèi)型外,在利用VerilogHDL硬件描述語(yǔ)言實(shí)現(xiàn)狀態(tài)機(jī)時(shí)還可以選擇使用不同段式狀態(tài)機(jī)。FPGA中狀態(tài)機(jī)分為一段式、二段式和三段式狀態(tài)機(jī)。一段式狀態(tài)機(jī)的使用一個(gè)always塊進(jìn)行代碼編寫(xiě),相對(duì)代碼量較多;二段式狀態(tài)機(jī)使用兩個(gè)always塊對(duì)狀態(tài)機(jī)的狀態(tài)跳轉(zhuǎn)和跳轉(zhuǎn)觸發(fā)條件進(jìn)行編寫(xiě);三段式狀態(tài)機(jī)使用三個(gè)always塊對(duì)狀態(tài)跳轉(zhuǎn),觸發(fā)條件以及在各個(gè)狀態(tài)下的信號(hào)變化分別進(jìn)行編寫(xiě)。盡管二段式與三段式狀態(tài)機(jī)在進(jìn)行代碼編寫(xiě)時(shí)相對(duì)代碼量較少,代碼風(fēng)格較為規(guī)范,但由于其在進(jìn)行跳轉(zhuǎn)觸發(fā)條件編寫(xiě)時(shí)在always塊內(nèi)觸發(fā)非時(shí)鐘觸發(fā),而是使用特定敏感信號(hào)進(jìn)行觸發(fā),且在always塊內(nèi)使用組合邏輯進(jìn)行賦值,極易形成鎖存器鎖存數(shù)據(jù)導(dǎo)致?tīng)顟B(tài)機(jī)癱瘓。與二段式狀態(tài)機(jī)相比一段式狀態(tài)機(jī)設(shè)計(jì)更為穩(wěn)定,符合本文預(yù)期設(shè)計(jì)要求,故選用一段式狀態(tài)機(jī)實(shí)現(xiàn)算法。在程序運(yùn)行過(guò)程中,任意時(shí)刻都將處在狀態(tài)機(jī)的某一個(gè)過(guò)程中,當(dāng)狀態(tài)機(jī)檢測(cè)到某一觸發(fā)信號(hào)時(shí),可能從當(dāng)前狀態(tài)跳轉(zhuǎn)到下一狀態(tài),有時(shí)根據(jù)設(shè)計(jì)需要也可能保持當(dāng)前狀態(tài)。設(shè)計(jì)過(guò)程中通常用狀態(tài)轉(zhuǎn)移圖來(lái)表述狀態(tài)機(jī)的跳轉(zhuǎn)過(guò)程,下面以L(fǎng)FSR模塊為例分析狀態(tài)機(jī)實(shí)現(xiàn)子模塊的過(guò)程。LFSR層的狀態(tài)轉(zhuǎn)移圖如圖3-11所示。其具體運(yùn)行流程如下:當(dāng)開(kāi)發(fā)板上電后按下復(fù)位鍵,此時(shí)電路處于等待狀態(tài),復(fù)位結(jié)束狀態(tài)機(jī)處在S0狀態(tài)。當(dāng)檢測(cè)到觸發(fā)信號(hào)trigger時(shí),系統(tǒng)將184bit初始向量與256bit初始密鑰以及16個(gè)7bit常數(shù)按一定順序裝入S15到S0共十六個(gè)寄存器中,裝載完成后進(jìn)入下一狀態(tài)S1;在S1到S3狀態(tài)對(duì)LFSR層數(shù)據(jù)進(jìn)行取模運(yùn)算,在完成每一階段的運(yùn)算后狀態(tài)機(jī)自動(dòng)進(jìn)行跳轉(zhuǎn)至下一狀態(tài),當(dāng)跳轉(zhuǎn)至S4狀態(tài)后,開(kāi)始進(jìn)行移位操作,同時(shí)init_cnt開(kāi)始計(jì)數(shù)并進(jìn)行判斷。若init_cnt計(jì)數(shù)器小于31,則重復(fù)S1至S4這一過(guò)程;若init_cnt計(jì)數(shù)器等于31,則跳轉(zhuǎn)至S5狀態(tài);在S5狀態(tài)置0所有與反饋參數(shù)w有關(guān)的寄存器值,而后進(jìn)入工作階段。S6~S8中主要實(shí)現(xiàn)工作階段中取模運(yùn)算的超前計(jì)算,S9階段在進(jìn)行取模運(yùn)算的同時(shí)開(kāi)始進(jìn)行工作階段的移位,同時(shí)開(kāi)始提供產(chǎn)生的密鑰流數(shù)據(jù),key_cnt開(kāi)始計(jì)數(shù)。當(dāng)產(chǎn)生足夠的密鑰流后狀態(tài)機(jī)自動(dòng)跳轉(zhuǎn)回S0等待下一個(gè)觸發(fā)信號(hào)的到來(lái)。通過(guò)分析可以得出,跳轉(zhuǎn)回初始狀態(tài)后,只要檢測(cè)到觸發(fā)信號(hào),狀態(tài)機(jī)會(huì)自動(dòng)生成所需密鑰,而當(dāng)中間階段觸發(fā)信號(hào)到來(lái)時(shí)狀態(tài)機(jī)不會(huì)因?yàn)橛|發(fā)信號(hào)到來(lái)而隨意跳轉(zhuǎn)導(dǎo)致系統(tǒng)不穩(wěn)定。圖3-11LFSR層狀態(tài)轉(zhuǎn)移圖Figure3-11LFSRlayerstatetransitiondiagram1.3.3關(guān)鍵路徑優(yōu)化所謂關(guān)鍵路徑(criticalpath),即參與電路運(yùn)行次數(shù)最多并且邏輯較為復(fù)雜的電路,其造成的走線(xiàn)延遲過(guò)長(zhǎng),從而容易產(chǎn)生不穩(wěn)定信號(hào),在硬件描述語(yǔ)言中一般位于其進(jìn)行數(shù)據(jù)運(yùn)算的邏輯語(yǔ)言處。在硬件電路中,大到系統(tǒng)小到模塊都有關(guān)鍵路徑。由于關(guān)鍵路徑的電路結(jié)構(gòu)最為復(fù)雜,扇出系數(shù)較大,故而其決定了整個(gè)系統(tǒng)的性能,系統(tǒng)的最高頻率就是由關(guān)鍵路徑的延時(shí)決定的。ZUC-256算法模塊中調(diào)用最多延時(shí)最長(zhǎng)的路徑為L(zhǎng)FSR層中的S16運(yùn)算過(guò)程,故表達(dá)式(3-1)中給出的計(jì)算過(guò)程即為密鑰流模塊中的關(guān)鍵路徑。 (3-1)在VerilogHDL硬件描述語(yǔ)言中,2n即代表左移n位,可以用拼接符實(shí)現(xiàn)移位操作,具體實(shí)現(xiàn)過(guò)程如表達(dá)式(3-2)所示。其中Sn為31bit的寄存器,{}為拼接符,用以將不同寄存器中抽取的數(shù)據(jù)整合在一個(gè)寄存器中。 (3-2)除拼接移位之外,如何解決mod運(yùn)算也是一個(gè)重要的問(wèn)題。傳統(tǒng)的mod運(yùn)算如表達(dá)式(3-3)所示。 (3-3)表達(dá)式中a與b代表LFSR中31bit的數(shù)據(jù),c代表a與b相加的和,在包含進(jìn)位的情況下其最大位寬為32bit。d則代表對(duì)c取模后產(chǎn)生的31bit的數(shù)據(jù),用以后續(xù)運(yùn)算。據(jù)此可以看出在有限域GF(231-1)中的加法規(guī)則是對(duì)計(jì)算結(jié)果的進(jìn)位與數(shù)據(jù)本身進(jìn)行累加。根據(jù)有限域的加法規(guī)則,傳統(tǒng)的計(jì)算過(guò)程應(yīng)該是進(jìn)行多步驟的累積加法。即先將兩個(gè)數(shù)進(jìn)行取模運(yùn)算,然后將運(yùn)算后的結(jié)果加到第三個(gè)數(shù)上,重復(fù)這一過(guò)程直到所有輸入均完成計(jì)算。雖然FPGA可以高速并行地處理計(jì)算過(guò)程,但過(guò)度的使用組合邏輯會(huì)極大的提高系統(tǒng)的走線(xiàn)延遲,從而導(dǎo)致處理效率較低。文獻(xiàn)[61]中針對(duì)ZUC算法的關(guān)鍵路徑給出了3種取模加法器,如圖3-12所示。圖中a)類(lèi)加法器是原始加法器。這是模231-1加法器的直接硬件實(shí)現(xiàn)。該架構(gòu)包含兩個(gè)31位加法器和一個(gè)多路復(fù)用器,首先計(jì)算A+B的結(jié)果,而后將其結(jié)果與1相加,利用進(jìn)位選擇計(jì)算結(jié)果,其延遲主要是兩個(gè)31位加法器的延遲。圖中b)類(lèi)加法器與原始加法器相比,它通過(guò)減少?gòu)?fù)用器來(lái)略微降低模231-1加法器的延遲。即計(jì)算完A+B后直接將進(jìn)位與A+B計(jì)算的和進(jìn)行相加從而實(shí)現(xiàn)取模運(yùn)算。然而,它的延遲也等于兩個(gè)31位加法器的延遲。基于上述兩種加法器文獻(xiàn)[61]提出了一種低延遲模231-1加法器的c)類(lèi)加法器。主要思想是同時(shí)計(jì)算A+B和A+B+1。A、B、1被設(shè)為一個(gè)加法器的三個(gè)輸入,A、B被設(shè)為另一個(gè)加法器的兩個(gè)輸入,然后結(jié)果由A+B的進(jìn)位選擇。相比與a)類(lèi)加法器c)類(lèi)加法器更符合并行計(jì)算,因?yàn)閍)類(lèi)加法器中要首先計(jì)算A+B的值而后再進(jìn)行A+B+1的計(jì)算,在數(shù)據(jù)選擇之前要經(jīng)歷2個(gè)時(shí)鐘周期,而c)類(lèi)加法器在1個(gè)時(shí)鐘周期同時(shí)計(jì)算A+B和A+B+1的數(shù)值,這個(gè)模231-1加法器的延遲大約是一個(gè)31位加法器的延遲。a)加法器1b)加法器2c)加法器3a)Adder1b)Adder2c)Adder3圖3-123種模231-1加法器的結(jié)構(gòu)Figure3-12structureofthreemodular231-1adders除上述3種方法文獻(xiàn)[62]中提出了CO-LFSR,通過(guò)控制溢出值來(lái)提高計(jì)算效率,其主體思想為預(yù)先為計(jì)算結(jié)果保留進(jìn)位,由上式可知在計(jì)算前的數(shù)據(jù)均為31bit大小,可拆分為3組,每組兩個(gè)31bit的相加過(guò)程,故計(jì)算結(jié)果的最大可能為34bit。mod運(yùn)算的具體過(guò)程如表達(dá)式(3-4)所示。 (3-4)其中add為34bit的中間計(jì)算結(jié)果??梢钥闯?,采用高低位相加取模的計(jì)算方式可以有效地省略計(jì)算步驟,只需要一步取模運(yùn)算即可完成計(jì)算。但是由于其加法組合邏輯過(guò)多,導(dǎo)致模塊內(nèi)布局布線(xiàn)產(chǎn)生的延遲太大,系統(tǒng)主頻會(huì)受到限制,文獻(xiàn)[62]中在硬件FPGA實(shí)現(xiàn)的主頻為209.346MHz。綜上考慮本文選取基本加法器3來(lái)實(shí)現(xiàn)mod231?1加法,并對(duì)其進(jìn)行了優(yōu)化。由于初始化階段中會(huì)有NLF層中的反饋輸入w參加運(yùn)算,不能進(jìn)行流水線(xiàn)超前計(jì)算,故在初始化階段中通過(guò)寄存器來(lái)緩存組合邏輯的中間結(jié)果,應(yīng)注意由于LFSR模塊中寄存器對(duì)中間變量進(jìn)行打拍,NLF模塊中產(chǎn)生的參數(shù)w同樣要進(jìn)行打拍。在進(jìn)入工作階段后LFSR中的運(yùn)算不包含反饋?zhàn)兞縲,此時(shí)便可以使用流水線(xiàn)超前計(jì)算數(shù)據(jù)。其系統(tǒng)運(yùn)算的流程框圖如圖3-13所示。圖3-13ZUC-256流水線(xiàn)處理過(guò)程Figure3-13Zuc-256pipelineprocess圖中LFSR_Sn’為經(jīng)過(guò)2n移位后的數(shù)據(jù),ADDn為取模加法運(yùn)算,REGn為寄存器單元,用以緩存在組合邏輯中經(jīng)ADD計(jì)算后的取模結(jié)果,ADD采用組合邏輯進(jìn)行運(yùn)算,而REG在時(shí)序邏輯中使用狀態(tài)機(jī)進(jìn)行加法運(yùn)算并緩存結(jié)果。主要依靠了流水線(xiàn)緩存以及超前計(jì)算的原理。在進(jìn)行第一次流水線(xiàn)緩存時(shí)要先經(jīng)歷3個(gè)狀態(tài)的潛伏期,第一個(gè)狀態(tài)下計(jì)算并緩存REG1與REG2的數(shù)據(jù),第二個(gè)狀態(tài)下計(jì)算并緩存REG1、REG2與REG3的數(shù)據(jù),第三個(gè)狀態(tài)下計(jì)算REG1~REG4的數(shù)據(jù),并在下一狀態(tài)下進(jìn)行移位并取模加法這一過(guò)程。超前計(jì)算則是利用了ZUC-256算法中的移位過(guò)程,圖2-3中的框圖表明,在經(jīng)過(guò)移位狀態(tài)后高位寄存器的數(shù)據(jù)會(huì)向低位寄存器中移位,如S3中的數(shù)據(jù)在下一周期會(huì)移位向S2,故在第一次進(jìn)行流水線(xiàn)緩存時(shí)自第二個(gè)時(shí)鐘周期開(kāi)始可以將表達(dá)式(3-1)中的數(shù)據(jù)變換為表達(dá)式(3-5)中的數(shù)據(jù)進(jìn)行運(yùn)算。僅在第一次運(yùn)算時(shí)有潛伏期,經(jīng)超前運(yùn)算后從第二次運(yùn)算開(kāi)始每一個(gè)時(shí)鐘周期完成一次運(yùn)算過(guò)程。 (3-5)經(jīng)過(guò)優(yōu)化后系統(tǒng)的整體主頻得到提升,提升前系統(tǒng)主頻為131.333MHz,經(jīng)過(guò)優(yōu)化后系統(tǒng)頻率達(dá)到了200MHz。如圖3-14所示。需要注意的是文獻(xiàn)[62]中使用芯片最高主頻為430MHz,內(nèi)部器件布局布線(xiàn)間延遲較低且收斂較好,而本文選用的xc7a100t系列芯片系統(tǒng)的最高頻率為200MHz,若是更替芯片系統(tǒng)主頻仍有較大的提升空間。a)優(yōu)化前系統(tǒng)頻率a)Systemfrequencybeforeoptimizationb)優(yōu)化后系統(tǒng)頻率b)Optimizedsystemfrequency圖3-14優(yōu)化前后ZUC-256算法時(shí)鐘頻率Figure3-14Clockfrequencyofzuc-256algorithmbeforeandafteroptimization1.3.4BR模塊與NLF模塊設(shè)計(jì)根據(jù)2.2節(jié)中介紹的算法流程本文進(jìn)行了ZUC-256算法的VerilogHDL代碼實(shí)現(xiàn)。BR模塊即2.2.3小節(jié)中的比特重組層,此模塊主要是利用硬件邏輯中的拼接將抽取后的數(shù)據(jù)進(jìn)行重新組合,考慮其不涉及運(yùn)算的特點(diǎn)本文選用組合邏輯進(jìn)行BR模塊設(shè)計(jì),組合邏輯在實(shí)現(xiàn)簡(jiǎn)單功能時(shí)較為常見(jiàn),在理想狀態(tài)下一旦輸入信號(hào)發(fā)生變化輸出信號(hào)立刻會(huì)發(fā)生改變。但一旦組合邏輯過(guò)多或涉及到大量運(yùn)算時(shí)組合邏輯會(huì)使系統(tǒng)產(chǎn)生較大走線(xiàn)延時(shí)。根據(jù)2.2.3小節(jié)中表達(dá)式(2-3)設(shè)計(jì)過(guò)程如3-1所示。其中{a,b}在VerilogHDL硬件描述語(yǔ)言中表示拼接,將a與b的數(shù)據(jù)拼接為一個(gè)參數(shù)。LFSR_Sn為L(zhǎng)FSR模塊中的輸出,Xn為重組后BR模塊的輸出,為32bit變量。3-1BR模塊硬件設(shè)計(jì)第2章中提到的非線(xiàn)性函數(shù)F層本文在設(shè)計(jì)時(shí)例化為NLF模塊。根據(jù)表達(dá)式(2-4)以及2.2.4小節(jié)中介紹R1和R2為記憶單元保存,故對(duì)其定義為寄存器賦值,而表達(dá)式(2-4)中其余變量均可以設(shè)計(jì)為線(xiàn)網(wǎng)型變量,通過(guò)組合邏輯實(shí)現(xiàn),其部分實(shí)現(xiàn)過(guò)程如3-2所示:其中^為程序中的異或運(yùn)算,|為程序中的或運(yùn)算,ww、w1、w2、l1、l2、L1、L2、r1、r2為32bit的線(xiàn)網(wǎng)型變量,+則為mod232加法運(yùn)算。3-2NLF模塊硬件設(shè)計(jì)上述設(shè)計(jì)中1到3對(duì)應(yīng)2.2.4小節(jié)中的表達(dá)式(2-4),4到7主要對(duì)應(yīng)2.2.4小節(jié)中的表達(dá)式(2-5)中非線(xiàn)性變換,非線(xiàn)性函數(shù)層中的S盒在硬件設(shè)計(jì)中可以看作將表2-1與表2-2的數(shù)據(jù)放在兩個(gè)256深度的ROM中,9到10中的sn_out則是將非線(xiàn)性變換后的兩個(gè)32bit數(shù)值L1和L2拆分為8個(gè)8bit輸入作為ROM的輸入地址,而后將讀出的數(shù)據(jù)按(3-5)中的拼接方式拼接成兩個(gè)中間變量r1與r2。同時(shí)本文采用流管理模式,在NLF層內(nèi)部有一個(gè)控制自身運(yùn)行的狀態(tài)機(jī),控制記憶單元R1與R2以及作用于密鑰流生成的w的賦值。狀態(tài)轉(zhuǎn)移圖如圖3-15所示,具體運(yùn)行流程如下:圖3-15NLF模塊狀態(tài)轉(zhuǎn)移圖Figure3-15NLFmodulestatetransitiondiagram在復(fù)位狀態(tài)時(shí),所有信號(hào)置零。R1和R2是2.2.4小節(jié)中的寄存器中間變量,w為表達(dá)式(2-4)中的W,用以產(chǎn)生初始化階段參與運(yùn)算的變量u,以及參與工作狀態(tài)下密鑰的產(chǎn)生,cnt為初始化階段計(jì)數(shù)器,key_cnt為密鑰生成計(jì)數(shù)器,flag為密鑰生成標(biāo)志信號(hào),為1時(shí)生成有效的密鑰流,復(fù)位后狀態(tài)機(jī)處在S0狀態(tài);在S0狀態(tài)下R1和R2以及w變量保持為0,當(dāng)檢測(cè)到觸發(fā)信號(hào)trigger時(shí),跳轉(zhuǎn)至S1狀態(tài);在S1狀態(tài)時(shí)將參數(shù)r1、r2、ww的值賦給R1、R2以及w,而后經(jīng)過(guò)一個(gè)時(shí)鐘周期自動(dòng)跳轉(zhuǎn)至S2狀態(tài),由圖3-11可以發(fā)現(xiàn)在初始化階段時(shí)LFSR層每進(jìn)行一次移位要經(jīng)歷3個(gè)狀態(tài),為了使初始化階段中LFSR層與NLF層用于計(jì)算的數(shù)據(jù)不會(huì)由于時(shí)鐘周期不同產(chǎn)生計(jì)算錯(cuò)誤,本文在NLF層也設(shè)計(jì)了S2~S4共3個(gè)打拍狀態(tài),當(dāng)S4狀態(tài)到來(lái)時(shí),若cnt<31則證明仍處于初始化階段,狀態(tài)機(jī)自動(dòng)跳轉(zhuǎn)回S1狀態(tài)重復(fù)S1~S4狀態(tài),當(dāng)cnt=31時(shí)則跳轉(zhuǎn)至S5狀態(tài);在S5狀態(tài)重復(fù)S1狀態(tài)的賦值操作,與上一流程原理相同,LFSR層在工作階段第一輪的計(jì)算中要經(jīng)歷S5~S8三個(gè)超前計(jì)算的流程,故NLF層的S5~S8狀態(tài)為打拍狀態(tài),此時(shí)R1、R2以及w保持S5狀態(tài)的賦值狀態(tài),當(dāng)經(jīng)歷4個(gè)時(shí)鐘周期后,狀態(tài)機(jī)由S5狀態(tài)跳轉(zhuǎn)至S9狀態(tài);當(dāng)處在S9狀態(tài)時(shí)重復(fù)S5狀態(tài)的賦值過(guò)程,key_cnt開(kāi)始計(jì)數(shù),需要注意ZUC中的密鑰流序列要舍棄工作狀態(tài)中產(chǎn)生的第一輪w值,故當(dāng)key_cnt=1時(shí)flag信號(hào)拉高為1,當(dāng)cnt2計(jì)數(shù)到65536時(shí)密鑰流生成結(jié)束,返回S0狀態(tài)等待觸發(fā)。1.3.5密鑰隨機(jī)性測(cè)試由于圖像為RGB888格式,而ZUC-256算法每周期為32bit密鑰,故需要對(duì)密鑰進(jìn)行截取,并對(duì)截取后剩余的24bit密鑰進(jìn)行隨機(jī)性測(cè)試。自相關(guān)測(cè)試是利用FPGA仿真導(dǎo)出的5000組密鑰流序列在Matlab上進(jìn)行測(cè)試并進(jìn)行了歸一化處理,測(cè)試結(jié)果如圖3-16所示。從測(cè)試結(jié)果可以看出自相關(guān)函數(shù)僅在0處有峰值,可以證明序列有較好的隨機(jī)性。圖3-16ZUC-256密鑰自相關(guān)測(cè)試Figure3-16ZUC-256algorithmfullfsimulationresultsNIST是美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)委員會(huì)發(fā)布的考評(píng)偽隨機(jī)序列隨機(jī)性的一種方法,通過(guò)分析十五項(xiàng)測(cè)試標(biāo)準(zhǔn)的P-value值來(lái)判斷數(shù)據(jù)是否存在偽隨機(jī)性,一般測(cè)試的P-value值小于0.01時(shí)即未通過(guò)測(cè)試,大于0.01即測(cè)試序列為隨機(jī)序列。本文在仿真產(chǎn)生的密鑰流序列中使用VerilogHDL硬件描述語(yǔ)言導(dǎo)出仿真中的30000000bit數(shù)據(jù),在虛擬機(jī)Ubuntu20.0.4Linux系統(tǒng)下使用sts-2.1.2軟件將數(shù)據(jù)分為30組進(jìn)行NIST隨機(jī)性測(cè)試,測(cè)試結(jié)果如表3-4所示。表3-4ZUC-256序列NIST測(cè)試結(jié)果Table3-4NISTtestresultsofZUC-256sequence測(cè)試編號(hào)NIST測(cè)試名稱(chēng)P-VALUE值是否通過(guò)測(cè)試1FrequencyTest0.253551Success2BlockFrequency0.213309Success3CumulativeSums0.602458Success4RUNs0.122325Success5LongestRun0.862344Success6Rank0.054199Success7FFT0.407091Success8NonOverlappingTemplate0.862344Success9OverlappingTemplate0.671779Success10Universal0.407091Success11ApproximateEntropy0.213309Success12RandomExcursions0.350485Success13RandomExcursionsVariant0.350485Success14LinearComplexity0.148094Success15Serial0.671779Success0.580689Success分析結(jié)果可得出ZUC-256算法經(jīng)過(guò)截取后的密鑰流序列有較強(qiáng)隨機(jī)性,可以認(rèn)定其為偽隨機(jī)序列并且可以應(yīng)用于圖像加解密算法系統(tǒng)的設(shè)計(jì)。1.4Arnold模塊設(shè)計(jì)本小節(jié)主要描述Arnold置亂模塊的具體設(shè)計(jì)以及如何使用RAM實(shí)現(xiàn)數(shù)據(jù)地址變換的實(shí)現(xiàn)流程,Arnold置亂算法的頂層模塊設(shè)計(jì)如圖3-17所示。頂層信號(hào)列表如表3-5所示。圖3-17Arnold算法頂層模塊Figure3-17ToplevelmoduleofArnoldalgorithm表3-5Arnold算法頂層信號(hào)列表Table3-5toplevelsignallistofArnoldalgorithm信號(hào)名稱(chēng)信號(hào)位寬輸入/輸出信號(hào)功能clk1bit輸入時(shí)鐘信號(hào)rst_n1bit輸入復(fù)位信號(hào)en1bit輸入加密觸發(fā)信號(hào)de1bit輸入解密觸發(fā)信號(hào)read1bit輸入初始數(shù)據(jù)讀出信號(hào)enr1bit輸入單次加密后寫(xiě)使能data_inr24bit輸入單次加密后輸入數(shù)據(jù)data_out24bit輸出置亂/逆置亂數(shù)據(jù)流flag1bit輸出圖像數(shù)據(jù)有效信號(hào)本文設(shè)計(jì)的Arnold算法模塊的頂層架構(gòu)如圖3-18所示。頂層模塊中包含了ARNOLD_Z置亂模塊、ARNOLD_N逆置亂模塊、Arnold置亂算法中內(nèi)部用于流管理模式的RAM_CTRL控制模塊、兩個(gè)存儲(chǔ)單元RAM1與RAM2。ARNOLD子模塊的狀態(tài)轉(zhuǎn)移圖如圖3-19所示,模塊的具體運(yùn)行驟如下:rst_n信號(hào)拉低后系統(tǒng)復(fù)位,原始數(shù)據(jù)存入RAM2中,復(fù)位結(jié)束后狀態(tài)機(jī)進(jìn)入S0狀態(tài);在S0狀態(tài)中接到read信號(hào),即ZUC-256算法模塊中產(chǎn)生密鑰的有效標(biāo)志位zuc_log信號(hào),此時(shí)由RAM_CTRL模塊控制讀出原始圖像數(shù)據(jù)進(jìn)入下一模塊進(jìn)行數(shù)據(jù)加解密操作,同時(shí)flag信號(hào)拉高,表明讀出數(shù)據(jù)有效可用,狀態(tài)機(jī)跳轉(zhuǎn)至下S1狀態(tài);圖3-18Arnold算法模塊頂層架構(gòu)Figure3-18toplevelarchitectureofArnoldalgorithmmodule圖3-19簡(jiǎn)單雙口RAM框架圖Figure3-19frameworkofsimpledualportRAMS1狀態(tài)下中接收到觸發(fā)信號(hào)en則判斷為加密模式,跳轉(zhuǎn)至S2狀態(tài);若是接收到觸發(fā)信號(hào)de則判斷為解密模式,跳轉(zhuǎn)至S3狀態(tài);在狀態(tài)中接到enr信號(hào),首先將RAM1的寫(xiě)使能拉高,利用計(jì)數(shù)器將加解密后的數(shù)據(jù)寫(xiě)入RAM1中。在下一狀態(tài)由狀態(tài)機(jī)給出RAM1的讀地址,同時(shí)狀態(tài)機(jī)給出地址作用于ARNOLD_Z正變換,ARNOLD_Z變換模塊將單坐標(biāo)地址轉(zhuǎn)化為雙坐標(biāo)地址,而后將雙坐標(biāo)經(jīng)過(guò)坐標(biāo)變換后的地址再變?yōu)樾碌膯巫鴺?biāo)地址作為RAM2的寫(xiě)地址將數(shù)據(jù)寫(xiě)入RAM2中,當(dāng)達(dá)到預(yù)設(shè)置亂次數(shù)后回到S0狀態(tài);在解密模式中,重復(fù)上述過(guò)程。唯一區(qū)別是經(jīng)過(guò)RAM_CTRL模塊給出的原始地址old_addr地址輸入至ARNOLD_N逆模塊,經(jīng)過(guò)ARNOLD_N模塊內(nèi)部進(jìn)行坐標(biāo)變換得到新的地址作為RAM2的寫(xiě)地址,達(dá)到逆置亂次數(shù)后系統(tǒng)工作結(jié)束,重新回到S0狀態(tài)。軟件實(shí)現(xiàn)置亂的原理大多為建立兩個(gè)矩陣,將圖像存入原始矩陣之中,按照(2-8)中置亂表達(dá)式對(duì)原始矩陣中橫縱坐標(biāo)進(jìn)行變換存入新矩陣中。硬件實(shí)現(xiàn)圖像置亂相較于軟件實(shí)現(xiàn)比較難以實(shí)現(xiàn)坐標(biāo)變換,主要在于FPGA中的存儲(chǔ)資源如RAM等均為單地址,而圖像的坐標(biāo)變換是針對(duì)圖像的二維坐標(biāo)進(jìn)行運(yùn)算的??紤]到上述因素,本文選用簡(jiǎn)單雙口RAM作為圖像的存儲(chǔ)單元。Vivado中簡(jiǎn)單雙口RAM的硬件框圖如圖3-20所示。圖3-20中wr_addr為RAM寫(xiě)地址,rd_addr為RAM的讀地址,data_in為RAM寫(xiě)入數(shù)據(jù),data_out為RAM讀出數(shù)據(jù),clk為RAM的時(shí)鐘信號(hào),在時(shí)鐘上升沿進(jìn)行寫(xiě)入或讀出操作。wea為RAM的控制信號(hào),在高電平時(shí)寫(xiě)地址變化則可以成功寫(xiě)入數(shù)據(jù),低電平時(shí)讀地址變化則可以成功讀出數(shù)據(jù)。以正變換為例利用雙口RAM可以只需要利用讀寫(xiě)地址分別進(jìn)行取商運(yùn)算和取模運(yùn)算即可得到縱坐標(biāo)與橫坐標(biāo),利用橫縱坐標(biāo)進(jìn)行地址的變換,并將變換后的坐標(biāo)重新轉(zhuǎn)換為1維地址控制數(shù)據(jù)的寫(xiě)入。表達(dá)式(2-8)可以轉(zhuǎn)化為單地址邏輯語(yǔ)言實(shí)現(xiàn),具體過(guò)程如程序3-3所示。其中x進(jìn)行的為取模256運(yùn)算,y進(jìn)行的為除256運(yùn)算,wr_x和wr_y均為取模256運(yùn)算,wr_addr右側(cè)拼接符中為乘256的運(yùn)算。圖3-20簡(jiǎn)單雙口RAM框架圖Figure3-20frameworkofsimpledualportRAM

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論