基于Verilog的AES加密算法的实现毕业论文 联系客服

发布时间 : 星期六 文章基于Verilog的AES加密算法的实现毕业论文更新完毕开始阅读8096294ba66e58fafab069dc5022aaea998f4192

东南大学本科生毕业设计(论文)

加密的框图如下所示:

128位数据分组128位外部初始密钥(Key expansion)与扩展密钥的异或s盒变换行变换列变换与扩展密钥的异或s盒变换行变换与扩展密钥的异或128位密文输出图2-2 AES加密流程图

设X是AES的128比特明文输入,Y是128比特的密文输出,则AES密文Y可以用下面

复合变换表示:

Y?Ak(r?1)?R?S?Akr?C?R?S?Ak(r?1)??????C?R?S?Aki(X) (2-28)

其中“?”表示符合运算。这里Aki:表示对X的一个变换Aki(X)=X?Ki(Ki为第i 轮的字密钥,为比特串的异或运算)。S:S盒变换。即对每个字节用S-BOX做一个置换。S-Box是一个给定的转换表。R:行置换。C:列置换。

解密变换是加密变换的逆变换,这里不再详述。

2.5 AES加/解密算法的实现

表1是三种不同类型的AES加密密钥分组大小与相应的加密轮数的对照表。加密开始 时,输入分组的各字节按表2-2的方式装入一个矩阵State中。如输入ABCDEFGHIJKLMNOP,则输入块影射到如表2的状态矩阵State中。

加密过程主程序由下面的伪代码描述。其中的SubBytes(),ShiftRows(),MixColumns()和Ad2dRounKey()将在接下来的部分介绍,密钥扩展程序(KeyExpansion)也将在后面介绍。

Cipher(byte in [4*4],byte out[4*4], word w[4*(Nr+1)])

13

东南大学本科生毕业设计(论文)

Begin

Byte state[4,4] State=in;

AddRoundKey(state,w) //与扩展密钥的异或运算 For round=1 step 1 to Nr-1

SubBytes(state) //S-Boxes运算 shiftRows(state) //行变换 MixColumns(state) //列变换 AddRoundKey(state,w+round*4) End for

SubByte(state) shiftRows(state)

AddRoundKey(state, w+Nr*4) Out=state End

2.5.1 S盒变换 SubBytes()

对输入矩阵的任一个元素A做如下变换S[A]:

? 一个元素A从存储角度看都是一个八位的二进制数。算出前四位所代表的十六进制数x和后四位所代表的十六进制数y。如A=11010100时,x=c,y=4。

? 从AES算法给定的S-Box(16行16列的矩阵,其中每个元素为一个字节,具体的S-Box如图2-3)中找出S[A]=S[x,y]=s[c,4]={1c}=00011101。或者直接通过下面的公式将

''''''''A=b7b6b5b4b3b2bb10变为S[A]= b7b6b5b4b3b2bb10

bi?bi?b(i?4)mod8?b(i?5)mod8?b(i?6)mod8?b(i?7)mod8?Ci (2-29) 这里C=(C0,C1,C2,C3,C4,C5,C6,C7)=(0,1,1,0,0,0,1,1)。

'

图2-3 SubBytes变换

14

东南大学本科生毕业设计(论文)

图2-4 S盒列表描述

2.5.2 行变换ShiftRows()

在行变换中,中间状态矩阵State的第一行不变;第二至第四行做如下变换,即将表2-3的状态矩阵变为表2-4的状态矩阵。

表2-3 状态矩阵 表2-4 转换后的状态矩阵

2.5.3 列变换Mixcolumns()

列变换是对中间状态矩阵State逐列进行变换。其变换为如下的矩阵运算:

(2-30)

经过上面的运算,原来的一列就被替换成下面的式子所表达的新列:

S(0,c)'?({02}?S(0,c))?({03}?S(1,c))?S(2,c)?S(3,c) (2-31) S(1,c)'?S(0,c)?{02}?S(1,c))?({03}?S(2,c))?S(3,c) (2-32) S(2,c)'?S(0,c)?{02}?S(2,c))?({03}?S(3,c))?S(1,c) (2-33)

15

东南大学本科生毕业设计(论文)

S(3,c)'?S(2,c)?{02}?S(3,c))?({03}?S(0,c))?S(1,c) (2-34)

这里?为按位异或运算,其中的乘法?按照模乘同余规则进行计算(见2.2节)。 2.5.4 与扩展密钥的异或运算AddRoundKey()

扩展密钥只参与了这一个变换。根据加密的轮数用相应的扩展密钥的四个数据项和中间状态状态矩阵上的列进行按位异或。

[S(0,c)',S(1,c)',S(2,c)',S(3,c)']?[S(0,c),S(1,c),S(2,c),S(3,c)]XOR[W(round?Nb?c)

(2-35)

其中Nb为数据分组长度/32(本论文128/32)=4。W为密码密钥扩展后的扩展密钥数组。 2.5.5 密钥扩展程序 Key Expansion( )

AES算法利用外部输入密钥K(密钥串的字数Nk=密钥长度/32), 通过密钥扩展程序得到共4(Nr+1)字的扩展密钥w[4?(Nr+1)]。涉及四个模块:

? 位置变换RotWord( )。把一个四个字节的序列[a0,a1,a2,a3]左移一个字节变成[a1,a2,a3,a0]。 ? SubWord()。对一个四字节的输入字[a0,a1,a2,a3]的每个字节进行S盒变换,然后作为输出。

? 变换Rcon[]。Rcon[i]表示32比特字符串[Xi?1,00,00,00]。这里的X=(02),Xi?1是X=

(02)的(i-1)次幂的十六进制表示。例如:Rcon[3]=[04000000],Rcon[4]=[08000000]。

? 扩展密钥的生成。扩展密钥的前Nk个字就是外部密钥K(对于本论文,外部密钥K为第0轮密钥),以后的字w[[i]]等于它前一个字w[[i-1]]与前第Nk个字w[[i-Nk]]的异或,即w[[i]]=w[[i-1]]XORw[[i-Nk]]。但若是i为Nk的倍数,则为w[[i]]=w[i-Nk]XOR SubWord(RotWord(w[[i-1]]XORRcon[i/Nk]。本论文中Nk=4。

2.6 AES安全性能分析

AES从密钥长度以及自身结构上都很好的抵抗了各种攻击,助Rijndael算法能最终成为新一代加密标准,其安全性是不容置疑的。这里,仅对AES的安全性进行简要的分析。 2.6.1安全性原则

针对某一特定的分组密码算法,其攻击方法可以分为通用攻击方法和专用攻击方法。所谓通用攻击方法就是对所有的分组加密算法攻击都有效的方法,而专用攻击方法只对该特定算法有效,一般与具体密码算法某种特定的结构有关。

设计现代实用密码算法时,为了有效的抵抗通用攻击,一般都遵循香农所提出的混乱原则和扩散原则。同时,混乱和扩散也是分组密码算法的设计理论中保证明文能够可靠、隐蔽的最基本技术。

所谓混乱原则就是所设计的密码应使得密文对密钥和明文的依赖关系相当

复杂以至于这种依赖性对密码分析者来说是无法利用的。混乱用于掩盖明文、密文和密钥之间的关系。这可以挫败通过研究密文以获取冗余度和统计模式的企图。做到这点最容易的方法是通过代替,一个简单的代替密码,如单字母密码,其中每一个确定的明文字符被一个密文字符所代替。

16