1 / 24
文档名称:

AES原理及其在c语言上的实现.docx

格式:docx   大小:61KB   页数:24页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

AES原理及其在c语言上的实现.docx

上传人:1136365664 2017/12/21 文件大小:61 KB

下载得到文件列表

AES原理及其在c语言上的实现.docx

相关文档

文档介绍

文档介绍:AES加密解密算法及其在c语言上的实现
引言
对称密码算法主要用于保证数据的机密性,通信双方在加密/ 解密过程中使用它们共享的单一密钥。对称密码算法的使用相当广泛,密码学界已经对它们进行了深入的研究[1] 。最常用的对称密码算法是数据加密标准(DES) 算法,它是由IBM在美国国家安全局(NSA) 授意之下研制的一种使用56 位密钥的分组密码算法。自1977 年公布成为美国政府的商用加密标准以来已使用20 多年[2] 。DES 的主要问题是其密钥长度较短,已不适合于当今分布式开放网络对数据加密安全性的要求。在DES 每隔五年的评估会议中,最后一次在1998 年美国政府终于决定不再继续延用DES作为联邦加密标准,也就表明了DES 将退出加密标准的舞台,而新的标准AES(AdvancedEncryptionStandard ) 将粉墨登场[3] 。AES是美国国家标准技术研究所NIST旨在取代DES的新一代的加密标准[3~5] 。NIST对AES候选算法的基本要求是:对称分组密码体制;密钥长度支持128,192,256位;明文分组长度128 位;算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮征集、分析、测试,共产生了15 个候选算法。1999 年3 月完成了第二轮AES 的分析、测试。1999 年8 月NIST公布了五种算法(MARS,RC6,Rijndael,Serpent,Twofish) 成为候选算法。最后,Rijn2dael[5] ,这个由比利时人设计的算法与其它候选算法在成为高级加密标准(AES) 的竞争中取得成功,于2000 年10月被NIST宣布成为取代DES的新一代的数据加密标准,即AES。尽管人们对AES还有不同的看法[6~8] ,但总体来说,Rijndael作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES设计有三个密钥长度:128,192,256 比特, 相对而言,AES 的128 比特密钥比DES的56 比特密钥强1021倍[4] 。
AES 加密/ 解密算法原理
对称密码算法根据对明文消息加密方式的不同可分为两大类,即分组密码和流密码。分组密码将消息分为固定长度的分组,输出的密文分组通常与输入的明文分组长度相同。AES算法属于分组密码算法,它的输入分组、输出分组以及加/ 解密过程中的中间分组都是128比特。密钥的长度K为128,192 或256 比特。用Nk=4,6,8 代表密钥串的字数(1 字=32 比特) ,在本文编制的程序中由用户选定。用Nr 表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系见表1) 。每一轮都需要一个和输入分组具有同样长度(128 比特) 的扩展密钥Ke的参与。由于外部输入的加密密钥K长度有限,所以在AES中要用一个密钥扩展程序( KeyExpansion) 把外部密钥K扩展成更长的比特串,以生成各轮的加密密钥。AES的加密与解密框图如图1 所示。
128位数据分组
128位数据分组

与扩展秘钥的异或运算
与扩展秘钥的异或运算
反S盒变换
S盒变换
反行变换变换
行变换变换
列变换变换
反列变换变换
与扩展秘钥的异或
与扩展秘钥的异或
S盒变换
反S盒变换
行变换
反行变换
输出128位数据
与扩展秘钥的异或运算
输出128位数据
与扩展秘钥的异或运算
AES加密与解密流程图
(1) 加密变换
设X是AES的128 比特明文输入,Y 是128 比特的密文输出,则AES密文Y可以用下面的复合变换表示:
Y=A k(r+1 )·R·S·Akr·C·R·S·Ak(r21)·⋯·C·R·S·Ak1(X)
其中“·”表示复合运算。这里Aki :表示对X 的一个变换Aki (X) =X Ý Ki ( Ki为第i 轮的子密钥,为比特串的异或运算) 。S:S 盒置换。即对每一个字节用S2Box做一个置换。S2Box是一个给定的转换表。R: 行置换。C: 列置换。
这里是特殊的乘法运算,将在下面详细介绍。
(2) 解密变换
解密变换是加密变换的逆变换,这里不再详述。
AES 加密/ 解密算法的实现
分组加密
表1 是三种不同类型的AES 加密密钥分组大小与相应的加密轮数的对照表。加密开始时,输入分组的各字节按表2 的方式装入一个矩阵State 中。如输入ABCDEFGHIJKLMNOP, 则输
入块影射到如表2 的状态矩阵State 中。
表1
AES类型
秘钥长度
分组大小
加密轮数
AES-128
4字
4字
10
AES-192
6字
4字
12
AES-256
8字
4字
14字
表2
A
E
I
M
B
F