版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
某图像加密系统的硬件设计案例目录TOC\o"1-3"\h\u32758某图像加密系统的硬件设计案例 1319051.1图像加密系统框架及硬件设计 1272271.2密钥传输模块设计 513271.3ZUC-256模块设计及其优化 869421.3.1ZUC-256模块的硬件架构 8119701.3.2流管理模式与LFSR模块设计 965151.3.3关键路径优化 13140071.3.4BR模块与NLF模块设计 1672541.3.5密钥随机性测试 19294111.4Arnold模块设计 20230181.5加密模块与显示模块设计 2387011.5.1加密模块设计 23232321.5.2LCD显示模块设计 251.1图像加密系统框架及硬件设计通过算法特性分析本文设计了一种基于序列密码ZUC-256算法的图像加密系统,系统的框架图如图3-1所示。图3-1图像加密流程Figure3-1Imageencryptionprocess由于ZUC-256算法的一次一密特性以及流密钥的快速生成特性,只要输入密钥生成器中的初始密钥与初始向量相同,在触发信号的作用下便可以多次生成相同的密钥流序列。图像解密流程如图3-2所示,解密流程中两次逆扩散利用了序列密码的流加密模式,即使用ZUC-256算法产生的密钥流与明文数据进行异或,并加入了密文反馈项参与加密。而后固定住Arnold置乱和逆置乱的参数与置乱次数,使得加密与解密过程基本相同,在设计子模块时可以节省许多资源。 图3-2图像解密流程Figure3-2Imagedecryptionprocess根据图3-1与图3-2的流程框架,本文设计了图像加解密流程的硬件架构。整个硬件架构可以划分为PLL锁相环、RST复位模块、KEY密钥传输模块、ZUC-256算法模块、Arnold置乱算法模块、加解密数据模块以及LCD图像显示模块。图像加密系统的顶层硬件架构如图3-3所示,其中顶层模块的输入输出信号在表3-1中进行了简要说明。图3-3图像加密系统顶层架构Figure3-3toplevelarchitectureofimageencryptionsystem表3-1图像加密系统顶层信号列表Table3-1toplevelsignallistofimageencryptionsystem信号名称信号位宽输入/输出信号功能sys_clk_p1bit输入差分时钟输入sys_clk_n1bit输入差分时钟输入rst_n1bit输入复位信号en1bit输入加密控制信号de1bit输入解密控制信号rxd1bit输入串口转并输入txd1bit输出并寄存转串口输出lcd_pwn1bit输出LCD显示控制信号lcd_dclk1bit输出LCD33M扫描时钟lcd_r8bit输出红色信号输出lcd_g8bit输出绿色信号输出lcd_b8bit输出蓝色信号输出lcd_hsync1bit输出lcd行同步信号lcd_vsync1bit输出lcd场同步信号lcd_de1bit输出lcd显示控制信号介绍完顶层架构与信号列表后对图像加解密系统的过程进行如下描述:首先使用差分时钟输入接入锁相环产生全局时钟信号与LCD显示屏的驱动时钟,通过锁相环产生的全局时钟可以有效去除时钟偏移和抖动,同时产生locked信号作为时钟稳定标志,当其为高电平时证明分频后时钟稳定;locked信号进入复位模块后与系统复位信号reset共同生成输出rst_n复位信号,低电平复位有效。当rst_n复位拉高时复位结束,并且PLL时钟此时已经生成稳定时钟,图像转化为coe文件存入RAM中,系统准备结束可以正常工作;系统运行之初首先通过串口发送8位初始向量与初始密钥进入系统,通过FIFO转换为32位输出,并通过寄存器拼接产生256位初始密钥key与184位初始向量iv,而后拉高触发信号trigger并将其输入ZUC-256算法模块;ZUC-256算法模块在接到触发信号trigger与初始向量及初始密钥后开始运行,经初始化阶段迭代后进入工作阶段。舍弃1轮数据后zuc_log信号拉高,此时代表产生的zuc_out数据有效,同时开始进行密钥流序列计数。当计到图像像素总数时,zuc_log信号拉低,密钥流停止产生;当zuc_log信号拉高时,从ARNOLD置乱模块中的RAM1中读出原始图像的数字图像像素,同时zuc_log信号作为加密模块的触发信号输入到ED数据加密模块,ED加密模块产生一个en_flag信号,即当加密数据en_data有效输出时en_flag信号拉高电平,当en_flag电平由高变低时加密结束;en_flag信号在ARNOLD中作为RAM1的写使能将ED模块产生的数据输入写入RAM1中。当接收到en加密触发信号时,ARNOLD置乱模块产生置乱的新地址,通过递加的地址顺序读出RAM1中存储的数据并按置乱后的新地址写入RAM2中,重复如下过程直至达到预期置乱次数,产生flag信号再次触发ZUC-256模块2次产生密钥流,并读出最终置乱数据与密钥流进行加密;解密流程与加密流程类似,当接收到de解密触发信号时,产生新地址模块为ARNOLD逆置乱模块,作为两个RAM的写地址,当逆置乱次数达到加密置乱次数后结束,并重新触发ZUC-256算法产生密钥重复上述过程;当结束置乱过程后读出RAM2中的置乱结果进入ED模块中进行二次加解密,并将加解密数据通过ed_lcd信号输入LCD显示模块进行图像的显示;在进行加解密过程后数据送入LCD显示模块,同时控制信号拉高,lcd_vsync和lcd_hsync信号拉高,同时开始按从左到右从上到下的顺序扫描图像在LCD液晶显示屏上进行显示。至此图像加密系统的硬件架构设计结束,接下来的小节将对图像加密系统中涉及的子模块进行描述。1.2密钥传输模块设计考虑到要将ZUC-256算法所需的初始密钥与初始向量装入ZUC-256算法模块中,并提供触发信号trigger使ZUC-256算法开始进行迭代。本文设计了ZUC-256算法的密钥传输模块KEY,其作用是通过上位机向FPGA硬件中输入初始密钥与初始向量,并产生触发信号trigger使ZUC-256算法模块开始工作。考虑到信号逐级传递时无法查看信号是否作用于下一模块,本文利用状态机控制数据传递,当数据输入下一模块后向上位机输入标志信号,证明数据成功输入。KEY顶层模块如图3-4所示,顶层信号列表如表3-2所示。图3-4KEY顶层模块Figure3-4Keytoplevelmodule表3-2KEY模块信号列表Table3-2KEYmodulesignallist信号名称信号位宽输入/输出信号功能clk1bit输入时钟信号rst_n1bit输入复位信号rxd1bit输入串口转并输入txd1bit输出并寄存转串口输出key256bit输出初始密钥iv184bit输出初始向量trigger1bit输出ZUC-256触发标志KEY模块的内部顶层架构如图3-5所示。其中DIV模块为系统内部分频模块,用以产生串口通信时设定波特率使用的内部时钟,本文选用9600的波特率从上位机使用串口助手进行密钥的发送,即在200MHz的主频时钟下进行1302分频。RX和TX为串口通信的收发模块,RX模块用以通过串口助手接收上位机发送的初始密钥和初始向量,而TX模块则是在初始向量与初始密钥拼接完成后向上位机发送成功标志。由于串口模块仅能实现8位拼接,故本文在KEY模块内部引入了一个同步FIFO用以加快密钥拼接,经过FIFO将串口传输数据转为32位data_fsm数据进入内部状态机KEY_FSM中,同时利用FIFO中的空信号empty和读数据valid有效信号作为触发状态跳转的条件。图3-5KEY模块顶层内部架构Figure3-5Toplevelinternalarchitectureofkeymodule图3-6KEY模块状态流程图Figure3-6KeymodulestatusflowchartKEY模块的状态运行图如图3-6所示,预期设计流程如下:rst_n为低电平时进行复位,复位时除flag信号外所有信号置零,此时KEY_FSM模块处在S0等待状态,flag信号为高时证明此时无数据返回上位机,fifo空信号empty=1,证明此时无数据写入fifo;串口将初始密钥发送至RX模块,当数据输入RX模块时KEY_FIFO模块的写请求拉高,将8bit数据写入KEY_FIFO模块,同时empty信号拉低为0;当KEY_FSM模块接收到empty=0时,拉高KEY_FIFO模块的读请求,同时跳转至S1状态;当读请求拉高时延迟一拍valid有效信号会拉高,此时KEY_FSM模块中32bit的输出数据data_fsm写入KEY_FSM模块的寄存器中,当计数器计至8时清空计数器,并进行密钥拼接,拼接完成跳转至S2状态;串口将初始向量发送至RX模块,当再次接收到KEY_FIFO模块中信号empty=0时,KEY_FSM模块会跳转至S3状态;由于初始向量为184bit,故当KEY_FSM模块计数器计至6时清空计数器,并截断第6个data_fsm的高8位进行向量拼接,拼接完成后进入S4状态;在S4下将trigger触发信号拉高触发ZUC-256算法模块,将初始密钥与初始向量送入ZUC-256算法模块进行密钥流生成,并在下一时钟跳转至S5状态;S5状态下串口发送初始数据成功装填信息给上位机,此时flag信号拉低,当信息发送完flag信号重新拉高,此时无信息返回上位机,状态机跳转回S0状态。1.3ZUC-256模块设计及其优化ZUC-256算法主要实现图像加解密的扩散部分,通过给定初始密钥与初始向量装入系统经过32轮迭代产生密钥流序列,通过产生的密钥流序列与图像明文数据进行加解密,从而改变图像的像素来达到隐藏重要信息的目的。1.3.1ZUC-256模块的硬件架构考虑到系统设计中的节拍延迟及系统的稳定性,结合第2章中2.2小节的相关理论基础,依照FPGA设计自顶向下的设计理念本文设计了ZUC-256的顶层模块,ZUC-256算法的顶层模块如图3-7所示。图3-7ZUC-256算法顶层模块Figure3-7Toplevelmoduleofzuc-256algorithm表3-3给出了ZUC-256模块的顶层信号列表。图3-8给出了ZUC-256算法硬件设计中的顶层展开架构图,ZUC-256算法模块包括LFSR子模块、BR子模块、NLF子模块,LFSR中对应2.2小节共有16个寄存器参与移位,但仅有8个寄存器为重组层提供数据。经过BR重组后的数据作为输入进入NLF模块,NLF模块中对应非线性函数层的运算,同时承担产生密钥流序列的任务。根据顶层展开架构设计的具体运行流程如下所示:表3-3ZUC-256顶层信号列表Table3-3ZUC-256toplevelsignallist信号名称信号位宽输入/输出信号功能clk1bit输入时钟信号rst_n1bit输入复位信号trigger1bit输入触发信号key256bit输入初始密钥iv184bit输入初始向量zuc_out32bit输出迭代后产生密钥zuc_log1bit输出密钥流有效信号 图3-8ZUC-256算法顶层框架Figure3-8toplevelframeworkofzuc-256algorithmrst_n信号拉低后系统复位,此时三个子模块都处在等待状态;当接收到触发信号trigger后初始密钥与初始向量和常数先进行拼接,LFSR模块开始进行初始化阶段,按照信号传递顺序依次进入BR模块与NLF模块,此时产生的数据w截取最低位后余下的31位数据作为信号u反馈回LFSR模块中;系统开始运行后在LFSR模块与NLF模块中各有一个6bit计数器,用以计数初始化迭代轮数,当计数器计到32之后LFSR模块进入工作模式,此时u信号不参与运算,此时内部状态机会预先缓存计算结果,而后开始产生有效密钥流序列。此时zuc_log信号拉高,当产生足够明文数据使用的密钥流序列之后运算结束。1.3.2小节至1.3.4小节中将会对ZUC-256算法实现过程及优化方法进行阐述。1.3.2流管理模式与LFSR模块设计在FPGA电路实现过程中,大多依靠有限状态机与逻辑电路相结合以保障系统的稳定性,如文献[60]中针对ZUC-128算法使用控制管理模式进行算法的实现,控制管理模式的基本框图如图3-9所示。在系统运行过程中外部触发信号进入有限状态机FSM,状态机通过内部状态变化在不同阶段发出不同的控制信号传递给子模块,子模块接收控制信号产生数据流信号和新的触发信号,数据流输入下一模块参与新的运算,而新的触发信号进入状态机触发新的状态。使用控制管理模式可以使整个系统层次分明,稳定性提升。但这种设计方式有一些潜在弊端,以图3-9为例,控制信号进入子模块时会延时一拍作用,同理子模块的触发信号作用于状态机时也会延时一拍,会导致数据延时两拍输出。图3-9控制管理模式框图Figure3-9blockdiagramofcontrolmanagementmode本文选用了流管理模式来实现ZUC-256算法,流管理模式的框图如图3-10所示。流管理模式在子模块内部使用状态机来实现模块自身功能,即逻辑较多的模块内部均存在一个控制自身的状态机,虽然增大了一些代码量,但是可以有效缓解寄存器打拍现象,原有的控制管理模式打拍的两拍可缩减为一拍,模块越多节省的节拍越多,密钥流产生的时间节点也会提前。需要注意在流管理模式中存在一定的潜伏期弊端,即当系统的子模块过多时,从后方模块向最前方模块要数据时,由于子模块的个数过多,数据延时拍数较大会导致运算不稳定易错,在这种情况下可以在中间插入FIFO进行数据中间的超前缓存,由于本文设计模块数量相对合理,不需要利用FIFO进行数据的超前缓存。图3-10流管理模式框图Figure3-10flowmanagementmodeblockdiagram在ZUC-256算法模块的硬件电路设计中由于比特重组层BR在原理上较为简单,为中间数据抽取重组,用简单的组合逻辑就能实现。而非线性函数层除R1与R2两个寄存单元外其余变量数据即出即用,也均可为组合逻辑所实现。但通过分析ZUC-256算法可以发现,ZUC-256算法的一些计算流程为顺序进行,并且在优化过程中使用寄存器对数据进行打拍,由于FPGA并行执行的特点会导致密钥流生成错误。针对这一问题本文采用有限状态机FSM来进行LFSR层与NLF层的硬件设计。FPGA中FSM状态机主要分为2大类:根据状态运转是否与输入相关联可分为Mealy型和Moore型两大类,前者在设计中输出与状态和输入相关联,只有在特定状态接收到输入才会进行运转产生输出;后者相对简单,输出不与输入相关联,只要到达指定状态便可产生。在FPGA中,Mealy类状态机最后的输出判断条件为状态机当前状态与输入状态,当且仅当二者同时满足条件时才会发生变化;Moore类状态机最后的输出判断条件为状态机当前状态。除状态机类型外,在利用VerilogHDL硬件描述语言实现状态机时还可以选择使用不同段式状态机。FPGA中状态机分为一段式、二段式和三段式状态机。一段式状态机的使用一个always块进行代码编写,相对代码量较多;二段式状态机使用两个always块对状态机的状态跳转和跳转触发条件进行编写;三段式状态机使用三个always块对状态跳转,触发条件以及在各个状态下的信号变化分别进行编写。尽管二段式与三段式状态机在进行代码编写时相对代码量较少,代码风格较为规范,但由于其在进行跳转触发条件编写时在always块内触发非时钟触发,而是使用特定敏感信号进行触发,且在always块内使用组合逻辑进行赋值,极易形成锁存器锁存数据导致状态机瘫痪。与二段式状态机相比一段式状态机设计更为稳定,符合本文预期设计要求,故选用一段式状态机实现算法。在程序运行过程中,任意时刻都将处在状态机的某一个过程中,当状态机检测到某一触发信号时,可能从当前状态跳转到下一状态,有时根据设计需要也可能保持当前状态。设计过程中通常用状态转移图来表述状态机的跳转过程,下面以LFSR模块为例分析状态机实现子模块的过程。LFSR层的状态转移图如图3-11所示。其具体运行流程如下:当开发板上电后按下复位键,此时电路处于等待状态,复位结束状态机处在S0状态。当检测到触发信号trigger时,系统将184bit初始向量与256bit初始密钥以及16个7bit常数按一定顺序装入S15到S0共十六个寄存器中,装载完成后进入下一状态S1;在S1到S3状态对LFSR层数据进行取模运算,在完成每一阶段的运算后状态机自动进行跳转至下一状态,当跳转至S4状态后,开始进行移位操作,同时init_cnt开始计数并进行判断。若init_cnt计数器小于31,则重复S1至S4这一过程;若init_cnt计数器等于31,则跳转至S5状态;在S5状态置0所有与反馈参数w有关的寄存器值,而后进入工作阶段。S6~S8中主要实现工作阶段中取模运算的超前计算,S9阶段在进行取模运算的同时开始进行工作阶段的移位,同时开始提供产生的密钥流数据,key_cnt开始计数。当产生足够的密钥流后状态机自动跳转回S0等待下一个触发信号的到来。通过分析可以得出,跳转回初始状态后,只要检测到触发信号,状态机会自动生成所需密钥,而当中间阶段触发信号到来时状态机不会因为触发信号到来而随意跳转导致系统不稳定。图3-11LFSR层状态转移图Figure3-11LFSRlayerstatetransitiondiagram1.3.3关键路径优化所谓关键路径(criticalpath),即参与电路运行次数最多并且逻辑较为复杂的电路,其造成的走线延迟过长,从而容易产生不稳定信号,在硬件描述语言中一般位于其进行数据运算的逻辑语言处。在硬件电路中,大到系统小到模块都有关键路径。由于关键路径的电路结构最为复杂,扇出系数较大,故而其决定了整个系统的性能,系统的最高频率就是由关键路径的延时决定的。ZUC-256算法模块中调用最多延时最长的路径为LFSR层中的S16运算过程,故表达式(3-1)中给出的计算过程即为密钥流模块中的关键路径。 (3-1)在VerilogHDL硬件描述语言中,2n即代表左移n位,可以用拼接符实现移位操作,具体实现过程如表达式(3-2)所示。其中Sn为31bit的寄存器,{}为拼接符,用以将不同寄存器中抽取的数据整合在一个寄存器中。 (3-2)除拼接移位之外,如何解决mod运算也是一个重要的问题。传统的mod运算如表达式(3-3)所示。 (3-3)表达式中a与b代表LFSR中31bit的数据,c代表a与b相加的和,在包含进位的情况下其最大位宽为32bit。d则代表对c取模后产生的31bit的数据,用以后续运算。据此可以看出在有限域GF(231-1)中的加法规则是对计算结果的进位与数据本身进行累加。根据有限域的加法规则,传统的计算过程应该是进行多步骤的累积加法。即先将两个数进行取模运算,然后将运算后的结果加到第三个数上,重复这一过程直到所有输入均完成计算。虽然FPGA可以高速并行地处理计算过程,但过度的使用组合逻辑会极大的提高系统的走线延迟,从而导致处理效率较低。文献[61]中针对ZUC算法的关键路径给出了3种取模加法器,如图3-12所示。图中a)类加法器是原始加法器。这是模231-1加法器的直接硬件实现。该架构包含两个31位加法器和一个多路复用器,首先计算A+B的结果,而后将其结果与1相加,利用进位选择计算结果,其延迟主要是两个31位加法器的延迟。图中b)类加法器与原始加法器相比,它通过减少复用器来略微降低模231-1加法器的延迟。即计算完A+B后直接将进位与A+B计算的和进行相加从而实现取模运算。然而,它的延迟也等于两个31位加法器的延迟。基于上述两种加法器文献[61]提出了一种低延迟模231-1加法器的c)类加法器。主要思想是同时计算A+B和A+B+1。A、B、1被设为一个加法器的三个输入,A、B被设为另一个加法器的两个输入,然后结果由A+B的进位选择。相比与a)类加法器c)类加法器更符合并行计算,因为a)类加法器中要首先计算A+B的值而后再进行A+B+1的计算,在数据选择之前要经历2个时钟周期,而c)类加法器在1个时钟周期同时计算A+B和A+B+1的数值,这个模231-1加法器的延迟大约是一个31位加法器的延迟。a)加法器1b)加法器2c)加法器3a)Adder1b)Adder2c)Adder3图3-123种模231-1加法器的结构Figure3-12structureofthreemodular231-1adders除上述3种方法文献[62]中提出了CO-LFSR,通过控制溢出值来提高计算效率,其主体思想为预先为计算结果保留进位,由上式可知在计算前的数据均为31bit大小,可拆分为3组,每组两个31bit的相加过程,故计算结果的最大可能为34bit。mod运算的具体过程如表达式(3-4)所示。 (3-4)其中add为34bit的中间计算结果。可以看出,采用高低位相加取模的计算方式可以有效地省略计算步骤,只需要一步取模运算即可完成计算。但是由于其加法组合逻辑过多,导致模块内布局布线产生的延迟太大,系统主频会受到限制,文献[62]中在硬件FPGA实现的主频为209.346MHz。综上考虑本文选取基本加法器3来实现mod231−1加法,并对其进行了优化。由于初始化阶段中会有NLF层中的反馈输入w参加运算,不能进行流水线超前计算,故在初始化阶段中通过寄存器来缓存组合逻辑的中间结果,应注意由于LFSR模块中寄存器对中间变量进行打拍,NLF模块中产生的参数w同样要进行打拍。在进入工作阶段后LFSR中的运算不包含反馈变量w,此时便可以使用流水线超前计算数据。其系统运算的流程框图如图3-13所示。图3-13ZUC-256流水线处理过程Figure3-13Zuc-256pipelineprocess图中LFSR_Sn’为经过2n移位后的数据,ADDn为取模加法运算,REGn为寄存器单元,用以缓存在组合逻辑中经ADD计算后的取模结果,ADD采用组合逻辑进行运算,而REG在时序逻辑中使用状态机进行加法运算并缓存结果。主要依靠了流水线缓存以及超前计算的原理。在进行第一次流水线缓存时要先经历3个状态的潜伏期,第一个状态下计算并缓存REG1与REG2的数据,第二个状态下计算并缓存REG1、REG2与REG3的数据,第三个状态下计算REG1~REG4的数据,并在下一状态下进行移位并取模加法这一过程。超前计算则是利用了ZUC-256算法中的移位过程,图2-3中的框图表明,在经过移位状态后高位寄存器的数据会向低位寄存器中移位,如S3中的数据在下一周期会移位向S2,故在第一次进行流水线缓存时自第二个时钟周期开始可以将表达式(3-1)中的数据变换为表达式(3-5)中的数据进行运算。仅在第一次运算时有潜伏期,经超前运算后从第二次运算开始每一个时钟周期完成一次运算过程。 (3-5)经过优化后系统的整体主频得到提升,提升前系统主频为131.333MHz,经过优化后系统频率达到了200MHz。如图3-14所示。需要注意的是文献[62]中使用芯片最高主频为430MHz,内部器件布局布线间延迟较低且收敛较好,而本文选用的xc7a100t系列芯片系统的最高频率为200MHz,若是更替芯片系统主频仍有较大的提升空间。a)优化前系统频率a)Systemfrequencybeforeoptimizationb)优化后系统频率b)Optimizedsystemfrequency图3-14优化前后ZUC-256算法时钟频率Figure3-14Clockfrequencyofzuc-256algorithmbeforeandafteroptimization1.3.4BR模块与NLF模块设计根据2.2节中介绍的算法流程本文进行了ZUC-256算法的VerilogHDL代码实现。BR模块即2.2.3小节中的比特重组层,此模块主要是利用硬件逻辑中的拼接将抽取后的数据进行重新组合,考虑其不涉及运算的特点本文选用组合逻辑进行BR模块设计,组合逻辑在实现简单功能时较为常见,在理想状态下一旦输入信号发生变化输出信号立刻会发生改变。但一旦组合逻辑过多或涉及到大量运算时组合逻辑会使系统产生较大走线延时。根据2.2.3小节中表达式(2-3)设计过程如3-1所示。其中{a,b}在VerilogHDL硬件描述语言中表示拼接,将a与b的数据拼接为一个参数。LFSR_Sn为LFSR模块中的输出,Xn为重组后BR模块的输出,为32bit变量。3-1BR模块硬件设计第2章中提到的非线性函数F层本文在设计时例化为NLF模块。根据表达式(2-4)以及2.2.4小节中介绍R1和R2为记忆单元保存,故对其定义为寄存器赋值,而表达式(2-4)中其余变量均可以设计为线网型变量,通过组合逻辑实现,其部分实现过程如3-2所示:其中^为程序中的异或运算,|为程序中的或运算,ww、w1、w2、l1、l2、L1、L2、r1、r2为32bit的线网型变量,+则为mod232加法运算。3-2NLF模块硬件设计上述设计中1到3对应2.2.4小节中的表达式(2-4),4到7主要对应2.2.4小节中的表达式(2-5)中非线性变换,非线性函数层中的S盒在硬件设计中可以看作将表2-1与表2-2的数据放在两个256深度的ROM中,9到10中的sn_out则是将非线性变换后的两个32bit数值L1和L2拆分为8个8bit输入作为ROM的输入地址,而后将读出的数据按(3-5)中的拼接方式拼接成两个中间变量r1与r2。同时本文采用流管理模式,在NLF层内部有一个控制自身运行的状态机,控制记忆单元R1与R2以及作用于密钥流生成的w的赋值。状态转移图如图3-15所示,具体运行流程如下:图3-15NLF模块状态转移图Figure3-15NLFmodulestatetransitiondiagram在复位状态时,所有信号置零。R1和R2是2.2.4小节中的寄存器中间变量,w为表达式(2-4)中的W,用以产生初始化阶段参与运算的变量u,以及参与工作状态下密钥的产生,cnt为初始化阶段计数器,key_cnt为密钥生成计数器,flag为密钥生成标志信号,为1时生成有效的密钥流,复位后状态机处在S0状态;在S0状态下R1和R2以及w变量保持为0,当检测到触发信号trigger时,跳转至S1状态;在S1状态时将参数r1、r2、ww的值赋给R1、R2以及w,而后经过一个时钟周期自动跳转至S2状态,由图3-11可以发现在初始化阶段时LFSR层每进行一次移位要经历3个状态,为了使初始化阶段中LFSR层与NLF层用于计算的数据不会由于时钟周期不同产生计算错误,本文在NLF层也设计了S2~S4共3个打拍状态,当S4状态到来时,若cnt<31则证明仍处于初始化阶段,状态机自动跳转回S1状态重复S1~S4状态,当cnt=31时则跳转至S5状态;在S5状态重复S1状态的赋值操作,与上一流程原理相同,LFSR层在工作阶段第一轮的计算中要经历S5~S8三个超前计算的流程,故NLF层的S5~S8状态为打拍状态,此时R1、R2以及w保持S5状态的赋值状态,当经历4个时钟周期后,状态机由S5状态跳转至S9状态;当处在S9状态时重复S5状态的赋值过程,key_cnt开始计数,需要注意ZUC中的密钥流序列要舍弃工作状态中产生的第一轮w值,故当key_cnt=1时flag信号拉高为1,当cnt2计数到65536时密钥流生成结束,返回S0状态等待触发。1.3.5密钥随机性测试由于图像为RGB888格式,而ZUC-256算法每周期为32bit密钥,故需要对密钥进行截取,并对截取后剩余的24bit密钥进行随机性测试。自相关测试是利用FPGA仿真导出的5000组密钥流序列在Matlab上进行测试并进行了归一化处理,测试结果如图3-16所示。从测试结果可以看出自相关函数仅在0处有峰值,可以证明序列有较好的随机性。图3-16ZUC-256密钥自相关测试Figure3-16ZUC-256algorithmfullfsimulationresultsNIST是美国国家标准与技术委员会发布的考评伪随机序列随机性的一种方法,通过分析十五项测试标准的P-value值来判断数据是否存在伪随机性,一般测试的P-value值小于0.01时即未通过测试,大于0.01即测试序列为随机序列。本文在仿真产生的密钥流序列中使用VerilogHDL硬件描述语言导出仿真中的30000000bit数据,在虚拟机Ubuntu20.0.4Linux系统下使用sts-2.1.2软件将数据分为30组进行NIST随机性测试,测试结果如表3-4所示。表3-4ZUC-256序列NIST测试结果Table3-4NISTtestresultsofZUC-256sequence测试编号NIST测试名称P-VALUE值是否通过测试1FrequencyTest0.253551Success2BlockFrequency0.213309Success3CumulativeSums0.602458Success4RUNs0.122325Success5LongestRun0.862344Success6Rank0.054199Success7FFT0.407091Success8NonOverlappingTemplate0.862344Success9OverlappingTemplate0.671779Success10Universal0.407091Success11ApproximateEntropy0.213309Success12RandomExcursions0.350485Success13RandomExcursionsVariant0.350485Success14LinearComplexity0.148094Success15Serial0.671779Success0.580689Success分析结果可得出ZUC-256算法经过截取后的密钥流序列有较强随机性,可以认定其为伪随机序列并且可以应用于图像加解密算法系统的设计。1.4Arnold模块设计本小节主要描述Arnold置乱模块的具体设计以及如何使用RAM实现数据地址变换的实现流程,Arnold置乱算法的顶层模块设计如图3-17所示。顶层信号列表如表3-5所示。图3-17Arnold算法顶层模块Figure3-17ToplevelmoduleofArnoldalgorithm表3-5Arnold算法顶层信号列表Table3-5toplevelsignallistofArnoldalgorithm信号名称信号位宽输入/输出信号功能clk1bit输入时钟信号rst_n1bit输入复位信号en1bit输入加密触发信号de1bit输入解密触发信号read1bit输入初始数据读出信号enr1bit输入单次加密后写使能data_inr24bit输入单次加密后输入数据data_out24bit输出置乱/逆置乱数据流flag1bit输出图像数据有效信号本文设计的Arnold算法模块的顶层架构如图3-18所示。顶层模块中包含了ARNOLD_Z置乱模块、ARNOLD_N逆置乱模块、Arnold置乱算法中内部用于流管理模式的RAM_CTRL控制模块、两个存储单元RAM1与RAM2。ARNOLD子模块的状态转移图如图3-19所示,模块的具体运行骤如下:rst_n信号拉低后系统复位,原始数据存入RAM2中,复位结束后状态机进入S0状态;在S0状态中接到read信号,即ZUC-256算法模块中产生密钥的有效标志位zuc_log信号,此时由RAM_CTRL模块控制读出原始图像数据进入下一模块进行数据加解密操作,同时flag信号拉高,表明读出数据有效可用,状态机跳转至下S1状态;图3-18Arnold算法模块顶层架构Figure3-18toplevelarchitectureofArnoldalgorithmmodule图3-19简单双口RAM框架图Figure3-19frameworkofsimpledualportRAMS1状态下中接收到触发信号en则判断为加密模式,跳转至S2状态;若是接收到触发信号de则判断为解密模式,跳转至S3状态;在状态中接到enr信号,首先将RAM1的写使能拉高,利用计数器将加解密后的数据写入RAM1中。在下一状态由状态机给出RAM1的读地址,同时状态机给出地址作用于ARNOLD_Z正变换,ARNOLD_Z变换模块将单坐标地址转化为双坐标地址,而后将双坐标经过坐标变换后的地址再变为新的单坐标地址作为RAM2的写地址将数据写入RAM2中,当达到预设置乱次数后回到S0状态;在解密模式中,重复上述过程。唯一区别是经过RAM_CTRL模块给出的原始地址old_addr地址输入至ARNOLD_N逆模块,经过ARNOLD_N模块内部进行坐标变换得到新的地址作为RAM2的写地址,达到逆置乱次数后系统工作结束,重新回到S0状态。软件实现置乱的原理大多为建立两个矩阵,将图像存入原始矩阵之中,按照(2-8)中置乱表达式对原始矩阵中横纵坐标进行变换存入新矩阵中。硬件实现图像置乱相较于软件实现比较难以实现坐标变换,主要在于FPGA中的存储资源如RAM等均为单地址,而图像的坐标变换是针对图像的二维坐标进行运算的。考虑到上述因素,本文选用简单双口RAM作为图像的存储单元。Vivado中简单双口RAM的硬件框图如图3-20所示。图3-20中wr_addr为RAM写地址,rd_addr为RAM的读地址,data_in为RAM写入数据,data_out为RAM读出数据,clk为RAM的时钟信号,在时钟上升沿进行写入或读出操作。wea为RAM的控制信号,在高电平时写地址变化则可以成功写入数据,低电平时读地址变化则可以成功读出数据。以正变换为例利用双口RAM可以只需要利用读写地址分别进行取商运算和取模运算即可得到纵坐标与横坐标,利用横纵坐标进行地址的变换,并将变换后的坐标重新转换为1维地址控制数据的写入。表达式(2-8)可以转化为单地址逻辑语言实现,具体过程如程序3-3所示。其中x进行的为取模256运算,y进行的为除256运算,wr_x和wr_y均为取模256运算,wr_addr右侧拼接符中为乘256的运算。图3-20简单双口RAM框架图Figure3-20frameworkofsimpledualportRAM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院健康检查与疾病预防制度
- 公共交通服务质量投诉处理制度
- 2026年中级电工实操技能笔试模拟题
- 2026年营销知识考点指南及题目
- 2026年新闻传播专业研究生入学考试模拟题
- 2026年旅游规划目的地管理考试题
- 2026年康复辅助器具租赁合同
- 2025年吕梁职业技术学院马克思主义基本原理概论期末考试模拟题带答案解析(夺冠)
- 古代茶人介绍课件
- 2025 小学六年级科学上册科学精神名言赏析课件
- 嵊州市二年级上学期期末检测语文试卷(PDF版含答案)
- 2024年国务院安全生产和消防工作考核要点解读-企业层面
- 中建双优化典型案例清单
- 小学数学解题研究(小学教育专业)全套教学课件
- 数据生命周期管理与安全保障
- 早期胃癌出院报告
- 吊顶转换层设计图集
- 优胜教育机构员工手册范本规章制度
- 钾钠氯代谢与紊乱
- 安徽省小型水利工程施工质量检验与评定规程(2023校验版)
- 山地造林施工设计方案经典
评论
0/150
提交评论