1. 程式人生 > >AES針對Intel新指令優化

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