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