郭汝廷
1 引言
2 橢圓曲線因子分解方法介紹。
年 H.W .Lenstra 創(chuàng)造了橢圓曲線因子分解方法。該方法是在Pollard p-1 方法的基礎(chǔ)上發(fā)展而成。如果整數(shù) N 有素因子 p ,p-1 是光滑數(shù)。用 p-1 方法就可以找到這個素因子。但當p 比較大時 p-1 光滑的概率比較小。所以該方法不易找到大的素因子(比如40位以上)。
N}F7TQ4_%HRS@T[T7F]1]IS點擊并拖拽以移動 ? ? ? ? ? ? ? ? ? ? ? ?(1)
的點集 36{TDICRKE2`3Z_OQ@WW{$K點擊并拖拽以移動,其中0H4R~2KJ948523$T2[29)6G點擊并拖拽以移動且$$ZU8NGY8([5AKMI2}14@YH點擊并拖拽以移動此點集加上無窮遠點在定義加法運算后構(gòu)成一個Abel 群。
給定橢圓曲線E上的兩個點{W[`DW6{3F(RX{R`HE3MO6U點擊并拖拽以移動和橢圓曲線}99T@4L9$CI4YPTKI(7E~`H點擊并拖拽以移動
JKC~%%7@~VMV~ASB`G}(YEE點擊并拖拽以移動用下面的公式計算:
7Y(T9QI%D56J[9V8NCGITKR點擊并拖拽以移動
9SY5BS4LQ1OZCF_N_1[JG)H點擊并拖拽以移動
ZIK6(QUM]KS[2BGRHUJOID6點擊并拖拽以移動
如果IHO{HTJJ___S3H)Z4KK][)I點擊并拖拽以移動為一素數(shù),Helmut Hasse證明了群 G 的階介于FB9VAU6H]{88CT95JY_4$VH點擊并拖拽以移動和AQR{%W%GPEQ6Z)NX~UH{J9R點擊并拖拽以移動之間。通過改變a,b的值可以得到階不同的群。如果該群的階光滑,就可以找到素因子 p 。這樣對同樣大小的 p 利用不同的橢圓曲線可以得到階介于0K]P4PB1H6(KZH5X_~_$8ET點擊并拖拽以移動 和_WDH}JG6PH(QX{QU3250{]U點擊并拖拽以移動之間的多個群,而 p-1 方法只能限制在階為 p-1 的乘法群。Lenstra 的橢圓曲線因子分解方法算法如下:
輸入: 奇合數(shù)。
(1)選擇(E,P),ET5]}E$1DZU39H6E)]2K937點擊并拖拽以移動,BL%PB9ZJ%9ESYZ8G94PXWSA點擊并拖拽以移動,P是E在Z上的點;
(2)計算 {BVM({9I@46IR48X9V[VZ$6點擊并拖拽以移動,若 7JDHZTA)J6}JFV[}$7Q](82點擊并拖拽以移動 則輸出d;否則返回第一步;
(3)選擇 BJ]INPKPA9I{1DI(8WSEEMX點擊并拖拽以移動;
(4)計算 $7`F]K)X3)N9KUTP42U329L點擊并拖拽以移動其中P4Y[Z$V$17JF])5%}1BVG3J點擊并拖拽以移動;
(5)計算kP (mod m)點擊并拖拽以移動若在計算過程中出現(xiàn)整數(shù)s對模m 的求逆運算無法繼續(xù),則計算[PJV3_44R}B`SL6{((8)5NK點擊并拖拽以移動若ULG54[OW`}9GRT[QBDO$N9M點擊并拖拽以移動 則輸出 d。否則返回第一步。由于求逆的運算比較耗時,Montgomery 用齊次坐標對上述算法進行了如下改進。
選擇橢圓曲線
Z(FP}6LXBY[2FY7`4435@{W點擊并拖拽以移動(2)
對于橢圓曲線(2)Montgomery 給出了如下的加法公式和倍點公式
GIK42HO$6$B~H$3RRG%XY5S點擊并拖拽以移動
利用上面的公式,計算點的加法需要進行6次乘法和4次加法運算;計算倍點需要進行5次乘法和4次加法。利用改進后的方法,Brent分解了第十個Fermat數(shù)。
GMP大整數(shù)運算庫是一個開源庫。該庫提供了長整數(shù)和有理數(shù)以及高精度浮點的 C語言庫函數(shù)。數(shù)據(jù)運算精度僅受計算機物理內(nèi)存的限制。該運算庫的源代碼在CentOS6.5操作系統(tǒng)上編譯后即可使用。利用該運算庫的 mpz_t 數(shù)據(jù)類型,可以開發(fā)基于橢圓曲線因子分解方法的C語言程序,也可以利用它提供的C++類mpz_class。利用該運算庫編寫的程序,很容易找到一個大合數(shù)30位以內(nèi)的素因子。
例如用該方法選擇橢圓曲線可以分解梅森數(shù)
其中P96是一個96位的素數(shù)。
(作者單位:山東大學信息化工作辦公室)