4.2 S9-S7盒函数模块设计 http://www.paper51.com 4.2.1 S9-S7盒设计思想 内容来自论文无忧网 www.paper51.com 由KASUMI算法结构原理可以知道,S7-S9盒函数是可以用两种思想解释的,一个是用逻辑表达式按位计算,通过对于输入的每一位之间的与运算和异或运算得到输出的一位,另外一个是一一对应关系的方法实现,因为用逻辑运算之后每一个输入会对应一个不会相同的值在数值范围内(S7盒是0-128,S9盒是0-512)。设计时采用的是第一种方法,是因为两个原因:1.由于逻辑运算的方法是计算输出值的原理方法,较适合硬件设计实现思想,形成的面积较小;2.由于S9盒需要把512个不同且无次序的值编写进程序,易出错且不易验证。 http://www.paper51.com 4.2.2 S9-S7盒设计结构简述 paper51.com
内容来自www.paper51.com 图6 S9-S7盒设计结构流程图 copyright paper51.com
由图可以知道数据的流向,整个函数的运行通过输入始能信号控制,对于数据运算的激活以及数据输出的的始能控制信号的保持起作用。信号在输出之前在寄存器中保存,并且激活输出始能信号,当外部调用函数FI调用后,只需要通过这个始能信号就可以知道是否读取输出数据。 http://www.paper51.com
4.2.3 S9-S7函数模块实例测试 内容来自www.paper51.com S9以及S7函数模块外部接口包括: 内容来自论文无忧网 www.paper51.com
l 数据信号接口: 内容来自www.paper51.com 数据输入:S(X)in 将外部数据信号接入函数模块的接口(S9盒为9位;S7盒为7位) 内容来自www.paper51.com 数据输出:S(X)out 将函数模块处理完成的数据输出到外部的接口(S9盒为9位;S7盒为7位) copyright paper51.com l 控制信号接口: copyright paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) 内容来自论文无忧网 www.paper51.com 输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) 内容来自论文无忧网 www.paper51.com 全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) copyright paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) 内容来自论文无忧网 www.paper51.com 内容来自www.paper51.com 图7 S7盒函数模块输入输出信号仿真结果 内容来自www.paper51.com 内容来自论文无忧网 www.paper51.com 图8 S9盒函数模块输入输出信号仿真结果 内容来自论文无忧网 www.paper51.com 图7是S7函数模块的仿真结果,时钟周期clk为10ns,每间隔5个周期送入一个数据,然后设置输入始能信号在任意位置,如图设置了2个,分别是在输入为0和5时,在4个周期后得到数据54和34,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 paper51.com
图8是S9函数模块的仿真结果,时钟周期clk为10ns,每间隔5个周期送入一个数据,然后设置输入始能信号在任意位置,如图设置了2个,分别是在输入为0和8时,在4个周期后得到数据167和38,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 内容来自论文无忧网 www.paper51.com 4.3 FI函数模块设计说明 内容来自论文无忧网 www.paper51.com 4.3.1 FI函数模块设计思想 http://www.paper51.com FI函数模块按照KASUMI结构原理,需要调用2次S9盒函数模块和2次S7函数模块,把一个16位的数据输入到此模块里,然后分成7位和9位的两个部分,分别输入到调用的S7盒和S9盒中,之后再与输入的KI密钥的两个部分即KI1(7位)和KI2(9位)做异或运算,再将得到值放入下一轮的S7盒和S9盒中。在这个设计中,因为要把两个长度不同的数据进行异或运算,所以需要对于数据长度进行扩展或者缩减。 copyright paper51.com
4.3.2 FI函数模块设计结构简述 http://www.paper51.com 图9 FI函数模块设计流程图 内容来自论文无忧网 www.paper51.com 由此图可以知道数据在FI函数模块中的数据大体流向,具体计算结构在算法结构中已经介绍,这个图例显示了用HDL语言描述的函数结构,由于在硬件模块设计中尤其重视数据信号的稳定传输性,所以在FI函数数据部分采用状态机辅助,而信号处理的I/O方面借助输入输出始能信号来进行控制。 内容来自论文无忧网 www.paper51.com 4.3.3 FI函数模块实例测试 内容来自论文无忧网 www.paper51.com
FI函数模块外部接口包括: http://www.paper51.com l 数据信号接口: 内容来自论文无忧网 www.paper51.com 数据输入:FIdatain 将外部数据信号接入函数模块的接口(16位) http://www.paper51.com 数据输出:FIdataout 将函数模块处理完成的数据输出到外部的接口(16位) 内容来自论文无忧网 www.paper51.com 密钥输入:KI 将外部分配的密钥数据信号接入模块的接口(16位) copyright paper51.com l 控制信号接口: 内容来自www.paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) http://www.paper51.com 输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) http://www.paper51.com
全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) http://www.paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) 内容来自论文无忧网 www.paper51.com 内容来自www.paper51.com 图10 FI函数模块I/O信号仿真结果 http://www.paper51.com 图10是FI函数模块的仿真结果,时钟周期clk为10ns,输入数据是16进制的B05D,并且密钥KI为CDEF,在6个周期后输入始能置1,在28个周期后得到数据8F94,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 copyright paper51.com 4.4 FO函数模块设计说明 内容来自www.paper51.com 4.4.1 FO函数模块设计思想 内容来自www.paper51.com FO函数是KASUMI主体模块直接调用的上层函数。FO函数依照KASUMI算法结构需要调用FI函数模块3次。FO函数模块先将输入的32位数据流分为相等长度的左右各16位数据,然后在子密钥KO、KI和FI函数的共同运算3轮后得到一个32位输出。这个函数模块十分规范,是对称数据块运算,相对设计比FI函数模块简单许多。 内容来自www.paper51.com
4.4.2 FO函数模块设计结构简述 http://www.paper51.com
http://www.paper51.com
图11 FO函数模块设计流程图 paper51.com 从上图可以知道在FO函数模块中的数据的流动以及密钥的使用方法,在FO函数模块设计时候,也采用了状态机设计方法,为了保证调用模块时候数据的稳定流动传输。密钥KI和KO都是从主模块输入的48位密钥,在FI函数模块内部被分解为3个16位的KI1||KI2||KI3和KO1||KO2||KO3子密钥参加模块内部计算。 内容来自www.paper51.com 4.4.3 FO函数模块实例测试 copyright paper51.com FO函数模块外部接口包括: copyright paper51.com l 数据信号接口: 内容来自www.paper51.com 数据输入:FOdatain 将外部数据信号接入函数模块的接口(32位) http://www.paper51.com 数据输出:FOdataout 将函数模块处理完成的数据输出到外部的接口(32位) 内容来自www.paper51.com 密钥输入:KI 将外部分配的密钥数据信号接入模块的接口(48位) 内容来自论文无忧网 www.paper51.com
密钥输入:KO 将外部分配的密钥数据信号接入模块的接口(48位) paper51.com
l 控制信号接口: 内容来自论文无忧网 www.paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) http://www.paper51.com
输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) 内容来自论文无忧网 www.paper51.com 全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) 内容来自www.paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) 内容来自www.paper51.com
内容来自论文无忧网 www.paper51.com 图12 FO函数模块I/O信号仿真结果 http://www.paper51.com 图12是FO函数模块的仿真结果,时钟周期clk为10ns,输入数据是16进制的FE9C7210,并且密钥KI为01233210CDEF、密钥KO为FFFFFFFFFFFF,在45ns时输入始能置1,在955ns后得到数据1C8D9319,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 内容来自www.paper51.com 4.5 FL函数模块设计说明 内容来自论文无忧网 www.paper51.com 4.5.1 FL函数模块设计思想 http://www.paper51.com FL函数模块是KASUMI算法中较易实现的模块,与其他KASUMI函数中调用的FI、FO函数模块相比,结构简单并且逻辑思路清晰,不需要进行复杂的逻辑计算或者多轮函数调用并且对每轮调用函数输出结果进行逻辑运算。 paper51.com
4.5.2 FL函数模块设计结构简述 paper51.com 图13 FL函数模块设计流程图 copyright paper51.com
FL函数模块就是把数据分为两部分后先在子密钥KL1的作用下计算一部分数据,然后把计算结果放到输出并且结果和另外一半数据在KL2的作用下得到另外一半的输出结果,之后把2个部分合并就生成了函数计算结果。 内容来自论文无忧网 www.paper51.com 4.5.3 FL函数模块实例测试 内容来自www.paper51.com
FL函数模块外部接口包括: http://www.paper51.com l 数据信号接口: http://www.paper51.com
数据输入:FLdatain 将外部数据信号接入函数模块的接口(32位) http://www.paper51.com
数据输出:FLdataout 将函数模块处理完成的数据输出到外部的接口(32位) copyright paper51.com
密钥输入:KL 将外部分配的密钥数据信号接入模块的接口(32位) copyright paper51.com l 控制信号接口: http://www.paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) paper51.com
输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) paper51.com
全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) 内容来自论文无忧网 www.paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) 内容来自www.paper51.com
内容来自www.paper51.com
图14 FO函数模块I/O信号仿真结果 copyright paper51.com 图14是FO函数模块的仿真结果,时钟周期clk为10ns,输入数据是16进制的3FAB3FC1,并且密钥KI为FFFF7654,在40ns时输入始能置1,在205ns后得到数据D2054097,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 内容来自论文无忧网 www.paper51.com 4.6 密钥生成函数模块设计说明 http://www.paper51.com 4.6.1 密钥生成函数模块设计思想 http://www.paper51.com 其实我们这个函数模块正确的名字应该是:子密钥生成函数模块。因为密钥是在KASUMI函数模块被更上层的模块调用时直接传输进来的。这个密钥生成模块的作用是生成要进入KASUMI函数8轮计算的基础子密钥Ki1—Ki8和Kj1—Kj8。因为这些基础子密钥在进入如FL或者FO函数模块时,只需要进行一些移位运算就可以了,而在数字电路设计中,这些移位运算是可以直接将密钥生成函数模块的输出线路换位接在所调用模块的密钥输入接口上即可,不需要进行多余的计算后再把数据输入到被调用函数模块,所以设计起来不是十分困难,而困难的是如何在KASUMI函数模块中将这个密钥函数合理地安排进去,产生良好的数据输出,而不会又消耗很少的资源。 内容来自www.paper51.com 4.6.2 密钥生成函数模块设计结构简述 内容来自www.paper51.com
paper51.com
图15 密钥生成函数模块设计流程图 copyright paper51.com 由图可以看出来,原始密钥Key进入子密钥函数生成模块后,经过简单的从高位到低位的分割,得到子密钥Ki1—Ki8,然后将这些子密钥与对应常数进行异或运算,得到另外的子密钥Kj1—Kj8,然后输出,这是一个简单的模块,为了把输入的原始密钥转换为在KASUMI模块中可以使用的原始子密钥。 http://www.paper51.com
4.6.3 密钥生成函数模块实例测试 内容来自论文无忧网 www.paper51.com
密钥函数模块外部接口包括: 内容来自论文无忧网 www.paper51.com
l 数据信号接口: 内容来自论文无忧网 www.paper51.com 密钥数据输入:Keyin 将外部密钥数据信号接入函数模块的接口(128位) copyright paper51.com
子密钥数据输出:KI1—KI8\KJ1—KJ8 将函数模块处理完成的数据输出到外部的接口(每个子密钥16位) http://www.paper51.com l 控制信号接口: http://www.paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) paper51.com 输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) copyright paper51.com 全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) copyright paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) copyright paper51.com
paper51.com
图16 密钥生成函数模块I/O信号仿真结果 内容来自www.paper51.com 图16是密钥生成函数模块的仿真结果,时钟周期clk为10ns,通过观察,本模块实现了密钥数据的分割功能,并且输出始能在输出子密钥数据得到后立刻置1。实现了模块的设计要求。 内容来自www.paper51.com
4.7 KASUMI函数模块设计说明 http://www.paper51.com 4.7.1 KASUMI函数模块设计思想 http://www.paper51.com
KASUMI函数模块是这个FPGA实现中的最顶层模块,它通过多次调用FO函数模块、FL函数模块并且在密钥生成模块完成8轮逻辑运算来实现KASUMI算法的加密操作。KASUMI函数模块设计结构简述 内容来自www.paper51.com
paper51.com 图17KASUMI函数模块设计 http://www.paper51.com
4.7.2 KASUMI函数模块实例测试 http://www.paper51.com KASUMI函数模块外部接口包括: 内容来自www.paper51.com l 数据信号接口: copyright paper51.com 数据输入:Datain 将外部数据信号接入函数模块的接口(64位) paper51.com 数据输出:Dataout 将函数模块处理完成的数据输出到外部的接口(64位) copyright paper51.com 密钥输入:Key将外部分配的密钥数据信号接入模块的接口(128位) http://www.paper51.com l 控制信号接口: http://www.paper51.com 输入始能信号:ena_in 是外部输入数据能够使用的标志位(1位,高电平有效) 内容来自www.paper51.com 输出始能信号:ena_out 是函数模块内部处理完成后通知外部数据可用的标志位(1位,高电平有效) paper51.com
全局同步时钟信号:clk 是同步全体函数模块的控制时钟信号(1位,高电平有效) paper51.com 同步步复位信号:rst 用来将函数模块内部状态回复到初始状态(1位,低电平有效) 内容来自www.paper51.com http://www.paper51.com 图18 密钥生成函数模块I/O信号仿真结果 copyright paper51.com 图18是KASUMI函数模块的仿真结果,时钟周期clk为10ns,输入数据是16进制的1234567890CDEF,密钥为Key234567890CDEF1234567890CDEF,在50ns时输入始能置1,在9125ns后得到数据DE85CC817ECAB0AD,并且输出始能在输出数据得到后立刻置1。实现了模块的设计要求。 内容来自www.paper51.com 4.8 KASUMI算法解密模块 内容来自论文无忧网 www.paper51.com 4.8.1 KASUMI算法解密模块设计思想 内容来自论文无忧网 www.paper51.com 4.8.1.1 Feistel结构介绍 copyright paper51.com KASUMI算法是一个Feistel结构的分组加密算法。 copyright paper51.com Feistel结构把任何函数转化为一个置换,它是由Horst Feistel在设计Lucifer分组密码(Luctfer密码在后来发展成为数据加饼标难即DES)时发明的。许多分组密码采用了Feiste1 http://www.paper51.com 结构或者类似于Feistel的结构,例如DES、RC5、FEAL、GoST、LOKI和B1ownsh等。 http://www.paper51.com
Feiste1结构是典型的迭代结构,它是—种乘积密码。 paper51.com 假设Feiste1结构的加密算法的输入是长度为2n比特的明文分组m,在加密时.算法的 paper51.com
输入明文分组将被分为两个长为n比特的部分和,即m=。数据的这两个部分经过r轮结构相同的加密变换后产生密文分组。第i轮将以第i—l轮的运算结果和作为输入,在子密钥 (由算法密钥K,或称为用户密钥或者密码密钥,经过扩展得到的供每一轮所使用的密钥,或称为圈密钥)的控制下,进行密码变换。所有的r轮结构都相同。每—轮中,首先将对数据左边—半进行替换,替换的方法是对数据右边一半应用F函数(通常又称为圈函数):然后用这个函数的输出和数据的左边一半做异或:最后,未经改变的右边一半数据将与左边数据进行互换,作为下一轮的输入。F函数以每一轮的子密钥和数据的左边一半作为参数,在这里密钥与数据相结合,密钥控制着对数据的替换,保证算法的混乱和扩散特性。 paper51.com 内容来自论文无忧网 www.paper51.com 图19 Feitel结构示意图 内容来自www.paper51.com 用数学表达式来表达,即:对于第i轮加密变换, http://www.paper51.com
内容来自论文无忧网 www.paper51.com
paper51.com 这里,表示按位异或,F是圈而数,是第i轮的子密钥。 http://www.paper51.com 在加密的最后——轮,Feiste1结构略去了最后的左右交换(这样做的目的是保证加密与解密的整个过程都完全相同,使得算法uJ以同时用十加密与解密),即 paper51.com paper51.com
paper51.com 最后,算法输出的密文即为。 内容来自www.paper51.com Feiste1结构保证了加密过程的可逆性。假设己知密文,由于异或的自逆性, copyright paper51.com copyright paper51.com 并且,,这样,我们可以求得,。依此类推,最终我们可以求出,这样的一个过程便是解密过程。可以发现,Feistel结构的密码,解密过程与加密过程充全几乎完全相同,惟一的不同之处是解密过程需要按照相反的顺序使用于密钥,两者可以使用相同的算法过程。 内容来自www.paper51.com 注意:Feiste1结构中并不要求F函数是否可逆。根据上面的过程,只要能够重新获得每轮中F函数的输入,那么,整个算法就是可逆的。 copyright paper51.com 在某种程度上,Feistel结构简化了密码的设计工作,密码工作者只需要集中精力设计“好的”F函数(以及于密钥产生算法),保证严函数具有良好的混乱与扩散特性,这样,Feiste1结构的密码便自动地保证了整个密码算法的密码特性以及可逆性。 copyright paper51.com
Feistel结构密码的缺点是它的扩散性似乎有些慢,例如,算法需要两轮才能改变输入的每一比特,这样,如果要达到较高的密码强度,一般采用Feistel结构的密码算法迭代次数比较多,通常采用16次迭代。 内容来自www.paper51.com
4.8.1.2 KASUMI解密模块设计 http://www.paper51.com KASUMI函数解密方法从思想上就是将其加密过程的结构反转,完全反向。将原本的明文输入端变成明文输出端,而密文输出端变成密文输入端,然后整个流程变为从下至上的逆循环,由此得到明文。 内容来自论文无忧网 www.paper51.com
http://www.paper51.com 图20KASUMI算法加密/解密流程结构图 http://www.paper51.com 由流程图即可以知道加密与解密结构除了输入输出变化和密钥使用顺序变化外,再无其他不同。需要注意的是:加密过程在最后一轮运算完毕后需要将计算结果交换后输出成密文,而解密过程在最初便是先交换输入的左右位置,然后再运算,经过8轮运算后的结果不用交换直接输出。 内容来自www.paper51.com |