国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SSE2與AES-NI在密碼算法中的應用*

2016-02-24 08:34苗旭東鄭秀林李艷俊
北京電子科技學院學報 2016年2期
關鍵詞:指令集密鑰指令

苗旭東鄭秀林李艷俊

SSE2與AES-NI在密碼算法中的應用*

苗旭東2**鄭秀林1,2李艷俊1

1.北京電子科技學院信息安全系,北京 100070; 2.西安電子科技大學通信工程學院,西安 710071

密碼算法的實現(xiàn)效率是衡量一個密碼算法好壞的重要指標。傳統(tǒng)密碼算法是基于比特(A5算法)、字節(jié)(AES算法)、32位字(IDEA)設計的,軟件實現(xiàn)速度相對較慢,而在最近的CAESAR競賽中,基于快速指令集設計的一些算法,例如MORUS、AEGIS,它們的軟件實現(xiàn)速度是非常快的。本文選擇了兩種非常有代表性的指令集SSE2與AES-NI進行研究,研究這兩種指令集在密碼算法中的使用方法,以及這些指令集應用到密碼算法中會提升效率,通過對這兩種指令集的研究,指出了使用指令集在密碼算法中的優(yōu)勢。

SSE2;AES-NI;指令集

引言

本文的討論范圍是基于軟件實現(xiàn)的密碼算法,目標實現(xiàn)平臺是當前的CPU處理器。設計密碼算法時,一般都會考慮密碼算法的實現(xiàn)效率問題,密碼算法如何設計才能實現(xiàn)起來更快、占用內(nèi)存資源更少?這需要考慮目標實現(xiàn)平臺所擅長執(zhí)行的操作。傳統(tǒng)的對稱密碼是基于比特(A5算法)、字節(jié)(AES算法)或32位字(IDEA算法)設計的,一般來說,基于字節(jié)設計的密碼算法要比基于比特設計的密碼算法軟件實現(xiàn)更有效,而基于字設計的密碼算法要比基于字節(jié)設計的密碼算法軟件實現(xiàn)更有效,而目前的CPU處理器上集成有很多處理更長數(shù)據(jù)塊的操作指令,如SSE2指令集(可處理128位的數(shù)據(jù))、AVX2指令集(可處理256位的數(shù)據(jù))和AES新指令集AES-NI(處理128位的數(shù)據(jù)),這些指令集可以用到密碼算法的設計和實現(xiàn)中,例如,目前正在進行的CAESAR競賽[1]中基于SSE2指令集設計的MORUS-640算法[2]的軟件實現(xiàn)效率可達1.11cycle/byte,基于AVX2指令集設計的MORUS-1280算法[2]的軟件實現(xiàn)效率可達0.69cycle/byte,基于 AES-NI實現(xiàn)的 AEGIS-128算法[3]的軟件實現(xiàn)效率可達 0.61cycle/ byte。可以看出,使用指令集設計的密碼算法實現(xiàn)效率很高,這可能是未來幾年設計密碼算法的一個趨勢。本文以SSE2指令集和AES-NI為例,介紹這兩種指令集的功能和使用方法,測試它們的實現(xiàn)效率,并分析了在密碼算法中使用這兩種指令后可提升的效率。

1 SSE2指令集

SSE2指令集[4]是在2000年出現(xiàn)的奔騰4處理器、至強處理器中引入的,目前的CPU處理器中幾乎都集成有SSE2指令集,它主要利用的是SIMD(single-instruction multiple-data)模型以提升數(shù)據(jù)操作的速度,即執(zhí)行一條指令并行處理多組數(shù)據(jù)。SSE2指令最大可操作128位的整數(shù),在密碼算法中,通常都是對整數(shù)的操作,這也是本文研究SSE2指令集的原因。

1.1 幾條典型SSE2指令的功能與使用

在對稱密碼算法中,通常選擇運算速度快、擴散效果好、混亂性好的操作,比較常用的幾種操作是:異或操作、移位操作、邏輯與操作、模加運算。本文會從SSE2指令集中選擇一些與這幾種操作相關的指令,并對它們的實現(xiàn)性能進行研究。

表1列出了4條非常具有代表性的SSE2指令,并列出了每條指令的名稱,大致描述了每條指令實現(xiàn)的功能,同時給出了每條指令對應的C語言函數(shù)[5]。

表1 SSE2指令

