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

上传人:b****1 文档编号:1596170 上传时间:2022-10-23 格式:DOCX 页数:22 大小:261.16KB
下载 相关 举报
实验1AES算法及其IP核体系结构设计资料.docx_第1页
第1页 / 共22页
实验1AES算法及其IP核体系结构设计资料.docx_第2页
第2页 / 共22页
实验1AES算法及其IP核体系结构设计资料.docx_第3页
第3页 / 共22页
实验1AES算法及其IP核体系结构设计资料.docx_第4页
第4页 / 共22页
实验1AES算法及其IP核体系结构设计资料.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

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

《实验1AES算法及其IP核体系结构设计资料.docx》由会员分享,可在线阅读,更多相关《实验1AES算法及其IP核体系结构设计资料.docx(22页珍藏版)》请在冰豆网上搜索。

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

实验1AES算法及其IP核体系结构设计资料

实验报告1:

AES算法分析及其IP核体系结构设计

一、实验目的

理解并掌握AES算法的细节,提出一个AESIP核的体系结构设计方案。

二、实验内容

1、学习AES算法,理解并掌握AES算法的原理、结构及其需要的基本运算。

2、在对算法进行深入分析的基础上,提出一个AESIP核的体系结构设计方案。

三、实验环境

PC机1台、Modelsim仿真软件1套。

四、实验步骤

1、AES算法学习和分析

1.1AES的加密过程

AES的加密过程可以用下面的伪语言代码描述:

Cipher(plaintext,ciphertext,CiperKey){

//初始化

State=plaintext;

KeyExpansion(CipherKey,ExpandedKey);

//生成扩展密钥ExpandedKey

AddRoundKey(State,ExpandedKey);

//前Nr–1轮

for(r=1;r

SubBytes(State);

ShiftRow(State);

MixColumn(State);

AddRoundKey(State,ExpandedKey);

}

//最后一轮

SubBytes(State);

ShiftRow(State);

AddRoundKey(State,ExpandedKey);

Ciphertext=state;

}

其中plaintext是输入明文,可以定义成plaintext[4×Nb]数组;ciphertext是输出密文,可以定义成ciphertext[4×Nb]数组;CipherKey是加密密钥,可以定义成CipherKey[4×Nk]数组;圈密钥ExpandedKey可表示成w[Nb×(Nr+1)]数组;State是状态,整个加密过程都是针对State进行的。

(1)S盒变换SubBytes()

S盒变换又称字节替代变换,是一个针对字节的非线性、可逆变换。

它将状态中的每一个字节进行非线性变换转换为另一个字节,作用在状态上每个字节的变换可以表示为SubBytes(state)。

可以将变换SubBytes()对各种可能字节的变换结果排成一个表,如表2-3所示,该表称为AES的S盒。

通过查表可以直接得到SubBytes()的输出,这样可以加快程序执行的速度。

如果状态中的一个字节为xy,则S盒中第x行第y列的字节就是SubBytes()的输出。

表2-3S盒变换表

Tab.2-3ThetableofS-boxtransformation

列号y

0

1

0

3

4

5

6

7

8

9

A

B

C

D

E

F

 

x

0

63

7C

77

7B

F2

6B

6F

C5

30

01

67

2B

FE

D7

AB

76

1

CA

82

C9

7D

FA

59

47

F0

AD

D4

A2

AF

9C

A4

72

C0

2

B7

FD

93

26

36

3F

F7

CC

34

A5

E5

F1

71

D8

31

15

3

04

C7

23

C3

18

96

05

9A

07

12

80

E2

EB

27

B2

75

4

09

83

2C

1A

1B

6E

5A

A0

52

3B

D6

B3

29

E3

2F

84

5

53

D1

00

ED

20

FC

B1

5B

6A

CB

BE

39

4A

4C

58

CF

6

D0

EF

AA

FB

43

4D

33

85

45

F9

02

7F

50

3C

9F

A8

7

51

A3

40

8F

92

9D

38

F5

BC

B6

DA

21

10

FF

F3

D2

8

CD

0C

13

EC

5F

97

44

17

C4

A7

7E

3D

64

5D

19

73

9

60

81

4F

DC

22

2A

90

88

46

EE

B8

14

DE

5E

0B

DB

A

E0

32

3A

0A

49

06

24

5C

C2

D3

AC

62

91

95

E4

79

B

E7

C8

37

6D

8D

D5

4E

A9

6C

56

F4

EA

65

7A

AE

08

C

BA

78

25

2E

1C

A6

B4

C6

E8

DD

74

1F

4B

BD

8B

8A

D

70

3E

B5

66

48

03

F6

0E

61

35

57

B9

86

C1

1D

9E

E

E1

F8

98

11

69

D9

8E

94

9B

1E

87

E9

CE

55

28

DF

F

8C

A1

89

0D

BF

E6

42

68

41

99

2D

0F

B0

54

BB

16

(2)行移位变换ShiftRows()

行移位是将状态阵列的各行进行循环移位,不同状态行的位移量不同。

第0行不移位,保持不变,第1行移动C1个字节,第2行移动C2个字节,第3行移动C3个字节。

C1,C2,c3值依赖于分组长度Nb的大小。

位移量C1、C2和C3与分组长度Nb有关,如下表:

表2-4对应于不同分组长度的位移量

