專利名稱::基于ucps協(xié)議中ecc素數(shù)特殊性的快速模乘方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及多媒體領(lǐng)域,特別是涉及一種基于UCPS協(xié)議(UnifiedContentProtectionSystem統(tǒng)一數(shù)字保護協(xié)議)中ECC(EllipticCurveCryptography橢圓曲線密碼體系)素數(shù)特殊性的快速模乘方法。
背景技術(shù):
:UCPS協(xié)議是我國提出的具有自主知識產(chǎn)權(quán)的數(shù)字保護協(xié)議,該協(xié)議可以用于便攜式多媒體設(shè)備到高清DTV(數(shù)字電視)的各種多媒體設(shè)備上。它的提出一方面為繞開HDCP(High-bandwidthDigitalContentProtection高帶寬數(shù)字內(nèi)容保護規(guī)范)的專利壁壘,另一方面也是為適應(yīng)中國這個龐大的數(shù)字多媒體市場而開發(fā)的適合中國國情的數(shù)字保護協(xié)議。在UCPS協(xié)議中,最耗費運算時間的是數(shù)字簽名部分,通常源端或者目的端要調(diào)用3次以上的橢圓曲線(ECC)標量乘,而影響到標量乘速度的是模乘運算。協(xié)議中ECC符合BSIS0/IEC15946-1-2003、BSIS0/IEC15946-2-2003及BSIS0/IEC15946-3-2003的規(guī)定;其簽名體制符合IEEE1363-2000中7.2.8節(jié)的ECSP-DSA(橢圓曲線簽名算法DSA版)以及7.2.9節(jié)的ECVP-DSA(橢圓曲線驗證算法DSA版)的規(guī)定;而其中標量乘法運算符合IEEE1363-2000中的標量乘法規(guī)定。在標量乘中包括點加與倍點兩種方法,在UCPS協(xié)議中計算一次標量乘大約需要200多次點加和倍點運算,因此為了提高執(zhí)行速度,盡量避免求模逆,一般采用投射坐標系進行運算,這樣點加和倍點運算中最基本、最常用的模塊就是模乘、模加和模減。1次點加運算需要16次模乘運算,1次倍點運算需要10次模乘運算,而剩余的模加與模減運算相對與模乘運算而言其占用時間可以忽略不記,因此,模乘直接關(guān)系到標量乘的運算速度。模乘是乘數(shù)與被乘數(shù)相乘得出乘積后對某個素數(shù)求模運算(即求余數(shù)),在一般情況下多采用蒙格馬利模乘。但是由于蒙格馬利模乘是一種通用模乘方法,軟硬件實現(xiàn)成本大,即便是進行優(yōu)化也會保持原有的框架,實現(xiàn)代價還是不會有很明顯的減少,因此,對一些特殊的場合就需要根據(jù)素數(shù)來確定專有模乘方法,這樣實現(xiàn)代價和運算速度就會明顯改善。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種基于UCPS協(xié)議中ECC素數(shù)特殊性的快速模乘方法,能夠有效簡化計算的復雜性,提高計算速度。為解決上述技術(shù)問題,本發(fā)明的基于UCPS協(xié)議中ECC素數(shù)特殊性的快速模乘方法是先將192位的ECC素數(shù)轉(zhuǎn)換成冪指數(shù)形式,然后再將兩個192位的模乘數(shù)先進行硬乘得到一個384位的數(shù)據(jù),通過所述冪指數(shù)形式的ECC素數(shù)對所述的384位的數(shù)據(jù)進行化簡,得到3個192位整數(shù)和1個32位整數(shù),通過對這4個數(shù)據(jù)求模加得出最終模乘結(jié)果。UCPS協(xié)議中橢圓曲線密碼體系標量乘是整個協(xié)議中最耗費時間的部分,而模乘又是其中的基本部分。針對標量乘中的模乘,采用本發(fā)明的方法從根本上簡化了計算的復雜性,提高了計算速度,比傳統(tǒng)的蒙格馬利模乘算法平均快67倍,而且從軟件來看與蒙格馬利模乘相比其代碼也較少,容易在實際應(yīng)用中實現(xiàn)。下面結(jié)合附圖與具體實施方式對本發(fā)明作進一步詳細的說明附圖是本發(fā)明的模乘算法流程圖。;以二進制來衡:具體實施方式算法原理UCPS系統(tǒng)中使用定義在素數(shù)域GF(p)上的橢圓曲線,如下式所示y2=x3+ax+b公式(1)其中素數(shù)如下p=為192位。從上述參數(shù)可以看出素數(shù)p比較特殊,因此可以化簡為冪指數(shù)形式,其值為p=2192-216-1,,這樣就用3個數(shù)字表示一個192位的整數(shù),其中2192表示24個字節(jié),216表示兩個字節(jié),這兩個數(shù)字都是整字節(jié)的。根據(jù)這個值的特殊性,可以構(gòu)造本發(fā)明的模乘算法,其流程圖參見附圖所示。設(shè)C與D分別表示兩個192位的素數(shù),其中C=c23c22*"c。,D=d23d22*"d。,并且C〈P,D〈p(如果C或D大于p,可以先對p取模,然后再計算),Ci與&都表示一個字節(jié)(i=0,1''23)。模乘算法計算步驟如下首先求CXD的全展開式,CXD=a23a22...a。b23b22...b。公式(2)得到384位數(shù)據(jù),其中ai與h都表示一個字節(jié)(i=0,1…23)。根據(jù)公式(2)可得如下推導式CxDmodp=a23a22…ao623^22…^omodP=[(a23w.a0).2192+623622…6。]modp=[(a23a22--,a0)'(/>+216+l)+623fe22…/jo]modp=[(a23a2「-a0).(216+1)+623622…6。]modp=[("23a22.'.a0).216+"23^22…a。+623^22…&0jmodp公式(3)=[(。23"22021…Qo).216+"21a20."a0OlO0+a23a22."a0+&3622^。Jmod/7=[(a23a22).2192+a21"2(T"aOOl0O+a23fl22."a。+623622…&。jmodp=[(a23a22).0+2'6+l)+"21a20."a(MO0+"23a22"'a0+*2A2…6。]mod/=[(a23a22).(216十l)+a2ia2o…aoOi00+fl23a22."a。+623622…6(Jmod/=|3+XI++5]modp在求模乘的過程中用素數(shù)P將384位的數(shù)據(jù)化簡為4個整數(shù)A、B、A1J,其中A=a23a2,..a0,B=b23b22...b0,Al=a;^a2o…aooa23a22、2二a23a220!00,X寸于2,=0。=0x00,0^0。分別表示一個字節(jié);其中,3個為192位的整數(shù),1個為32位的整數(shù)。數(shù)字中的"Oi"表示一個值為"O"的字節(jié)(i=0,121),這樣就可以通過全展開式很快計算出所有的^與bi,這樣就可以分成四個式子(見公式(3)的最后推出的結(jié)果),根據(jù)這四個式子然后求和就可以很快計算出模乘的結(jié)果。對這種模乘算法需要進行幾點說明1、在計算模加的過程中采用先計算所有這4個數(shù)的和,然后全部計算完之后再求模,這樣減少了2次求模時間。2、由于本發(fā)明的算法是先求硬乘然后再簡化,因此需要一定的存儲空間,UCPS協(xié)議的ECC系統(tǒng)是192位,所以所需的額外存儲空間不大。為了很好的說明算法的執(zhí)行過程,本發(fā)明給出如下偽代碼(在以下數(shù)組表示中,下標為"O"表示最高位,隨著數(shù)字增大依次降低)voidSimple_Multi(unsignedcharfirst_num[24],unsignedcharsecond—皿m[24],unsignedcharresult[24]){unsignedchartemp_num[48],jingwei=0;//temp_num存方文兩個數(shù)的硬乘結(jié)果,jingwei是進位。unsignedlongtemp;〃temp是存放在硬乘計算過程中的臨時數(shù)據(jù)。unsignedcharresult_num[24],A[24],B[24],Al[24],X[24];〃result—皿m表示在后面模加過程中的中間變量,A表示硬乘后的前24位結(jié)果,B表示硬乘后的后24位結(jié)果,A1表示A循環(huán)左移兩個字節(jié)后的結(jié)果,X表示A最高兩個字節(jié)左移2個字節(jié)后的結(jié)果。inti=0,j=0;〃i、j表示兩個下標變量。for(i=0;i<48;i++)temp_num[i]=0;〃初始化t卿—誦數(shù)組。for(i=23;i>=0;i—){jingwei=0;〃乘數(shù)數(shù)組中每個數(shù)字與整個被乘數(shù)數(shù)組相乘之前都要初始化jingwei。for(j=23;j>=0;j—){temp=second—皿m[i]氺first—皿m[j]+temp_num[i+j+l]+jingwei;//乘數(shù)數(shù)組中每個數(shù)字與整個被乘數(shù)數(shù)組相乘。jingwei=t卿>>8;〃提取進位t卿—皿m[i+j+l]=(unsignedchar)(t卿);〃得出結(jié)果}temp_num[i]=jingwei;〃最后的進位結(jié)果放到數(shù)組最高位}for(i=0;i<24;i++)A[i]=temp_num[i];〃把高24位放入A中B[i]=temp_num[i+24];〃把低24位放入B中j=(i+2)%24;〃臨時變量j是為下面循環(huán)左移A中的數(shù)據(jù)做準備Al[i]=t卿—皿m[j];〃把A中的數(shù)據(jù)循環(huán)左移放入到A1中入[:[]=0;〃初始化3數(shù)組把a中放入相應(yīng)的數(shù)值把a中放入相應(yīng)的數(shù)值X[20]=temp—num[O]rX[21]=temp_num[l];//result_num=A+B;Module—add(A,B,Al,X,p,result);〃求A+B+A1+X的模力口}在函數(shù)中第一個參數(shù)firstjium表示模乘的被乘數(shù),第二個參數(shù)seconcL皿m表示乘數(shù),第三個參數(shù)result表示模乘結(jié)果。在函數(shù)的結(jié)尾用了三次模加函數(shù),Module—add函數(shù)第一個參數(shù)表示模加的被加數(shù),第二個參數(shù)表示加數(shù),第三個表示取模的素數(shù),第四個表示運算結(jié)果。本發(fā)明的算法采用的是以整字節(jié)為單位進行運算,但是目前計算機大多是32位系統(tǒng),因此在實際編程的過程中可以采用32位。本發(fā)明的方法可以進行試驗測試,在試驗測試過程中,采用蒙格馬利模乘和本發(fā)明的算法進行對比。對比從兩個方面進行,第一方面是給定相同的輸入數(shù)據(jù),然后對比輸出數(shù)據(jù)是否相同;第二個方面是給定相同的輸入和相同的輸出數(shù)據(jù),然后計算兩種算法所需的運算時間。測試環(huán)境P4、512M內(nèi)存,聯(lián)想啟天M4880計算機。為了使對比測試更有代表性,給出五組對比數(shù)據(jù)第一組CDresult第二組CDresult第三組C=0xfffeeedddcccbbbaaa999888777666555444333222111000;D=0xfdecba9876543210fdecba9876543210fdecba9876543210;result=0x9865657dla757e97d53932b9ee42bb6ba27606882902aaca;第四組CDresult=Oxl0xc3faea676fb8385fabf002053ed8021493e519a30f426eaa;0x567890abcedf0e90452d4089724c0fc6f59bb094f8b11234;<table>tableseeoriginaldocumentpage7</column></row><table>根據(jù)表中的數(shù)據(jù),可以得出兩種算法的近似效率比n,101+100.2+107.76+111.21+116.74537.04…,、》"、-=-=6.23公式(4)17.04+17,16+17.26+17.28+17.586.26厶>、、乂從上述對比測試可以看出,本發(fā)明所提出的算法得出的結(jié)果與蒙格馬利模乘方法得出的結(jié)果一致;另外,計算復雜度也大為將低(主要是指編程實現(xiàn)方面),計算時間大為節(jié)省,提高了約67倍。這說明本發(fā)明所提出的算法針對UCPS協(xié)議中ECC的素數(shù)模型是有效可行的,算法原理也是正確的。本發(fā)明的模乘算法中最費時間的是兩個數(shù)進行硬乘,目前大數(shù)硬乘的優(yōu)化方法有很多,如果采用這些優(yōu)化方法可以更加完善對本發(fā)明的算法,執(zhí)行效率也會有明顯的提高。從原理上來看,本發(fā)明的模乘算法有嚴格的數(shù)學證明,并且從測試結(jié)果也得到了證明。對于本發(fā)明的模乘算法由于避開了反復的求模運算,因此運算速度也大幅度提高,這樣就為簽名驗證算法的快速執(zhí)行奠定了基礎(chǔ)。以上結(jié)合具體實施例對本發(fā)明進行了詳細的說明,這些并非構(gòu)成對本發(fā)明的限制。在不脫離本發(fā)明原理的情況下,本領(lǐng)域的技術(shù)人員還可作出許多變形和改進,這些也應(yīng)屬于本發(fā)明的保護范圍。權(quán)利要求一種基于UCPS協(xié)議中ECC素數(shù)特殊性的快速模乘方法,其特征在于先將192位的ECC素數(shù)轉(zhuǎn)換成冪指數(shù)形式,然后再將兩個192位的模乘數(shù)先進行硬乘得到一個384位的數(shù)據(jù),通過所述冪指數(shù)形式的ECC素數(shù)對所述的384位的數(shù)據(jù)進行化簡,得到3個192位整數(shù)和1個32位整數(shù),通過對這4個數(shù)據(jù)求模加得出最終模乘結(jié)果。2.如權(quán)利要求1所述的方法,其特征在于,簡化ECC素數(shù)的方法是在UCPS協(xié)議中素數(shù)域GF(p)上的橢圓曲線為y2=x3+ax+b,素數(shù)為p=Oxfffffffffffffffffffffffffffffffffffffffffffeffff,以二進制來衡量為192位,將素數(shù)p化簡為冪指數(shù)形式,其值為p=2192-216-1,這樣就用3個數(shù)字表示一個192位的整數(shù),其中2192表示24個字節(jié),216表示兩個字節(jié),這兩個數(shù)字都是整字節(jié)的。3.如權(quán)利要求1所述的方法,其特征在于,所述得到384位的數(shù)據(jù)的方法是設(shè)兩個192位的整數(shù)為C=c23c22*"C。、D=(123(122(1。,其中Ci、di分別表示一個字節(jié),0《i<24,并且C<p,D<p;將兩個整數(shù)C和D進行硬乘,得到384位數(shù)據(jù)CXD=a23a22"'a。b23b22"'b。,其中ai、bi分別表示一個字節(jié),0《i<24。4.如權(quán)利要求1所述的方法,其特征在于,所述384位的數(shù)據(jù)化簡的方法是在求模乘的過程中用素數(shù)P將384位的數(shù)據(jù)化簡為4個整數(shù)A、B、AlJ,其中A=a23a22'"a。,B=b23b22'"b。,Al=a;^a2。…a。。a23a22、2二a23a220,0。,對于2,=0。=0x00,0"0。分別表示一個字節(jié);其中,3個為192位的整數(shù),1個為32位的整數(shù)。全文摘要本發(fā)明公開了一種基于UCPS協(xié)議中ECC素數(shù)特殊性的快速模乘方法,先將192位的ECC素數(shù)轉(zhuǎn)換成冪指數(shù)形式,然后再將兩個192位的模乘數(shù)先進行硬乘得到一個384位的數(shù)據(jù),通過所述冪指數(shù)形式的ECC素數(shù)對所述的384位的數(shù)據(jù)進行化簡,得到3個192位整數(shù)和1個32位整數(shù),通過對這4個數(shù)據(jù)求模加得出最終模乘結(jié)果。本發(fā)明能夠有效簡化計算的復雜性,提高計算速度。本發(fā)明比傳統(tǒng)的蒙格馬利模乘算法平均快6~7倍,而且從軟件來看與蒙格馬利模乘相比其代碼也較少,容易在實際應(yīng)用中實現(xiàn)。文檔編號H04L29/06GK101764787SQ200810044170公開日2010年6月30日申請日期2008年12月24日優(yōu)先權(quán)日2008年12月24日發(fā)明者袁世強申請人:上海華虹集成電路有限責任公司