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公司為全球的使用者節省了大量的時間,併為計算機的省電工作做了一個很大的貢獻。