Tab.3-3thedisplacementcorrespondingtodifferentpacketlength

Nb

C1

C2

C3

4

1

2

3

6

1

2

3

8

1

3

4

在AES加密标准中Nb=4。

(3)列混合变换MixColumns()

列混合变换是对一个状态逐列进行变换,它将一个状态的每一列视为有限域GF(28)上的一个多项式。

其中,,是AES选择的一个逆元多项式,表示模乘法。

将表示为矩阵乘法:

(2-3)

相乘之后每一列的结果如下:

(4)轮密钥加AddRoundKey()变换

轮密钥加是将轮密钥简单地与状态矩阵进行逐比特异或运算。

每个轮密钥由密钥扩展算法得到,轮密钥的长度为Nb个字。

轮密钥按顺序取自扩展密钥ExpandedKey,扩展密钥是由原始密钥经过扩展后得到的,扩展密钥的长度为Nb(Nr+1)个字。

1.2AES的密钥扩展过程

AES算法得到初始密钥K后,首先经过一个密钥扩展过程以产生所有的轮密钥。

密钥扩展共产生Nb(Nr+1)个字,算法初始需要一个Nb个字的集合,接着每个轮操作都需要Nb个字的密钥数据。

最终的密钥流程共包含了一个4字节字的线性数组,用[wi]表示,。

扩展密钥程序涉及RotWord()、SubWord()和Rcon()模块。

它们的工作方式如下:

(1)位置变换RotWord():

把一个4字节的输入序列(a0,a1,a2,a3)循环左移一个字节后输出。

例如将(a0,a1,a2,a3)循环左移一个字节后输出为(a1,a2,a3,a0)。

(2)SubWord():

把一个4字节的输入序列(a0,a1,a2,a3)的每一个字节进行S盒变换,然后作为输出。

(3)变换Rcon[]:

Rcon[]是一个10个字节的常量数组,Rcon[i]是一个32比特字符串(xi-1,00,00,00)。

这里x=(02),xi-1是x=(02)的(i-1)次幂的十六进制表示,即x0=(01),x=(02),xi={02}·xi-1。

这里“·”表示有限域GF(28)中的乘法。

密钥扩展前Nk个字就是外部密钥CipherKey,以后的字w[i]等于它前一个字w[i-1]与前Nk个字w[i-Nk]的异或,w[i]=w[i-Nk]⊕SubWord(RotWord(w[i-1]))⊕Rcon[i/Nk]。

输入密钥扩展的整个过程可以用下面的程序段描述:

KeyExpansion(bytekey[4*NK],wordw[Nb*(Nr+1)],Nk)

begin

wordtemp

i=0

while(i

w[i]=word(key[4*i],]key[4*i+1],key[4*i+2],key[4*i+3]

i=i+1

endwhile

i=Nk

while(i

temp=w[i-1]

if(imodNk=0)

temp=Subword(Rotword(temp))xorRcon[i/Nk]

elseif(Nk>6andimodNk=4)

temp=Subword(temp)

endif

w[i]=w[i-Nk]xortemp

i=i+1

endwhile

end

2、AESIP核的体系结构设计方案

2.1AES模块框图及外部信号说明

图2AES模块框图

表1AES模块外部信号说明

信号名称

信号宽度

传输方向

信号含义

clk

1位

输入

时钟信号

rst

1位

输入

复位信号,1有效。

load

1位

输入

数据装载使能信号,用于控制输入明/密文、密钥、S盒配置数据等,1有效。

address

8位

输入

寄存器或RAM地址,用于表示明文/密文/密钥寄存器、S盒RAM单元。

keyexpen

1位

输入

密钥扩展使能信号,1有效。

keyexprdy

1位

输出

密钥扩展完成标识信号,1有效。

staenc

1位

输入

开始加密使能信号,1有效。

stadec

1位

输入

开始解密使能信号,1有效。

encdecrdy

1位

输出

加/解密运算完成标识信号,1有效。

din

16位

输入

输入数据总线,用于输入明/密文、密钥、配置数据等。

dout

16位

输出

输出数据总线,用于输出加/解密结果。

shift

1位

输入

结果移位输出使能信号,1有效。

有效时,每个时钟周期移位输出16位结果。

2.2AES模块体系结构

AES模块包括明/密文和密钥寄存器、密钥扩展、加/解密运算、控制等多个子模块,其系统结构图如下图所示。

图3AES模块系统结构图

每个子模块的功能如下:

1.明文/密文/密钥寄存器的功能:

在时钟信号clk的上升沿,若寄存器写使能信号write有效,则将输入数据总线din上的16位数据写入明文/密文/密钥寄存器的高16位,同时将寄存器原来的数据右移16位放入寄存器的低112位。

若寄存器写使能信号write无效,则寄存器保持原来的数据不变。

由此可见,1个128位的数据需要经过8个时钟周期,通过8次写操作才能装入寄存器。

2.密钥扩展模块的功能:

AES算法首先得到初始密钥K后,执行一个密钥扩展程序以产生所有的轮密钥。

密钥扩展共产生Nb(Nr+1)个32bit字,算法初始需要一个Nb个32bit字的集合,接着每个轮操作都需要Nb个32bit字的密钥数据。

3.加密/解密模块的功能:

实现AES加密和解密。

AES加密过程由一个初始密钥

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

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

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