AES算法原理及其实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
() 3 11 13 列变换 MixColumns
列变换是对中间状态矩阵 State 逐列进行变换 。其 变换为如下的矩阵运算 :
s′ 0,c s′ 1,c s′ 2,c s′ 3,c = 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 s0,c s1,c s2,c s3,c
第 12 期
何明星等 :AES 算法原理及其实现
・ 16 ・
AES 算法原理及其实现 3
何明星1 ,2 , 林 昊2
(1. 西南交通大学 计算机与通信工程学院 , 四川 成都 610031;2. 四川 成都 610039)
四川工业学院 计算机科学与工程系 ,
摘 要 : 在研究分析了 AES 加密原理的基础上着重说明了 AES 算法实现的具体步骤 , 并用 C 语言完整地实现 ) 方式将其用于对文件的加密/ 解密 ( 密钥长度可选) 。AES 结合其它技 了 AES 算法 ,并利用密文分组链接 ( CBC 术还可实现更为广泛的安全协议 。 关键词 : 分组密码 ; 对称密码体制 ;DES;AES 中图法分类号 : TP309 17 文献标识码 : A 文章编号 : 100123695 ( 2002) 1220061203
Abstract: BasedontheinvestigationtotheprincipleandspecificationsofAES,aneffectiveimplementationofAESblockcipheriscompleted ( CBC ). andthedocumentencryptionanddecryptionisalsocompletedbyusingCipherBlockChaining Keywords: BlockCipher;SymmetricCryptosystem;DES;AES (AdvancedEncryptionStandard)
ImplementationoftheAdvancedEncryptionStandard
HEMing2xing
1,2
( AES)
,LINHao
2
( 1 . College of Computer & Communication Engineering, Southwest Jiaotong University, Chengdu Sichuan 610031 , China; 2 . Dept. of ComputerScience & En2 gineering, Sichuan University of Science & Technology, Chengdu Sichuan , 610039 , China)
加密过程主程序由下面的伪代码描述 。其中的子 程序 SubBytes () ,ShiftRows () ,MixColumns () 和 Ad2 dRounKey() 将在接下来的部分介绍 , 密钥扩展程序 ( Key ) 将在 3.2 介绍 。 Expansion
Cipher(bytein[4 3 4],byteout[4 3 4],wordw[4 3 (Nr+1 ) ]) begin bytestate[4,4] state=in; (state,w ) AddRoundKey //SeeSec.3.1.4 forround=1step1toNr 21 (state) //SeeSec.3.1.1 SubBytes ( state) //SeeSec.3.1.2 ShiftRows ( state) //SeeSec.3.1.3 MixColumns
这里 为按位异或运算 ,其中的乘法 × 按照下面介 绍的模乘同余规则进行计算 。 列变换中要用到的模乘同余规则和我们一般用到 的乘法有些不同 , 由于每一个元素都是一个字节 , 于是 可把 这 个 字 节 看 成 一 个 形 式 上 的 七 次 多 项 式 , 即 将 b7 b6 b5 b4 b3 b2 b1 b0 视为 b7x7 +b 6x6 +b 5x5 +b 4x4 +b 3x3 +
1 引言
对称密码算法主要用于保证数据的机密性 ,通信双 方在加密/ 解密过程中使用它们共享的单一密钥 。对称 密码算法的使用相当广泛 ,密码学界已经对它们进行了 深入的研究 [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) 成为候选算法。最后 ,Rijn2 dael[5] ,这个由比利时人设计的算法与其它候选算法在成
s′ 0,c s′ 1,c s′ 2,c s′ 3,c = 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 s0,c s1,c s2,c s3,c
这里 c=
(c0,c1,c2,c3,c4,c5,c6,c7
b2x2 +b 1x+b
0
,ቤተ መጻሕፍቲ ባይዱ{11011001}2 ={d9}
16 可以被看成是
x7
+x 6 +x 4 +x 3 +1 。列变换希望把一个字节变换为一个新 的字节 ,所以需要把两个形式上的七次多项式的乘法结 果变为一个新的形式上的七次多项式 ,然后才能将其恢
2002 年
3 11 11 S 盒变换 SubBytes()
图1 AES 的加密与解密框图
( 1) 加密变换 设 X 是 AES 的 128 比特明文输入 ,Y 是 128 比特的 密文输出 ,则 AES 密文 Y 可以用下面的复合变换表示 :
Y=A R・ S・ Akr・ C・ R・ S・ Ak(r21) ・ … ・ C・ R・ S・ Ak1 ( X) k(r+1 ) ・
) = (0,1,1,0,0,0,1,1
() 3 11 12 行变换 ShiftRows
在行变换中 ,中间状态矩阵 State 的第一行不变 ; 第 二至第四行做如下变换 , 即将表 3 的状态矩阵变为表 4 的状态矩阵 。
这里 是特殊的乘法运算 , 将在 31113 节中详细介 绍。 ( 2) 解密变换 解密变换是加密变换的逆变换 ,这里不再详述 。
b′ i =b i b (i+4 ) mod8 b (i+5 ) mod8 b (i+6 ) mod8 b (i+6 ) mod8 Ci )。
其中 “・ ” 表示复合运算 。这里 Aki : 表示对 X 的一个变换 Aki ( X) =X Ki ( Ki 为第 i 轮的子密钥 ,为比特串的异或 运算) 。S:S 盒置换 。 即对每一个字节用 S2Box 做一个置 换 。S2Box 是一个给定的转换表 。R: 行置换 。C: 列置 ( x) =a ( x) s ( x) 换 。s′
收稿日期 : 2002201208; 修返日期 :2002 205221 基金项目 : 国家自然科学基金资助项目 (69825102)
・ 26 ・
计算机应用研究
(state,w+round 3 4) AddRoundKey endfor (state) SubBytes ( state) ShiftRows (state,w+Nr 3 4) AddRoundKey out=state end
经过上面的运算 ,原来的一列就被替换成下面的式 子所表达的新列 :
({03} × S(0,c ) ′ = ({02} × S(0,c )) S(1,c )) S(2,c ) S(3,c ) ({03} × S(1,c ) ′ =S (0,c ) ({02} × S(1,c )) S(2,c )) S(3,c ) ({03} × S(2,c ) ′ =S (0,c ) S(1,c ) ({02} × S(2,c )) S(3,c ) S(3,c ) ′ = ({03} × S(0,c )) S(1,c ) S(2,c ) ({02} × S(3,c ))
2 AES 加密/ 解密算法原理
对称密码算法根据对明文消息加密方式的不同可 分为两大类 ,即分组密码和流密码 。分组密码将消息分 为固定长度的分组 ,输出的密文分组通常与输入的明文 分组长度相同 。AES 算法属于分组密码算法 , 它的输入 分组 、 输出分组以及加/ 解密过程中的中间分组都是 128 比特 。 密钥的长度 K 为 128,192 或 256 比特 。用 Nk=4, 6,8 代表密钥串的字数 ( 1 字 =32 比特 ) , 在本文编制的 程序中由用户选定 。用 Nr 表示对一个数据分组加密的 轮数 ( 加密轮数与密钥长度的关系见表 1) 。每一轮都需 要一个和输入分组具有同样长度 ( 128 比特) 的扩展密钥 Ke 的参与 。由于外部输入的加密密钥 K 长度有限 , 所 以在 AES 中要用一个密钥扩展程序 ( KeyExpansion) 把外 部密钥 K 扩展成更长的比特串 , 以生成各轮的加密密 钥。 AES 的加密与解密框图如图 1 所示 。
为高级加密标准 (AES) 的竞争中取得成功 ,于 2000 年 10 月被 NIST宣布成为取代 DES 的新一代的数据加密标准 , 即 AES。尽管人们对 AES 还有不同的看法[6~8] ,但总体来 说 ,Rijndael 作为新一代的数据加密标准汇聚了强安全性、 高性能、 高效率、 易用和灵活等优点。AES 设计有三个密 钥长度 :128,192,256 比特 , 相对而言 ,AES 的 128 比特密 钥比 DES 的 56 比特密钥强 1021倍[4] 。
对输入矩阵的任一个元素 A 做如下变换 S[A]: (1) 一个元素 A 从存储角度看都是一个八位的二进 制数 。算出前四位所代表的十六进制数 x 和后四位所 代表的十六进制数 y 。如 A=11010100 时 ,x=c,y=4 。 (2) 从 AES 算法给定的 S2Box( 16 行 16 列的矩阵 ,其 中每 个 元 素 为 一 个 字 节 , 具 体 的 S2Box 略 ) 中 找 出 S[A]=S[x,y] 的值。如 A=11010100 时 ,S[A]=S[x,y]= S[c,4]={1c}=00011101 。或直接通过下面的公式将 A= b7b6b5b4b3b2b1b0 变为 S[A]=b ’ 7b’ 6b’ 5b’ 4b’ 3b’ 2b’ 1b’ 0。
3 AES 加密/ 解密算法的实现
3 11 分组加密
表 1 是三种不同类型的 AES 加密密钥分组大小与 相应的加密轮数的对照表 。 加密开始时 ,输入分组的各字节按表 2 的方式装入 一个矩阵 State 中 。如输入 ABCDEFGHIJKLMNOP, 则输 入块影射到如表 2 的状态矩阵 State 中 。