AES针对Intel新指令优化
AES针对Intel新指令优化
一、 问题描述
AES算法是国际上通行的对称密钥加密解密算法。与一般算法相比,该算法包含了大量的位操作,导致传统高级语言在进行加密解密计算过程中的效率非常低。Intel公司在2010年推出的所有基于32nm工艺的Core处理器上增加了对AES算法的特殊指令支持。
二、 AES介绍
2.1 AES简介
AES, Advanced Encryption Standard,即高级加密标准。它是美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 AES模式有:ECB、CBC、CFB、OFB、CTR等多种模式。
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。 AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES。
在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。AES加密数据块和密钥长度可以是128比特、192比特、256比特中的任意一个。AES加密有很多轮的重复和变换。
算法步骤如下:
begin
KeyExpansion(); //对密钥进行扩展
AddRoundKey();
for 1 to N
SubBytes(); //
ShiftRows();
MixColumns();
AddRoundKey();
end for;
SubBytes();
ShiftRows();
AddRoundKey();
end begin;
1、AddRoundKey — 矩阵中的每一个字节都与该次回合金钥(round key)做XOR计算;每个子密钥由密钥生成方案产生。
2、SubBytes — 通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。
3、ShiftRows — 将矩阵中的每个横列进行循环式移位。
4、MixColumns — 为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。
2.2 ECB模式算法步骤
2.3 CBC模式算法步骤
三、 Intel新指令简介
由于AES是当今世界最流行的加密算法之一,而且使用相当平凡,所以,intel公司专门针对此算法设计了一些优化算法计算的方法,并提供以下六个指令来提高AES算法的运行速度:
1、 AESENC和AESENCLAST指令
2、 AESDEC和AESDECLAST指令
3、 AESIMC指令
AESIMC指令是在解密的准备阶段使用的,即反转那金钥;
4、 AESKEYGENSSIST指令
四、 性能测试
4.1 测试平台
处理器 |
Intel(R) Core(TM) i7 CPU 990 |
核数 |
8 |
主频 |
3.46GHZ |
一级缓存 |
6×64K |
二级缓存 |
6×256K |
三级缓存 |
12M |
内存 |
24 GB |
操作系统 |
Ubuntu 10.04 |
编译器 |
g++ 4.3.4 |
4.2 测试结果
表 4-1 新指令优化测试结果
|
Encrypt time(s) |
Decrypt time(s) |
Test file size(KB) |
ECB |
0.001918 |
0.001869 |
31.3 |
CBC |
0.002062 |
0.001973 |
31.3 |
表 4-2 没用新指令的AES算法测试结果
|
Encrypt time(s) |
Decrypt time(s) |
Test file size(KB) |
ECB |
0.002954 |
0.002822 |
31.3 |
CBC |
0.003217 |
0.003107 |
31.3 |
表 4-3 使用Intel新指令优化前后的加速比
|
加密加速比 |
解密加速比 |
ECB |
1.54 |
1.51 |
CBC |
1.56 |
1.57 |
五、 总结
从测试结果来看,通过Intel的AES-NI指令集加速以后,AES对称加密算法的ECB模式和CBC模式的加解密速度都能提升1.5~1.6倍。
所以,从单次的加解密任务来看,AES-NI指令集为用户节省了一半的时间,也节省了一半的耗电;从全球来看,Intel公司为全球的用户节省了大量的时间,并为计算机的省电工作做了一个很大的贡献。