一種采用gpu并行化實(shí)現(xiàn)sm2算法的方法
【專利摘要】本發(fā)明公開了一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,在GPU上實(shí)現(xiàn)并行大數(shù)運(yùn)算,將256bit的大數(shù)運(yùn)算拆分為4個(gè)64bit整數(shù)運(yùn)算,分別由4個(gè)線程并行處理;在GPU上使用并行大數(shù)運(yùn)算實(shí)現(xiàn)Point Add、Point Double運(yùn)算;在GPU上使用Point Add、Point Double運(yùn)算實(shí)現(xiàn)點(diǎn)乘運(yùn)算;在GPU上實(shí)現(xiàn)批量的點(diǎn)乘運(yùn)算;在主機(jī)上實(shí)現(xiàn)除點(diǎn)乘運(yùn)算以外的其他運(yùn)算,并調(diào)用GPU上的點(diǎn)乘運(yùn)算模塊,實(shí)現(xiàn)完整的SM2算法。本發(fā)明的積極效果是:充分發(fā)揮GPU的并行計(jì)算能力,實(shí)現(xiàn)高性能的SM2算法,與同價(jià)位的CPU相比,其性能可比CPU實(shí)現(xiàn)方式高10倍以上。
【專利說明】一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及密碼算法實(shí)現(xiàn)領(lǐng)域,具體涉及一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法。
【背景技術(shù)】
[0002]橢圓曲線公鑰密碼體制(Elliptic Curve Cryptosystem,簡稱ECC),即基于橢圓曲線離散對(duì)數(shù)問題的各種公鑰密碼體制,最早于1985年由N.Koblitz和V.Miller各自獨(dú)立地提出。它的基本思路是利用有限域上的橢圓曲線有限群代替基于離散對(duì)數(shù)問題的有限循環(huán)群所得到的一類密碼體制。
[0003]在相同安全強(qiáng)度的情況下,ECC的密鑰長度只有RSA密鑰長度的1/6甚至更少,運(yùn)算速度比RSA快,且有多種曲線參數(shù)可選擇。ECC以其高效率、高安全強(qiáng)度優(yōu)勢(shì),在信息安全應(yīng)用中具有巨大的市場(chǎng)發(fā)展空間。
[0004]SM2算法是由中國國家密碼管理局牽頭制定的商用密碼算法,SM2算法基于ECC算法改造而成,SM2算法的密鑰長度為256位。目前,我國正在商用密碼領(lǐng)域大力推廣應(yīng)用SM2系列商用密碼算法。
[0005]GPU (Graphics Processing Unit,圖形處理單元)可以理解為可編程的顯卡,在計(jì)算機(jī)中用于圖形圖像的處理。經(jīng)過最近幾年的發(fā)展,GPU已經(jīng)不限于圖形圖像處理,還應(yīng)用到大規(guī)模的并行計(jì)算領(lǐng)域,使用GPU并行計(jì)算技術(shù),有可能使算法的性能獲得數(shù)倍的提升。
[0006]單塊GPU通常具有成百上千的CORE (核心運(yùn)算單元),相比同價(jià)位的CPU而言,GPU所擁有的數(shù)百倍于CPU的CORE數(shù)量。GPU非常適合于執(zhí)行可高度并行化的密集型計(jì)算任務(wù),使用GPU執(zhí)行這些任務(wù),往往能提升數(shù)倍的性能。GPU技術(shù)未來將改變商業(yè)應(yīng)用、科學(xué)計(jì)算、云計(jì)算、計(jì)算機(jī)可視化系統(tǒng)、游戲和機(jī)器人等領(lǐng)域,甚至重新定義我們所熟知的計(jì)算機(jī)編程方式。
[0007]SM2算法的運(yùn)算屬于密集型計(jì)算任務(wù),因此可采用GPU和并行計(jì)算技術(shù)來實(shí)現(xiàn)高性能的SM2算法。
【發(fā)明內(nèi)容】
[0008]為了克服現(xiàn)有技術(shù)的上述缺點(diǎn),本發(fā)明提供了一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,可高性能地實(shí)現(xiàn)SM2算法。
[0009]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,包括如下步驟:
[0010]步驟一、在GPU上實(shí)現(xiàn)并行大數(shù)運(yùn)算;
[0011]步驟二、在GPU上使用并行大數(shù)運(yùn)算實(shí)現(xiàn)Point Add> Point Double運(yùn)算;
[0012]步驟三、在GPU上使用Point Add、Point Double運(yùn)算實(shí)現(xiàn)點(diǎn)乘運(yùn)算;
[0013]步驟四、在GPU上實(shí)現(xiàn)批量的點(diǎn)乘運(yùn)算;
[0014]步驟五、在主機(jī)上實(shí)現(xiàn)除點(diǎn)乘運(yùn)算以外的其他運(yùn)算,并調(diào)用GPU上的點(diǎn)乘運(yùn)算模塊,實(shí)現(xiàn)完整的SM2算法;
[0015]步驟六、在主機(jī)上批量執(zhí)行SM2算法運(yùn)算。
[0016]所述并行大數(shù)運(yùn)算的方法為:將256bit的大數(shù)運(yùn)算拆分為4個(gè)64bit整數(shù)運(yùn)算,分別由4個(gè)線程并行處理。
[0017]所述并行大數(shù)運(yùn)算的加法運(yùn)算方法為:線程η-1分別同時(shí)處理a->X和b_>z的第η個(gè)64bit整數(shù)的加法運(yùn)算,其中,n = 1,2,3,4 ;加法運(yùn)算的臨時(shí)結(jié)果和進(jìn)位分別存放在TempResult和Carry中,線程n_l產(chǎn)生的carry供線程η使用;然后,將Temp result和carry進(jìn)行累加并將carry清零,累加產(chǎn)生的進(jìn)位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位進(jìn)位外的所有carry都被清零,得到最終加法運(yùn)算結(jié)果和最終的進(jìn)位結(jié)果。
[0018]所述并行大數(shù)運(yùn)算的減法運(yùn)算方法為:線程η-1分別同時(shí)處理a->X和b_>z的第η個(gè)64bit整數(shù)的減法運(yùn)算,其中,n = 1,2,3,4 ;減法運(yùn)算的臨時(shí)結(jié)果和借位分別存放在TempResult和Carry中,線程n_l產(chǎn)生的carry供線程η使用;然后,將Temp result和carry進(jìn)行累減并將carry清零,累減產(chǎn)生的借位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位借位外的所有carry都被清零,得到最終減法運(yùn)算結(jié)果和最終的借位結(jié)果。
[0019]與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:采用GPU和并行計(jì)算方法,充分發(fā)揮GPU的并行計(jì)算能力,實(shí)現(xiàn)高性能的SM2算法,與同價(jià)位的CPU相比,采用GPU和并行計(jì)算方法實(shí)現(xiàn)的SM2算法,其性能可比CPU實(shí)現(xiàn)方式高10倍以上。
【專利附圖】
【附圖說明】
[0020]本發(fā)明將通過例子并參照附圖的方式說明,其中:
[0021]圖1為點(diǎn)乘運(yùn)算的分解圖;
[0022]圖2為并行化大數(shù)加法運(yùn)算示意圖;
[0023]圖3為并行化大數(shù)減法運(yùn)算示意圖。
【具體實(shí)施方式】
[0024]點(diǎn)乘運(yùn)算是實(shí)現(xiàn)SM2算法的核心運(yùn)算,其運(yùn)算速度從整體上決定了 SM2算法的實(shí)現(xiàn)效率。點(diǎn)乘算法即計(jì)算kP,其中,k是隨機(jī)選取的一個(gè)大正整數(shù),P是橢圓曲線上的一個(gè)點(diǎn)。點(diǎn)乘運(yùn)算可分解為多次的點(diǎn)加(Point Add)和雙倍點(diǎn)(Point Double)運(yùn)算,點(diǎn)乘運(yùn)算的分解如圖1所示。Point Add和Point Double運(yùn)算的內(nèi)部是一系列256bit的大數(shù)運(yùn)算,包括大數(shù)加、大數(shù)減等運(yùn)算。
[0025]本發(fā)明采用并行計(jì)算技術(shù),將256bit的大數(shù)運(yùn)算拆分為4個(gè)64bit整數(shù)運(yùn)算,分別由4個(gè)線程并行處理,可大幅提高大數(shù)運(yùn)算的速度,從而實(shí)現(xiàn)了高性能的SM2算法運(yùn)算。
[0026]本發(fā)明采用的并行大數(shù)加法運(yùn)算的示意圖如圖2所示,參與運(yùn)算的兩個(gè)256bit的大數(shù)a->x、b_>z均被拆分為4個(gè)64bit的整數(shù),線程O處理a_>x和b_>z的第一個(gè)64bit整數(shù)的加法運(yùn)算,線程I處理a->x和b_>z的第二個(gè)64bit整數(shù)的加法運(yùn)算,以此類推。對(duì)于一個(gè)運(yùn)算任務(wù)(task)來說,4個(gè)線程同時(shí)進(jìn)行加法運(yùn)算,加法運(yùn)算的臨時(shí)結(jié)果和進(jìn)位分別存放在Temp Result和Carry中,線程O產(chǎn)生的carry供線程I使用,線程I產(chǎn)生的carry供線程2使用,以此類推。然后,將Temp result和carry進(jìn)行累加并將carry清零,累加產(chǎn)生的進(jìn)位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位(線程3的進(jìn)位)外的所有carry都被清零,得到最終加法運(yùn)算結(jié)果和最終的進(jìn)位結(jié)果(最高位進(jìn)位)。
[0027]本發(fā)明采用的并行大數(shù)減法運(yùn)算的示意圖如圖3所示,參與運(yùn)算的兩個(gè)256bit的大數(shù)a->x、b_>z均被拆分為4個(gè)64bit的整數(shù),線程O處理a_>x和b_>z的第一個(gè)64bit整數(shù)的減法運(yùn)算,線程I處理a_>x和b_>z的第二個(gè)64bit整數(shù)的減法運(yùn)算,以此類推。對(duì)于一個(gè)task來說,4個(gè)線程同時(shí)進(jìn)行減法運(yùn)算,減法運(yùn)算的臨時(shí)結(jié)果和借位分別存放在TempResult和Carry中,線程O產(chǎn)生的carry供線程I使用,線程I產(chǎn)生的carry供線程2使用,以此類推。然后,將Temp result和carry進(jìn)行累減并將carry清零,累減產(chǎn)生的借位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位(線程3的借位)外的所有carry都被清零,得到最終減法運(yùn)算結(jié)果和最終的借位結(jié)果(最高位借位)。
[0028]同時(shí),GPU中可并行運(yùn)行成百上千個(gè)線程,每個(gè)點(diǎn)乘運(yùn)算占用4個(gè)線程,因此可在GPU中并行運(yùn)行多個(gè)點(diǎn)乘運(yùn)算。
[0029]本發(fā)明的具體實(shí)施步驟如下:
[0030]1.在GPU上實(shí)現(xiàn)并行大數(shù)加法、并行大數(shù)減法等運(yùn)算;
[0031]2.在GPU上使用并行大數(shù)加法、并行大數(shù)減法等運(yùn)算,實(shí)現(xiàn)Point Add, PointDouble 運(yùn)算;
[0032]3.在 GPU 上使用 Point Add、Point Double 實(shí)現(xiàn)點(diǎn)乘運(yùn)算;
[0033]4.在GPU上實(shí)現(xiàn)批量的點(diǎn)乘運(yùn)算;
[0034]5.在主機(jī)上實(shí)現(xiàn)除點(diǎn)乘運(yùn)算以外的其他運(yùn)算部分,并調(diào)用GPU上的點(diǎn)乘運(yùn)算模塊,實(shí)現(xiàn)完整的SM2算法;
[0035]6.在主機(jī)上批量執(zhí)行SM2算法運(yùn)算,主機(jī)部分的程序?qū)⑴康卣{(diào)用GPU執(zhí)行點(diǎn)乘運(yùn)算。
【權(quán)利要求】
1.一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,其特征在于:包括如下步驟: 步驟一、在GPU上實(shí)現(xiàn)并行大數(shù)運(yùn)算; 步驟二、在GPU上使用并行大數(shù)運(yùn)算實(shí)現(xiàn)Point Add> Point Double運(yùn)算; 步驟三、在GPU上使用Point Add、Point Double運(yùn)算實(shí)現(xiàn)點(diǎn)乘運(yùn)算; 步驟四、在GPU上實(shí)現(xiàn)批量的點(diǎn)乘運(yùn)算; 步驟五、在主機(jī)上實(shí)現(xiàn)除點(diǎn)乘運(yùn)算以外的其他運(yùn)算,并調(diào)用GPU上的點(diǎn)乘運(yùn)算模塊,實(shí)現(xiàn)完整的SM2算法; 步驟六、在主機(jī)上批量執(zhí)行SM2算法運(yùn)算。
2.根據(jù)權(quán)利要求1所述的一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,其特征在于:所述并行大數(shù)運(yùn)算的方法為:將256bit的大數(shù)運(yùn)算拆分為4個(gè)64bit整數(shù)運(yùn)算,分別由4個(gè)線程并行處理。
3.根據(jù)權(quán)利要求2所述的一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,其特征在于:所述并行大數(shù)運(yùn)算的加法運(yùn)算方法為:線程η-1分別同時(shí)處理a->x和b->z的第η個(gè)64bit整數(shù)的加法運(yùn)算,其中,n= 1,2,3,4 ;加法運(yùn)算的臨時(shí)結(jié)果和進(jìn)位分別存放在Temp Result和Carry中,線程n_l產(chǎn)生的carry供線程η使用;然后,將Temp result和carry進(jìn)行累加并將carry清零,累加產(chǎn)生的進(jìn)位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位進(jìn)位外的所有carry都被清零,得到最終加法運(yùn)算結(jié)果和最終的進(jìn)位結(jié)果O
4.根據(jù)權(quán)利要求2所述的一種采用GPU并行化實(shí)現(xiàn)SM2算法的方法,其特征在于:所述并行大數(shù)運(yùn)算的減法運(yùn)算方法為:線程n-Ι分別同時(shí)處理a->x和b->z的第η個(gè)64bit整數(shù)的減法運(yùn)算,其中,n= 1,2,3,4 ;減法運(yùn)算的臨時(shí)結(jié)果和借位分別存放在Temp Result和Carry中,線程n-Ι產(chǎn)生的carry供線程η使用;然后,將Temp result和carry進(jìn)行累減并將carry清零,累減產(chǎn)生的借位放入下一個(gè)線程的carry中,并使用GPU提供的運(yùn)算原語,實(shí)現(xiàn)直到除最高位借位外的所有carry都被清零,得到最終減法運(yùn)算結(jié)果和最終的借位結(jié)果O
【文檔編號(hào)】G06F9/38GK104461469SQ201410642545
【公開日】2015年3月25日 申請(qǐng)日期:2014年11月14日 優(yōu)先權(quán)日:2014年11月14日
【發(fā)明者】吳慶國, 張世雄, 李元正 申請(qǐng)人:成都衛(wèi)士通信息產(chǎn)業(yè)股份有限公司