ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:319.17KB ,
资源ID:8970247      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8970247.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验1 AES算法分析及其IP核体系结构设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验1 AES算法分析及其IP核体系结构设计.docx

1、实验1 AES算法分析及其IP核体系结构设计实验报告1:AES算法分析及其IP核体系结构设计一、实验目的理解并掌握AES算法的细节,提出一个AES IP核的体系结构设计方案。二、实验内容1、学习AES算法,理解并掌握AES算法的原理、结构及其需要的基本运算。2、在对算法进行深入分析的基础上,提出一个AES IP核的体系结构设计方案。三、实验环境PC机1台、Modelsim仿真软件1套。四、实验步骤1、AES算法学习和分析1.1 AES的加密过程AES的加密过程可以用下面的伪语言代码描述:Cipher(plaintext,ciphertext,CiperKey) /初始化 State = pla

2、intext; KeyExpansion(CipherKey, ExpandedKey);/生成扩展密钥ExpandedKey AddRoundKey(State, ExpandedKey);/前Nr 1轮 for(r=1;rNr;r+) SubBytes(State); ShiftRow(State); MixColumn(State); AddRoundKey(State, ExpandedKey); /最后一轮 SubBytes(State); ShiftRow(State); AddRoundKey(State, ExpandedKey); Ciphertext = state; 其中

3、plaintext是输入明文,可以定义成plaintext4Nb数组;ciphertext是输出密文,可以定义成ciphertext4Nb数组;CipherKey是加密密钥,可以定义成CipherKey4Nk数组;圈密钥ExpandedKey可表示成wNb(Nr+1)数组;State是状态,整个加密过程都是针对State进行的。(1)S盒变换 SubBytes()S盒变换又称字节替代变换,是一个针对字节的非线性、可逆变换。它将状态中的每一个字节进行非线性变换转换为另一个字节,作用在状态上每个字节的变换可以表示为SubBytes(state)。可以将变换SubBytes()对各种可能字节的变换结

4、果排成一个表,如表2-3所示,该表称为AES的S盒。通过查表可以直接得到SubBytes()的输出,这样可以加快程序执行的速度。如果状态中的一个字节为xy,则S盒中第x行第y列的字节就是SubBytes()的输出。表2-3 S盒变换表Tab.2-3 The table of S-box transformation列 号 y0103456789ABCDEF行号x0637C777BF26B6FC53001672BFED7AB761CA82C97DFA5947F0ADD4A2AF9CA472C02B7FD9326363FF7CC34A5E5F171D83115304C723C31896059A07

5、1280E2EB27B275409832C1A1B6E5AA0523BD6B329E32F84553D100ED20FCB15B6ACBBE394A4C58CF6D0EFAAFB434D338545F9027F503C9FA8751A3408F929D38F5BCB6DA2110FFF3D28CD0C13EC5F974417C4A77E3D645D1973960814FDC222A908846EEB814DE5E0BDBAE0323A0A4906245CC2D3AC629195E479BE7C8376D8DD54EA96C56F4EA657AAE08CBA78252E1CA6B4C6E8DD7

6、41F4BBD8B8AD703EB5664803F60E613557B986C11D9EEE1F8981169D98E949B1E87E9CE5528DFF8CA1890DBFE6426841992D0FB054BB16(2)行移位变换 ShiftRows()行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同。第0行不移位,保持不变,第1行移动C1个字节,第2行移动C2个字节,第3行移动C3个字节。C1,C2,c3值依赖于分组长度Nb的大小。位移量C1、C2和C3与分组长度Nb有关,如下表:表2-4对应于不同分组长度的位移量Tab.3-3 the displacement corre

7、sponding to different packet lengthNbC1C2C3412361238134在AES加密标准中Nb=4。(3)列混合变换MixColumns() 列混合变换是对一个状态逐列进行变换,它将一个状态的每一列视为有限域GF(28)上的一个多项式。令 则 其中,是AES选择的一个逆元多项式,表示模乘法。将表示为矩阵乘法:(2-3)相乘之后每一列的结果如下:(4)轮密钥加AddRoundKey()变换轮密钥加是将轮密钥简单地与状态矩阵进行逐比特异或运算。每个轮密钥由密钥扩展算法得到,轮密钥的长度为Nb个字。轮密钥按顺序取自扩展密钥ExpandedKey,扩展密钥是由原始