其中,PXOR指令是對128位的整數(shù)a與b做異或操作、PAND指令是對128位的整數(shù)a與b做邏輯與操作,PSLLDQ指令是對128位的整數(shù)a左移8×imm8位,PADDD指令是將128位的整數(shù)a與b分別分成4個32位的字,對應字分別做模232加法運算。

1.2 SSE2指令集的實現(xiàn)效率

了解這4條SSE2指令的實現(xiàn)功能后,下面的實驗將測試這4條SSE2指令的實現(xiàn)效率,為了與普通指令的實現(xiàn)效率做對比,在相同平臺下也測試了與SSE2指令對應的普通指令的實現(xiàn)速度。

實驗環(huán)境:在Intel(R)Core(TM)2 Duo E8400@3.0GHz的處理器上執(zhí)行,32位Windows7操作系統(tǒng),編譯器為vs2010。未使用任何加速技術,編程用標準C語言實現(xiàn)。C語言測試 SSE2指令需要加頭文件#include" emmintrin.h"。

表2列出了測試所得數(shù)據(jù),表中給出執(zhí)行一條SSE2指令平均需要的時鐘周期數(shù),并且在緊接著SSE2指令測試數(shù)據(jù)的下一行給出了與之相應普通指令的耗時,第三列對比了SSE2指令與普通指令的實現(xiàn)效率。效率比較時,需要注意的是,一條SSE2指令共操作128位的數(shù)據(jù),與之相應的普通指令只操作32位的數(shù),相當于,一條SSE2指令執(zhí)行的操作至少需要普通指令執(zhí)行4次才能完成,因此,普通指令的耗時需要乘以4再與SSE2指令的實現(xiàn)效率相比較。

表2 SSE2指令與普通指令耗時比較

從上表中的測試數(shù)據(jù)可知,使用SSE2指令會比使用普通指令快一倍多,在密碼算法的設計中,提升一倍的效率是相當可觀的。因此,在密碼算法的設計過程中,在不降低安全性的前提條件下,考慮使用SSE2指令集來提升密碼算法的效率還是很有必要的。

2 AES新指令集AES-NI

高級加密標準(AES)是美國聯(lián)邦政府采用的對稱加密標準,從安全性與實現(xiàn)效率來看,AES被廣泛認為是安全高效的。因此被眾多政府、企業(yè)等作為加密標準。并且,有很多密碼算法是基于AES設計的,如消息認證碼CMAC、PMAC,隨機數(shù)生成算法CTR-DRBG,以及認證加密算法AES-GCM與OCB。在最近的CAESAR競賽中很多設計者提交的算法都是基于AES設計的認證加密算法。因此,研究如何提升AES算法的執(zhí)行速度尤為重要。

2.1 AES-NI功能與使用

AES新指令集簡稱AES-NI[6],從2010年起,英特爾推出32納米微體系結構、代號為westmere的處理器中集成有AES新指令集。AES-NI共有六條指令,四條指令用來加解密(AESENC,AESENCLAST,AESDEC,AESDELAST),兩條指令用來擴展密鑰(AESIMC,AESKEYGENASSIST)。表3列出了AES-NI的6條指令,并描述了每條指令實現(xiàn)的功能。

表3 AES-NI對應的功能

軟件實現(xiàn)密碼算法時,通常使用C語言編寫,表4列出了6條指令對應的C函數(shù)[2],需要說明的是,若不考慮AES的密鑰擴展,表4中列出的前四條指令就可實現(xiàn)AES的加解密,而AES的密鑰擴展算法,需要用到后兩條指令,文獻[6]中介紹了使用后兩條指令擴展密鑰的具體方法。

表4 AES-NI對應的C函數(shù)

從以上6條指令中可以看出,AES-NI可以實現(xiàn)密鑰長度為(128位、192位和256位)的AES加解密,并且也支持不同模式的AES加解密,如ECB、CBC和CTR模式。

2.2 AES-NI的實現(xiàn)效率

了解了這6條AES指令的功能與用法后,下面將測試使用AES-NI的AES實現(xiàn)速度,并且與未使用AES-NI實現(xiàn)的AES實現(xiàn)速度做對比。

測試環(huán)境:intel i7-4770 3.4GHZ的處理器,64位Windows7操作系統(tǒng),編譯器為vs2010。未使用任何加速技術,編程用標準C語言實現(xiàn)。需要注意的是,在使用AES-NI前需要檢查目標CPU處理上是否集成有AES-NI,具有AES-NI的處理器才能做進一步的測試。C語言使用AES-NI時需要加頭文件#include"wmmintrin.h"。

