一種用于智能卡的Montgomery模乘器的數(shù)據(jù)處理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及公鑰密碼學(xué)領(lǐng)域,尤其涉及一種用于智能卡的Montgomery模乘器的 數(shù)據(jù)處理方法及系統(tǒng)。
【背景技術(shù)】
[0002] W. Diffie和M. HelIman于1976年提出了公鑰密碼學(xué)。模乘算法是公鑰密碼體制的 核心,廣泛應(yīng)用于RSA,Diff ie-Hellman,ElGamal和ECC等公鑰算法當(dāng)中。P. L. Montgomery 在1985年提出了 Montgomery模乘算法,利用移位代替了傳統(tǒng)模乘算法中的除法運(yùn)算,十分 適合于硬件實(shí)現(xiàn)。
[0003] Montgomery 算法計(jì)算 a *b T-1Inod η 的值,其中 a, b〈n 并且 gcd(n, r) = 1。在公 鑰密碼體系中,η通常為素?cái)?shù),為了保證r和η互素,一般取r為2的整數(shù)次冪。例如,η為 一個(gè)k-bit的整數(shù),即2 k-l < n〈2k,則r = 2k。Montgomery算法的計(jì)算過程如下:
[0004] 函數(shù) MonPro (a, b)
[0005] 輸入:a、b、η
[0006] 輸出:a · b · r-1mod η
[0007] I. t = a · b
[0008] 2. u = (t+(t · n,mod r) · n)/r
[0009] 3.如果u彡η,返回u_n ;否則返回u
[0010] 其中η'需要滿足r Ttn · η' = 1。整數(shù)夕和η'都可以用擴(kuò)展歐幾里得算法 計(jì)算得出。從算法中可以看出,Montgomery模乘使用移位替代了除法,大大提高了算法的 執(zhí)行速度。
[0011] Montgomery算法的計(jì)算結(jié)果是a · b · rHmod η,因此如果要計(jì)算a · b mod η,需 要將a, b都變換到Montgomery域中進(jìn)行計(jì)算,即
[0012] I. al = a · r mod n, bl = b · r mod η
[0013] 2. cl = MonPro (al, bl) = a*r*b*r* r_1mod n = a · b · r mod n
[0014] 3. c = MonPro (cl, I) = a*b*r*l* r_1mod n = a · b mod n
[0015] 從上述計(jì)算過程中可以看出,Montgomery算法對于計(jì)算一次a · b mod n,并不占 有優(yōu)勢。但是進(jìn)行多次模乘運(yùn)算時(shí)(例如模冪運(yùn)算),將數(shù)據(jù)變換到Montgomery域中進(jìn)行 計(jì)算,算法運(yùn)行的速度會大大提高。
[0016] Montgomery算法有多種硬件實(shí)現(xiàn)方式。ζλΚ. Koc等人在"Analyzing and Comparing Montgomery Multiplication Algorithm" 中歸納了 5 種 Montgomery 算法的 實(shí)現(xiàn)方式(S0S,CI0S,F(xiàn)I0S,F(xiàn)IPS,CIHS),給出了每種算法所需要的乘法、加法次數(shù),存儲 器讀寫次數(shù),以及所需的存儲器空間等。C.Mclvor在"Modified Montgomery Modular Multiplication and RSA Exponentiation Techniques,'中提出了基-2 的 Montgomery 硬 件實(shí)現(xiàn)方法。浙江大學(xué)薛念等人實(shí)現(xiàn)了基-4的Montgomery模乘器的設(shè)計(jì)。S. Kawamura等 人提出了基于剩余數(shù)系統(tǒng)(RNS)Montgomery算法,具有較快的速度。A. F. Tenca等人提出 了一種基于流水線的可配置Montgomery算法硬件實(shí)現(xiàn),提高了算法的應(yīng)用范圍和靈活性。 Miaoqing Huang等對Tenca的算法硬件實(shí)現(xiàn)進(jìn)行了改進(jìn),提高了算法的速度。此外,還有 一些基于脈動陣列結(jié)構(gòu)的Montgomery模乘器設(shè)計(jì)。
[0017] 這些方法分別應(yīng)用在不同場合。例如,基于RNS算法的Montgomery模乘器適用 于對速度要求較高的情況;Tenca等提出的方法適用于數(shù)據(jù)長度可變的情況。但這些算 法都需要較大的存儲器單元來保存中間數(shù)據(jù),并且控制邏輯復(fù)雜,否則無法達(dá)到預(yù)期的速 度性能要求。像智能卡這中對資源要求較高的產(chǎn)品,一般使用Koc等人總結(jié)的方法設(shè)計(jì) Montgomery模乘器。其中FIPS方法由于使用乘加結(jié)構(gòu),適合于硬件實(shí)現(xiàn),因此應(yīng)用較為廣 泛。FIPS算法由兩個(gè)大循環(huán)和一個(gè)減法循環(huán)組成,通過積掃描方式計(jì)算a · b和m · η的乘 積,以及它們的和。每次內(nèi)循環(huán)結(jié)束之后執(zhí)行一次寫memory操作,最終結(jié)果保存在m或u 之中。
[0018] 目前,在智能卡產(chǎn)品中基于FIPS方法的Montgomery模乘器,由于從RAM讀取數(shù)據(jù) 效率較低,需要使用兩個(gè)時(shí)鐘周期才能獲得進(jìn)行乘法運(yùn)算的兩個(gè)乘數(shù)。算法循環(huán)中每次進(jìn) 行乘法運(yùn)算之前都需要額外的時(shí)鐘周期來讀取每次進(jìn)行乘法運(yùn)算的乘數(shù),限制了模乘器的 性能。
[0019] 清華大學(xué)李樹國等人在專利"VLSI用的蒙格瑪麗模乘算法及智能卡模乘器的 VLSI結(jié)構(gòu)"中基于FIPS算法設(shè)計(jì)了一種高效Montgomery模乘器。該設(shè)計(jì)采用兩個(gè)32位寬 的乘法器和三級并行流水線結(jié)構(gòu)能夠在1216個(gè)時(shí)鐘周期內(nèi)完成一次1024位的模乘運(yùn)算。 但該實(shí)現(xiàn)中,兩個(gè)32位寬的乘法器并行執(zhí)行需要一個(gè)時(shí)鐘周期內(nèi)讀出至少4個(gè)輸入數(shù)據(jù), 因此要求4個(gè)位寬為32位的存儲器或一個(gè)位寬為128位的存儲器;并且兩個(gè)乘法器并行運(yùn) 算雖然減少了模乘的時(shí)鐘數(shù),但增加了芯片的面積和功耗,不適合像智能卡這種對硬件資 源和功耗要求比較高的場合。
[0020] Shigeo Ohyama在"Arithmetic Circuit for Montgomery Multiplication and Encryption Circuit"中采用CIOS方法實(shí)現(xiàn)Montgomery算法。該設(shè)計(jì)采用2塊單端口 RAM (Random Access Memory)和一個(gè)高基乘法器,但其實(shí)現(xiàn)速度僅與普通的FIPS算法相同, 因此并不具有競爭力。
【發(fā)明內(nèi)容】
[0021] 為了解決上述問題,本發(fā)明提出了一種用于智能卡的Montgomery模乘器的數(shù)據(jù) 處理方法及系統(tǒng),能夠在硬件規(guī)模和功耗基本不變的情況下,使算法執(zhí)行速度大幅提高。
[0022] 為了達(dá)到上述目的,本發(fā)明提出了一種用于智能卡的Montgomery模乘器的數(shù)據(jù) 處理方法,該方法包括:
[0023] 通過4s2+7s次乘法運(yùn)算獲得Montgomery模乘器的運(yùn)算結(jié)果的低位2s個(gè)字;采用 32x32位的乘法器分別計(jì)算出axb和mxn的w位結(jié)果。
[0024] 通過4s2_4s次乘法運(yùn)算獲得Montgomery模乘器的運(yùn)算結(jié)果的高位2s個(gè)字;采用 32x32位的乘法器分別計(jì)算出axb和mxn的w位結(jié)果。
[0025] 其中,a、b、n為2s位的232進(jìn)制數(shù);s = k/64,k是要運(yùn)算的模數(shù)的長度,s向上取 整。
[0026] m = t · n' mod r ;gcd(n, r) = 1,r 為 2 的整數(shù)次冪,η' 滿足 r · r-1_n · η' = 1。
[0027] 所述w為64位。
[0028] a = (a[2s_l],a[2s_2],...,a[l],a[0]);
[0029] b = (b [2s_l],b [2s_2],...,b [1],b [0]);
[0030] n = (n [2s_l],n [2s_2],...,n [1],n [0]);
[0031] m = (m[2s_l],m[2s_2],...,m[l],m[0])。
[0032] 優(yōu)選地,采用32x32位的乘法器計(jì)算出axb的w位結(jié)果包括以下四個(gè)步驟:
[0033] 21、將a[2j]*b[2(i_j)]的結(jié)果的低32位和高32位分別存儲在中間結(jié)果寄存器 MOL和MOH中,將中間結(jié)果寄存器tl、t0中存儲的w位數(shù)據(jù)分別和MOH、MOL中存儲的w位 數(shù)據(jù)相加,其中tl存儲w位數(shù)據(jù)的高32位,t0存儲w位數(shù)據(jù)的低32位;將相加結(jié)果的高 32位與低32位分別存儲在中間結(jié)果寄存器tl,t0中;相加結(jié)果的進(jìn)位存儲在進(jìn)位保存寄 存器CO中。
[0034] 22、將a[2j+l]*b[2(i_j)]的結(jié)果的高32位和低32位分別存儲在中間結(jié)果寄存 器MOH和MOL中,將中間結(jié)果寄存器t2、tl中存儲的w位數(shù)據(jù)分別和中間結(jié)果寄存器Μ0Η、 MOL中存儲的w位數(shù)據(jù)相加,其中t2存儲w位數(shù)據(jù)的高32位,tl存儲w位數(shù)據(jù)的低32位; 將相加結(jié)果的高32位與低32位分別存儲在中間結(jié)果寄存器t2、tl中;相加結(jié)果的進(jìn)位存 儲在進(jìn)位保存寄存器Cl中。
[0035] 23、a[2j]*b[2(i_j)+l]的過程與步驟 22 相同。
[0036] 24、將a[2j+l]*b[2(i_j)+l]的結(jié)果的高32位和低32位分別存儲在中間結(jié)果寄 存器MOH和MOL中,將中間結(jié)果寄存器t3、t2中存儲的w位數(shù)據(jù)分別和中間結(jié)果寄存器Μ0Η、 MOL中存儲的w位數(shù)據(jù)相加獲得第一相加結(jié)果,其中t3存儲w位數(shù)據(jù)的高32位,t2存儲w 位數(shù)據(jù)的低32位;將第一相加結(jié)果與進(jìn)位保存寄存器CO中存儲的數(shù)據(jù)相加獲得第二相加 結(jié)果,將第二相加結(jié)果的高32位與低32位分別存儲在中間結(jié)果寄存器t3、t2中;兩次相 加結(jié)果的進(jìn)位存儲在進(jìn)位保存寄存器C2中;其中,i的取值范圍為:0到s-1 ;j的取值范圍 為:〇到i-1。
[0037] MOH、MOL、t3、t2、tl、tO是6個(gè)w/2位的所述中間結(jié)果寄存器,C2、C1分別為不小 于Iog2 (3s)、Iog2 (4s)位的進(jìn)位保存寄存器,CO為1位的進(jìn)位保存寄存器,中間結(jié)果寄存器 與進(jìn)位保存寄存器的初始值均為0。
[0038] 在獲得Montgomery模乘器的運(yùn)算結(jié)果的高位2s個(gè)字的運(yùn)算過程中,i的取值范 圍為:〇到s-1 ;j的取值范圍為:i+l到s-1。
[0039] 優(yōu)選地,該方法還包括:低位計(jì)算模塊每次需要計(jì)算{a[2i+l],a[2i]} x{b[l],b[0]}和{111[21+1],111[21]:^{11[1],11[0]},并且計(jì)算出下次運(yùn)算所需的 111[21+1]和 m[2i],存儲在m的m[2i+l]、m[2i]位置;低位計(jì)算模塊每執(zhí)行一次運(yùn)算,運(yùn)算結(jié)果的高w位 存儲在中間結(jié)果寄存器t3、t2中,其中,t3存儲所述高w位中的高32位,t2存儲高w位中 的低32位;運(yùn)算結(jié)果的低w位存儲在中間結(jié)果寄存器tl、t0中,其中,tl存儲低w位中的 高32位,t0存儲低w位中的低32位;運(yùn)算結(jié)果的進(jìn)位存儲在進(jìn)位保存寄存器C2中,并且 將運(yùn)算結(jié)果右移w位。
[0040] 優(yōu)選地,該方法還包括:高位計(jì)算模塊每執(zhí)行一次運(yùn)算,將第二計(jì)算模塊產(chǎn)生的w 位的運(yùn)算結(jié)果保存在數(shù)據(jù)m的m[2i+l]、m[2i]存儲位置,其中m[2i+l]存儲運(yùn)算結(jié)果的高 32位,m[2i]存儲運(yùn)算結(jié)果的低32位;高位計(jì)算模塊