8、密钥经过扩展后得到的,扩展密钥的长度为Nb(Nr+1)个字。1.2 AES的密钥扩展过程AES算法得到初始密钥K后,首先经过一个密钥扩展过程以产生所有的轮密钥。密钥扩展共产生Nb ( Nr+1 )个字,算法初始需要一个Nb个字的集合,接着每个轮操作都需要Nb个字的密钥数据。最终的密钥流程共包含了一个4字节字的线性数组,用wi表示,。扩展密钥程序涉及RotWord()、SubWord()和Rcon()模块。它们的工作方式如下:(1) 位置变换RotWord():把一个4字节的输入序列(a0,a1,a2,a3)循环左移一个字节后输出。例如将(a0,a1,a2,a3)循环左移一个字节后输出为(a1,

9、a2,a3,a0)。(2) SubWord():把一个4字节的输入序列(a0,a1,a2,a3)的每一个字节进行S盒变换,然后作为输出。(3) 变换Rcon:Rcon是一个10个字节的常量数组,Rconi是一个32比特字符串(xi-1,00,00,00)。这里x=(02),xi-1是x=(02)的(i-1)次幂的十六进制表示,即 x0=(01),x=(02),xi=02xi-1。这里“”表示有限域GF(28)中的乘法。密钥扩展前Nk个字就是外部密钥CipherKey,以后的字wi等于它前一个字wi-1与前Nk个字wi-Nk的异或,wi =wi-NkSubWord(RotWord(wi-1)Rc

10、oni/Nk。输入密钥扩展的整个过程可以用下面的程序段描述:KeyExpansion(byte key4*NK,word wNb*(Nr+1),Nk)begin word temp i=0 while (i Nk) wi = word(key4 * i,key4 * i+1,key4 * i+2,key4 * i+3 i = i+1 end while i = Nk while (i 6 and i mod Nk = 4) temp = Subword (temp) end if w i = wi - Nk xor temp i = i +1 end while end2、AES IP核的体系

11、结构设计方案2.1 AES模块框图及外部信号说明图2 AES模块框图表1 AES模块外部信号说明信号名称信号宽度传输方向信号含义clk1位输入时钟信号rst1位输入复位信号,1有效。load1位输入数据装载使能信号,用于控制输入明/密文、密钥、S盒配置数据等,1有效。address8位输入寄存器或RAM地址,用于表示明文/密文/密钥寄存器、S盒RAM单元。keyexpen1位输入密钥扩展使能信号,1有效。keyexprdy1位输出密钥扩展完成标识信号,1有效。staenc1位输入开始加密使能信号,1有效。stadec1位输入开始解密使能信号,1有效。encdecrdy1位输出加/解密运算完成标

12、识信号,1有效。din16位输入输入数据总线,用于输入明/密文、密钥、配置数据等。dout16位输出输出数据总线,用于输出加/解密结果。shift1位输入结果移位输出使能信号,1有效。有效时,每个时钟周期移位输出16位结果。2.2 AES模块体系结构AES模块包括明/密文和密钥寄存器、密钥扩展、加/解密运算、控制等多个子模块,其系统结构图如下图所示。图3 AES模块系统结构图每个子模块的功能如下:1. 明文/密文/密钥寄存器的功能:在时钟信号clk的上升沿,若寄存器写使能信号write有效,则将输入数据总线din上的16位数据写入明文/密文/密钥寄存器的高16位,同时将寄存器原来的数据右移16

13、位放入寄存器的低112位。若寄存器写使能信号write无效,则寄存器保持原来的数据不变。由此可见,1个128位的数据需要经过8个时钟周期,通过8次写操作才能装入寄存器。 2. 密钥扩展模块的功能:AES算法首先得到初始密钥K后,执行一个密钥扩展程序以产生所有的轮密钥。密钥扩展共产生Nb ( Nr+1 )个32bit字,算法初始需要一个Nb个32bit字的集合,接着每个轮操作都需要Nb个32bit字的密钥数据。3. 加密/解密模块的功能:实现AES加密和解密。 AES加密过程由一个初始密钥加(异或)变换和十个轮变换构成,其中除第10个轮变换外,每个轮变换都是一样的,都是由字节代替(S盒变换)、行

14、移位、列混合、密钥加4个子变换组成,第10个轮变换由字节代替、行移位、密钥加3个子变换组成,不包括列混合变换。 通过类似分析,可以得出AES解密过程包括逆S盒变换、09乘字节、0b乘字节、0d乘字节、0e乘字节、异或共6种操作。4. 控制模块的功能:用于控制密钥扩展过程的执行,控制加密过程的执行,控制解密过程的执行。2.3密钥扩展子模块体系结构1) 密钥扩展模块的电路结构如下图所示:2) 密钥扩展模块的外部信号如下表所示:信号名称信号宽度传输方向信号含义clk1位输入时钟信号。rst1位输入复位信号,1有效。有效时使轮常数产生模块输出第一个轮常数。keysel1位输入轮密钥选择信号,keyse

