rabinmiller演算法
① Miller Rabin演算法的優化實現
Miller-Rabin演算法最為耗時的步驟在2.2模冪操作和2.3.2 循環。對演算法的優化實現主要集中在對這兩部分運算的優 化。對模冪操作的優化有兩種途徑:減少模冪演算法中的模乘 操作和優化模乘操作。在求模冪的過程中不能先求冪最後一次求模,這樣會產生一個十分巨大的中間結果,造成實際的 不可操作,所以在求模冪的演算法中用模乘代替乘法,使得中 間結果的長度不超過模的長度。對模冪演算法的優化,我們使 用改進的滑動窗口演算法結合Montgomery模乘和模平方演算法。表1給出模冪演算法的比較。 模冪演算法 預先計算 模平方 模乘法 模平方 模乘法 最壞情況 平均情況 平方乘演算法滑動窗口類演算法 改進的滑動窗口演算法 011 02k -32k-1-1 tt-(k-1)≤次數≤t t-(k-1)≤次數≤t t (t/k)-1 (t/k)-1 t/2 t/k(2k-1)/ 2kk≤t/k(2 -1)/ * 模冪演算法比較,其中k是窗口大小,根據情況 選擇以達到最優,t是指數的二進制位數。 優化的模冪演算法描述:輸入: x,e=(e tet-1?e1e0)2,其中et=1,k≥1( 窗口大小)輸出: xe mod n1、預計算1.1、x1← MontMul(x, R2,n),x2←MontSqu(x 1, n)1.2、對i 從1 到2k-1-1計算x2i+1←MontMul(x2i-1, x2,n)2、A←R,i ←t3、 當i≥ 0時作下面的操作: 3.1、如果ei=0,A←MontSqu(A ,n),i← i-13.2、否則找到最長的位串eiei-1?es使得i-s+1≤k並且es=1,計算3.2.1、A <-A2i-s+1 , (利 用MontSqu函數計算)3.2.2、A <-A*X(ee ...e )2 ,(利 用MontMul函數計算)3.2.3、i ←s-14、A←MontMul(A ,1 ,n)5、返回A其中MontMul(x,y,n) 是Montgomery模乘函數,函數輸出 結果為x*y*R-1 mod n,MontSqu(x,n) 是Montgomery模平方函 數,輸出結果為x2R-1 mod n。模乘演算法如果採用大整數乘法 和除法求模乘,因為涉及耗時的除法操作,所以要相對較 慢,結合大整數乘法和Barrett求模演算法可以用2(n2+3n+1) 步 單精度乘法完成。使用Montgomery求模演算法結合大整數乘法 演算法,可以 在 2n(n+1) 步單精度乘法內完成演算法。 Montgomery模平方的操作可以在3n(n+1) /2步單精度乘法內 完成,而Barrett模平方需要(3n(n+3)/2+1) 步單精度乘法。結 合改進的滑動窗口演算法和Montgomery類演算法,可以得到目前 非特殊情況下的最優的模冪演算法。在Miller-Rabin演算法的2.3.2循環中的模平方操作我們沒有 使用Montgomery模平方演算法,因為該演算法給出的結果帶有R-1這個參數,在2.3.2循環中處理掉這個參數將占整個循環運 行時間中的很大部分,尤其是在循環的控制參數s 相對較小的時候。我們在這里使用大整數平方演算法結合Barrett求模算 法,2.3.2的循環最壞情況需要(s-1)(3n(n+3)/2+1)步單精度乘法。
② Miller Rabin演算法基於概率的素數測試演算法的基本框架
在概率素數測試演算法領域,一種常見的基本框架被廣泛應用[1]。這個框架的核心是處理給定的正奇數n。首先,我們需要定義一個集合W(n),它屬於Z(n),後者是模n的非負整數集合,具備以下特性:
- 對於Z(n)中的任意非負整數a,我們能在多項式時間內判斷其是否屬於W(n)。
- 如果n是素數,那麼W(n)中沒有元素;
- 相反,若n為合數,W(n)的元素數量至少達到n/2。
合數n的證據存在於W(n),而Z(n)中不屬於W(n)的元素則稱為n的偽證。該演算法的核心思想是通過構造滿足上述規則的W(n),對n進行隨機選擇Z(n)中的元素a進行檢驗。若a屬於W(n),我們確認n為合數;反之,如果a不屬於W(n),則n為素數的概率大於1/2。為了增加判斷的准確度,我們可以對n重復這個過程t輪,這樣n是素數的概率會控制在1-(1/2)^t以上,從而提高測試的可靠性。