本文主要是介绍密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
英特尔在比较新的CPU上提供了AES-NI指令,可以直接调用这些指令来进行AES加解密。关于此指令的速度提升情况,各方反应不一,最高有说提高17倍的,有说提高8-9倍左右的,还有说提高一半左右的。这可能和各人的测试平台和倾向都不一样,因此结果各有差别。
CPU是否支持AES-NI可以使用英特尔AES-NI白皮书中的函数检测。白皮书中所述检测为:
checking CPUID.01H:ECX.AES[bit 25] = 1.
代码如下
#define cpuid(func,ax,bx,cx,dx)\
__asm__ __volatile__ ("cpuid":\
"=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));
int Check_CPU_support_AES()
{
unsigned int a,b,c,d;
cpuid(1, a,b,c,d);
return (c & 0x2000000);
}
微软VS2010以上版本(含)支持调用AES-NI。
- AES速度
测试了LibTomCrypt、rijndael-alg-fst.c、OpenSSL的AES速度,测试平台为:
操作系统: Windows XP Professional (SP2) (32位)
处理器: 英特尔 Core 2 Duo E8400 @ 3.00GHz
内存: 2 GB ( DDR2 800MHz )
编译:VC++6.0
以下测试结果都采用不解绕(UNROLL)。在此测试环境中,解绕和不解绕的速度相差非常小,几乎可以忽略不计。
测试结果如下:(简记LibTomCrypt为Tom,简记rijndael-alg-fst.c为Fast,简记OpenSSL为SSL)
Debug | Release | |||||
Tom | Fast | SSL | Tom | Fast | SSL | |
Encrypt16 | 524.893 | 102.981 | 480.003 | 606.912 | 1109.189 | 1218.544 |
Decrypt16 | 529.611 | 102.353 | 479.799 | 593.443 | 908.381 | 1225.411 |
Encrypt24 | 469.653 | 99.387 | 436.004 | 525.932 | 943.827 | 1044.971 |
Decrypt24 | 464.927 | 99.823 | 431.03 | 529.255 | 774.287 | 1035.197 |
Encrypt32 | 429.025 | 98.474 | 398.485 | 469.170 | 822.720 | 913.642 |
Decrypt32 | 421.533 | 97.850 | 393.3 | 465.620 | 665.822 | 921.721 |
各版本的AES速度对比表(单位:Mbps)
各版本的AES速度对比图
相信AES-NI的速度会应该能提升好几倍,达到XGbps应该问题不大。
这篇关于密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!