15、l=0选择密钥寄存器中的种子密钥,否则,选择经过密钥扩展变换的轮密钥。rndkren1位输入轮密钥寄存器写使能信号,1有效。wrrndkrf1位输入轮密钥寄存器堆写使能信号,1有效。addr4位输入轮密钥寄存器堆地址,表示11个轮密钥寄存器的地址。rconen1位输入轮常数寄存器写使能信号,1有效。当有效时将下一个轮常数写入轮常数寄存器。key128位输入种子密钥,来自于密钥寄存器的输出。rndkrfout128位输出轮密钥寄存器堆的输出,为加解密模块提供需要的轮密钥。密钥扩展模块由1个128位的轮密钥寄存器rndkreg、1个11*128的轮密钥寄存器堆rndkrf、1个轮常数产生模块rco

16、n、1个字节代替模块subword、1个32位的循环左移移位器rotword、1个128位的二选一选通器MUX以及5个32位异或器构成。3) 其电路工作原理如下:在进行密钥扩展之前,首先令复位信号rst=1,以便使轮常数产生模块输出第1个轮常数。然后,在第1个时钟周期,通过选通器选择种子密钥key作为第1个子密钥,并在本周期结束时的时钟上升沿,将其同时保存到轮密钥寄存器rndkreg和轮密钥寄存器堆rndkrf。在第2个时钟周期,对保存在轮密钥寄存器rndkreg中的第1个子密钥先后进行循环左移、字节代替变换、异或、选通操作得到第2个子密钥,并在本周期结束时的时钟上升沿,将其同时保存到轮密钥寄

17、存器rndkreg和轮密钥寄存器堆rndkrf。重复第2个时钟周期的操作10次,就可以得到AES第1-10轮迭代所需要的轮密钥。这样,经过11个时钟周期之后,AES加密/解密所需的全部11个子密钥就都产生出来了,并且被保存在轮密钥寄存器堆rndkrf中。4) 各个子模块的功能以及各子模块之间的相互关系与信号连接为: 其中,循环左移运算实现对一个32位的数据循环左移8位,在电路实现时通过硬件连线即可实现,无须设计专门的移位电路。字节代替变换由4个8*8 S盒实现,S盒采用查表方式实现。为了充分利用cyclone FPGA中的RAM资源,减少LE(逻辑单元)的使用数量,我们利用cyclone FP

18、GA中的RAM构建了一个8*8的ROM作为S盒,该ROM共有256个的存储单元,每个存储单元存储一个字节,这256个字节就是实现S盒变换的查找表。该ROM可以利用quartus II的megafunction工具自动生成,但需要注意的是该ROM的地址要经寄存器锁存以后才能进入ROM,因此在地址有效的下一个周期才能在ROM的输出端口得到读出的数据。二选一选通器MUX用于选择外部输入的种子密钥或者内部逻辑产生的数据作为子密钥。轮密钥寄存器rndkreg是1个128位的寄存器,用于暂时保存当前产生的子密钥,以便产生下一个子密钥时使用。轮密钥寄存器堆rndkrf共有11个128位的存储单元,用于保存密

19、钥扩展以后的全部11个子密钥,供AES加密/解密使用。轮常数产生模块rcon由1个8位寄存器和轮常数产生逻辑构成,当复位时,寄存器输出第一个轮常数,当轮常数寄存器写使能信号rconen有效时,将由轮常数产生逻辑产生的下一个轮常数写入轮常数寄存器。5) 密钥扩展的程序描述:KeyExpansion(byte key4*Nk,word wNb*(Nr+1),Nk) begin word temp i=0 while (i Nk) wi = word(key4 * i,key4 * i+1,key4 * i+2,key4 * i+3) i = i+1 end while i = Nk while (

20、i 6 and i mod Nk = 4) temp = Subword (temp) end if w i = wi - Nk xor temp i = i +1 end while end 2.4加密子模块体系结构1) AES加密/解密模块的电路结构如下图所示2) AES加密/解密模块的外部信号如下表所示: 信号名称信号宽度传输方向信号含义clk1位输入时钟信号。wrsben1位输入向S盒写入配置数据的使能信号,1有效。wrsbaddr7位输入S盒配置数据的地址,一个S盒包含256个字节,一次写入16位,因此共需要写128次,需要128个地址,所以需要7位地址码。sbdata16位输入S盒

21、配置数据。keyadsel2位输入密钥加操作输入数据选择信号,mixsel1位输入选择是否进行逆列混合变换,在进行第1-9轮解密变换时为1,其余时间为0。reginsel1位输入结果寄存器输入数据选择信号。wrregen1位输入结果寄存器写使能信号,1有效。intxt128位输入外部输入数据(明文或密文)。roundkey128位输入子密钥。shift1位输入结果寄存器移位使能信号,1有效,有效时将128位结果寄存器中的数据右移16位。outtxt16位输出输出数据(加密/解密结果)。 AES加密过程由一个初始密钥加(异或)变换和十个轮变换构成,其中除第10个轮变换外,每个轮变换都是一样的,都