本節(jié)測試了使用AES-NI實現(xiàn)的AES-128加密與解密的實現(xiàn)速度,如表5所示。需要注意的是,對加密與解密的測試是在已經(jīng)生成10輪子密鑰的條件下進行的。為了與普通指令實現(xiàn)AES的效率做對比,在相同平臺下也測試了用普通指令實現(xiàn)AES的速度。對應的也列在了表5中。

表5 AES-NI實現(xiàn)AES加解密的效率

另外,對AES-NI的密鑰擴展效率也進行了測試,分別測試了使用AES-NI生成10輪子密鑰的耗時,AES-NI擴展一輪子密鑰的耗時,以及執(zhí)行一條AESENC指令的耗時,即運行一輪AES的速度。同時,也給出了用普通指令實現(xiàn)它們的速度,測試數(shù)據(jù)如表6所示。

表6 AES-NI實現(xiàn)密鑰擴展與單輪AES加密速度

從表5和表6中的測試數(shù)據(jù)可以看出,使用AES-NI可以極大地提高AES相關算法的實現(xiàn)效率。在密碼算法的設計中,若考慮將AES的輪函數(shù)或密鑰擴展函數(shù)用在密碼算法中,就可以極大地提高密碼算法的實現(xiàn)效率。

3 結束語

本文介紹了SSE2指令集和AES-NI的功能與使用方式。并測試了這兩種指令集的實現(xiàn)效率。由此發(fā)現(xiàn)在密碼算法的設計中,若刻意使用這兩種指令集,會極大地提高密碼算法的實現(xiàn)速度。

[1]CAESAR.Cryptographic competitions.[OL].http://competitions.cr.yp.to/ caesar.html.2015.

[2]Wu H,Huang T.The Authenticated Cipher MORUS.[EB].http://competitions.cr. yp.to/round1/morusv1.pdf.2014.

[3]Wu H,Preneel B.AEGIS:A Fast Authenticated Encryption Algorithm.[EB].http://competitions.cr.yp.to/round1/aegisv1.pdf.2014.

[4]Intel.Intel?64 and IA-32 Architectures Software Developer’s Manual.[EB].http:// www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html.2015.

[5]Intel.Intrinsics Guide.[OL].https://software.intel.com/sites/landingpage/Intrinsics-Guide/.2013.

[6]Intel.Intel? Advanced Encryption Standard (AES)New Instructions Set.[EB].http:// www.intel.co.jp/content/dam/doc/white-paper/advanced-encryption-standard-new-instructions-set-paper.pdf.2010

Applications of SSE2 and AES-NI on Cryptographic Algorithm

Miao Xudong2Zheng Xiulin1,2Li Yanjun1
1.College of Communication Engineering,Xi’dian University,Xian Shaanxi7100071,China 2.Beijing Electronic Science and Technology Institute,Beijing 100070,China

The performance of the cryptographic algorithm is an important standard of measuring an algorithm.The design of traditional cryptographic algorithm is based on the bit(A5),byte(AES)or word(IDEA).Their software performance is relatively slowly.However,in the recent CAESAR competition,some cipher was designed based on fast instruction set,just like MORUS and AEGIS.Their performance was very fast.In this paper,we choose two typical instruction sets SSE2 and AESNI.Studied the methods of two instruction set used of cryptographic algorithm,and the performance of the instruction sets.Through the study of these two kinds of instruction sets,points out the advantage of the instruction sets used in cryptographic algorithm.

SSE2;AES-NI;instruction set

TN918.1

A

1672-464X(2016)2-12-05

(責任編輯:張卷美)

中央高?;究蒲袠I(yè)務費資助(項目編號:328201531)

** 作者簡介:苗旭東(1989-),男,漢族,碩士研究生,主要從事密碼學領域的研究。

猜你喜歡
指令集密鑰指令
基于Kubernetes的RISC-V異構集群云任務調度系統(tǒng)①
幻中邂逅之金色密鑰
幻中邂逅之金色密鑰
3DNow指令集被Linux淘汰
密碼系統(tǒng)中密鑰的狀態(tài)與保護*
《單一形狀固定循環(huán)指令G90車外圓仿真》教案設計
關于ARM+FPGA組建PLC高速指令控制器的研究
基于Qt和OpenDDS的船舶電力模擬訓練系統(tǒng)指令處理方法
Android密鑰庫簡析
基于Dais—CMX模型機的斐波那契數(shù)列指令集設計