22、是由字节代替(S盒变换)、行移位、列混合、密钥加4个子变换组成,第10个轮变换由字节代替、行移位、密钥加3个子变换组成,不包括列混合变换。类似分析,可以得出AES解密过程包括逆S盒变换、09乘字节、0b乘字节、0d乘字节、0e乘字节、异或共6种操作。3) AES加密/解密模块的工作原理如下:加密流程:首先将S盒配置为加密S盒,即在使能信号wrsben和地址信号wrsbaddr的控制下,通过S盒配置数据端口sbdata将加密S盒配置数据写入16个S盒sbox0sbox15。然后实现初始密钥加变换,即在选择信号keyadsel的控制下,通过四选一选通器选择外部输入明文数据intxt,与初始子密钥r

23、oundkey进行异或操作,并在选择信号reginsel的控制下,通过二选一选通器将异或操作的结果e0e15保存到S盒的输入寄存器。接下来进行第一轮加密变换,即初始密钥加变换的结果经sbox0sbox15完成S盒变换后,在选择信号mixsel的控制下,通过二选一选通器进入byte0203模块,完成02乘字节和03乘字节运算,然后进行(5)式中前4项的异或运算,得结果c0c15, 在选择信号keyadsel的控制下,通过四选一选通器选择c0c15与第一轮子密钥进行异或操作,从而得到第一轮加密变换的结果e0e15,并将其保存到S盒的输入寄存器,作为下一轮加密变换的输入数据。依次类推,可以完成第1-

24、9轮加密变换。最后进行第10轮加密变换,即第9轮加密变换变换的结果经sbox0sbox15完成S盒变换后,在选择信号keyadsel的控制下,通过四选一选通器选择恰当的S盒输出与第10轮子密钥进行异或操作,即可得到密文,最后将其保存到结果寄存器resultreg。初始密钥加变换和每轮加密变换都在一个周期内完成,因此上述加密过程共需要11个时钟周期。 解密流程:首先将S盒配置为解密S盒,配置过程与加密S盒配置过程一样,只是配置数据不同。然后实现初始密钥加变换,即在选择信号keyadsel的控制下,通过四选一选通器选择外部输入密文数据intxt,与初始子密钥roundkey进行异或操作,并在选择信

25、号reginsel的控制下,通过二选一选通器将异或操作的结果e0e15保存到S盒的输入寄存器。接下来进行第一轮解密变换,即初始密钥加变换的结果经sbox0sbox15完成逆S盒变换后,再与第一轮子密钥进行异或操作,然后在选择信号mixsel的控制下,通过二选一选通器进入byte0203模块和byte9bde模块,完成进行逆列混合变换所需要的字节乘法运算(即09乘字节、0b乘字节、0d乘字节和0e乘字节),然后通过一系列异或运算得列混合变换的结果g0g15, 在选择信号reginsel的控制下,通过二选一选通器选择g0g15输出,从而得到第一轮解密变换的结果h,并将其保存到S盒的输入寄存器,作为

26、下一轮解密变换的输入数据。依次类推,可以完成第1-9轮解密变换。最后进行第10轮解密变换,即第9轮加密变换变换的结果经sbox0sbox15完成逆S盒变换后,在选择信号keyadsel的控制下,通过四选一选通器选择恰当的S盒输出与第10轮子密钥进行异或操作,即可得到明文,最后将其保存到结果寄存器resultreg。初始密钥加变换和每轮解密变换都在一个周期内完成,因此上述解密过程共需要11个时钟周期。需要注意的是,解密过程使用的子密钥与加密过程使用的子密钥相同,但使用顺序恰好相反。4) AES加密过程可用伪代码描述为: Cipher(byte in4*4,byte out4*4,word w4*

27、(Nr+1) Begin Byte state4,4 State=in AddRoundKey(state,w0,3) For round=1 step 1 to Nr-1 SubBytes(state) ShiftRows(state) MixColumns(state) AddRoundKey(state,wround*4,(round+1)*4-1) End for SubBytes(state) ShiftRows(state) AddRoundKey(state,wNr*4,(Nr+1)*4-1) Out=state End5) AES解密过程是加密过程的逆过程,可用伪代码描述为: InvCipher(byte in4*4,byte out4*4,word w4*(Nr+1) Begin Byte state4,4 State=in AddRoundKey(state, wNr*4,(Nr+1)*4-1) For round= Nr-1 step -1 to 1 InvShiftRows(state) InvSubBytes(state) AddRoun

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1