因數分解法在 RSA 破密是重要的研究議題之一,相關研究早在多年前 已有很多數學家提出,試除法、Pollard p − 1法、Pollard rho Algorithm、
費馬因數分解法,直到 RSA 密碼系統出現才又有研究投入這個方向而產 生、迪克森因數分解法、二次篩選法、多個多項式二次篩選法、特殊數域 篩選法、普通數域篩選法,實際破解 RSA 系統,通常分解到 512 位元以上 之整數,會採用普通數域篩選法是最常使用並且為目前最好的因數分解 法,但實驗中個人電腦分解整數受限與資源,只好採用在 300 位元以下最 適合的二次篩選法。在研究中是以個人電腦為實驗工具,所以我們用二次 篩選法為我們主要的演算法,其精神在於找到一個在模𝑛的運算下存在𝑥
2
的同餘右式為𝑦2
使 (𝑥 + 𝑦)(𝑥 − 𝑦)分別可能有𝑛的因數存在(1),其方法除了9
因數分解的篩選法外還囊括解線 0-1 性方程組(0-1 linear equation)找線性相 依的問題,而在解線性相依方程組的演算法我們將會以高斯消去法為主。
𝑥
2
≡ 𝑦2
( 𝑛)(𝑥
2
− 𝑦2
) ≡ ( 𝑛) (1)2.1.1. Pollard
𝒑 − 𝟏法Pollard 𝑝 − 1法[2]由 John Pollard 提出,Pollard 根據費馬小定理中若存 在 任 意 整 數𝑎 而𝑎
𝑝−1
≡ 1(mod 𝑝)的同時存在一個整數𝑞 ,且𝑝 − 1|𝑞 則 𝑝|𝑎𝑞
− 1當我們檢查GCD(𝑎𝑞
− 1, 𝑛)不等於 1 時,就表示找到𝑛的一個因數,對於𝑞值的決定方法為對分解的𝑛選定一個上限值𝐵,要求出比⌊√𝑛⌋小且為 𝐵-smooth 的數之最小公倍數當作𝑞。若𝑞不是𝑝 − 1的倍數,則必頇重新選 擇上限值𝐵再重新計算。
Pollard
𝒑 − 𝟏:input: 𝑛 output:𝑝, 𝑞
Step1.Choose
𝐵, 𝜖ℕ𝑛 = 𝑝 × 𝑞Step2.𝑀 = lc (1, … , 𝐵)
Step3.random 𝑎,𝑎 𝑀
− 1( 𝑛)Step4.𝑝 = GCD(𝑛, 𝑎 𝑀
− 1( 𝑛))Step5.if(𝑝 = 1 r 𝑛)then goto Step1 else 𝑛 𝑝
= 𝑞10
2.1.2. ECC 因數分解法
ECC 曲線分解法是由 H.W. Lenstra Jr 於 1985 年所提出,主要概念是利 用橢圓曲線的特性來改善 Pollard 𝑝 − 1法的缺點,在𝑝 − 1法中𝐵值的不當 選取會導致𝑛無法分解成功,最後還是只能重選𝐵值。但利用 ECC 橢圓曲 線的參數等於選取不同的曲線,便可避免這個問題。
2.1.3. 費馬因數分解法
迪克森因數分解法、二次篩選法、多個多項式二次篩選法、特殊數域 篩選法、普通數域篩選法都是以相同的數學架構下去延伸。其發展源自於 費馬因數分解法(Fermat’s factorization method)。其目的在於決定一個𝑥
2
後 去判別同餘右式𝑧是否為完全平方數(2),若為否則將𝑥 + 1後平方繼續檢查 下去,這方法比較沒有效率但已開啟整個因數分解法的源頭。𝑥
2
≡ 𝑧( 𝑛) (2)Fermat’s factorization method:
input:𝑛
output:𝑝, 𝑞Step1.𝑥 2
≡ 𝑧( 𝑛)Step2.if( 𝑧 = 𝑦 2
and 𝑥! ≡ 𝑦( 𝑛)) goto Step3 else 𝑥 = (𝑥 + 1) goto Step111
Step3.if (𝑝 = GCD(𝑛, (𝑥 − 𝑦)) an 𝑝 ≠ 1 r 𝑛 )or
(𝑞 = GCD(𝑛, (𝑥 + 𝑦)) an 𝑞 ≠ 1 r 𝑛 ) then output 𝑝, 𝑞else 𝑥 = (𝑥 + 1) goto Step1
2.1.4. 迪克森因數分解法
1981 年 Dixon, J.D.提出由費馬因數分解法改良出來的迪克森因數分解 法(Dixon’s factorization method)[7],其中的不同為 Dixon 並不是去等𝑧為完 全平方數,而是將很多𝑧乘起來變為完全平方數,演算法中的𝑝
1
, 𝑝2
, ⋯ , 𝑝𝑚
是 由 2 開始大小為m的質數表,質數表的生成在判斷𝑧是否質因數皆小於𝑝𝑚
, 若成立代表𝑧為𝑚的 B-smooth,並檢查質數𝑝的指數所生成的矩陣𝐴是否擁 有全偶數組合,在這樣的條件下可將矩陣所有的值做𝐺𝐹(2)的運算,使矩 陣原素只有 0 與 1 再做高斯消去法找線性相依矩陣向量為 0 的行列式,即 𝐴𝑑 = 𝑏, 𝑏 = 如 Step5 所示。Dixon’s factorization method:
input:𝑛, 𝑘 output:𝑝, 𝑞
Step1.𝑥 𝑖
= (𝑥𝑖
+ 1)Step2.𝑥 𝑖 2
≡ 𝑧( 𝑛)Step3.𝑥 𝑖+1
= 𝑥𝑖
, 𝑖 = (𝑖 + 1) goto Step2 until 𝑖 = 𝑘 then goto Step4.Step4.
𝑥
1 2
≡ 𝑧1
= 𝑝1 𝑎
11𝑝2 𝑎
12… 𝑝𝑚 𝑎
1𝑚( 𝑛) 𝑥2 2
≡ 𝑧2
= 𝑝1 𝑎
21𝑝2 𝑎
22… 𝑝𝑚 𝑎
2𝑚( 𝑛)⋮
𝑥
𝑘 2
≡ 𝑧2
= 𝑝1 𝑎
𝑘1𝑝2 𝑎
𝑘2… 𝑝𝑚 𝑎
𝑘𝑚( 𝑛), 𝑝
𝑗
∈ pri e.12
Step5.s lve [
𝑎
11
𝑎12
⋯ 𝑎1𝑚
𝑎21
𝑎22
⋮ ⋮
⋯
⋱ 𝑎
2𝑚
𝑎𝑘1
𝑎𝑘2
⋯ 𝑎𝑘𝑚
⋮ ]𝑇
× [ 𝑑
1
𝑑2
⋮ 𝑑
𝑘
] ≡ [⋮] ( 2)
Step6.∏ 𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
≡ ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
( 𝑛), ∏𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
= 𝑋2
、 ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
= 𝑌2 Step7.if (𝑝 = GCD(𝑛, (𝑋 − 𝑌)) and 𝑝 ≠ 1 or 𝑛)
or (𝑞 = GCD(𝑛, (𝑋 + 𝑌)) and 𝑞 ≠ 1 or 𝑛 ) then output 𝑝, 𝑞
else 𝑥
0
= 𝑥𝑖
, 𝑖 = goto Step1上述組合之解𝑑
𝑖
以高斯消去法便可找到線性相依而得到 Fermat 因數分 解法的𝑥2
≡ 𝑦2
(mod 𝑛),使因數分解法不再是憑運氣而是去有效的解矩陣 線性相依問題。2.1.5. 二次篩選法
1982 年 Carl Pomerance 提出二次篩選法(Quadratic Sieve) [1][8][9]將 Dixon 因數分解改進,將質數表篩選成𝐹𝑎𝑐𝑡𝑜𝑟𝐵𝑎𝑠𝑒 ( 𝐹𝐵),如此便可縮小𝐹𝐵 來加速檢測 B-smooth 的效率,𝐹𝐵 = *𝑝
𝑗
: 𝑝𝑗
is prime and (𝑛
𝑝 𝑗
) = 1 for 𝑝𝑗
<𝐵+。判斷𝑛是否為𝑝的二次剩餘數,使分解的成功率增加。𝐵將會以質數分 布估計的數學式去產生(3)。如此可縮小𝐹𝐵加速檢測𝐵-smooth 的效率,使 分解成功率增加。
𝐵 = e p ((1
2+ 𝑜(1))(l g𝑛l gl g𝑛)
1 2
) (3)13
Quadratic Sieve:
input:𝑛 input:𝑝, 𝑞
Step1.Choosing 𝐵, 𝑖 = , 𝑥 𝑖
= ⌊√𝑛2 ⌋, 𝑚 = 𝐹𝐵′𝑠 size 𝐹𝐵 = *𝑝𝑗
: 𝑝𝑗
is pri e an (𝑝 𝑛
𝑗) = 1 for 𝑝
𝑗
< 𝐵+,Step2.𝑥 𝑖
= (𝑥𝑖
+ 1)Step3.𝑥 𝑖 2
≡ 𝑧𝑖
( 𝑛)Step4.if 𝑥 𝑖 2
≡ 𝑧𝑖
= 𝑝1 𝑎
𝑖1𝑝2 𝑎
𝑖2… 𝑝𝑚 𝑎
𝑖𝑚( 𝑛), 𝑝𝑗
∈ 𝐹𝐵 then 𝑥𝑖+1
= 𝑥𝑖
, 𝑖 = (𝑖 + 1) else goto Step2.Step5.goto Step2 until
𝑖 = 𝑚 then goto Step6.Step6.s lve [
𝑎
11
𝑎12
⋯ 𝑎1𝑚
𝑎21
𝑎22
⋮ ⋮
⋯
⋱ 𝑎
2𝑚
𝑎𝑚1
𝑎𝑚2
⋯ 𝑎𝑚𝑚
⋮]
𝑇
× [ 𝑑
1
𝑑2
⋮ 𝑑
𝑘
] ≡ [⋮] ( 2)
Step7.∏ 𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
≡ ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
( 𝑛), ∏𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
= 𝑋2
、 ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
= 𝑌2 Step8.if
(𝑝 = GCD(𝑛, (𝑋 − 𝑌)) and 𝑝 ≠ 1 or 𝑛)or(𝑞 = GCD(𝑛, (𝑋 + 𝑌)) and 𝑞 ≠ 1 or 𝑛) then output 𝑝, 𝑞
else 𝑥
0
= 𝑥𝑖
, 𝑖 = goto Step2.改進後的二次篩選法使挑選過後的質數表能更容易分解大整數,提高分 解的效率並減少質數數量。
2.1.6. 多個多項式二次篩選法
多個多項式二次篩選法(Multiple Polynomial Quadratic Sieve)[10]於 1987 年由 R.D. Silverman 發展出來,在二次篩選法中多項式二次系數固定 為 1,當篩選範圍增加就不容易找到符合 smooth 的數,而多個多項式二次 篩選法藉由二次數不一定為 1,藉以提高找到 smooth 的機率,由於多項式
14
不是固定的,因此可以造出許多多項式同時分解,首先對多項式選取系數,
多項式系數頇滿足下列條件運算出𝑎、𝑏、𝑐,𝑓(𝑥) = 𝑎𝑥
2
+ 𝑏𝑥 + 𝑐,
b2
≡ 4𝑎𝑐 (mod 𝑛)and .𝑛 𝑎
/ = 1則在模𝑛下𝑓(𝑥)會是一個完全平方數,故在分解前 會先決定多項式。Multiple Polynomial Quadratic Sieve:
Input:𝑛, 𝑘 Output:𝑝, 𝑞
Step1.Choosing
𝐵, 𝐹𝐵 = *𝑝𝑗
: 𝑝𝑗
is prime and (𝑝 𝑛
𝑗) = 1 for 𝑝
𝑗
< 𝐵+Step2.Computing
𝑎、𝑏、𝑐 for 𝑓(𝑥) = 𝑎𝑥2
+ 𝑏𝑥 + 𝑐,b2
≡ 4𝑎𝑐 (mod 𝑛),and .𝑎 𝑛
/ = 1Step3.𝑥 𝑖
= (𝑥𝑖
+ 1), 𝑖 = (𝑖 + 1)Step4.𝑓(𝑥 𝑖
) ≡ 𝑧(mod 𝑛)Step5.goto Step3 until
𝑖 = 𝑘 then goto Step6.Step6.
𝑥
1 2
≡ 𝑧1
= 𝑝1 𝑎
11𝑝2 𝑎
12… 𝑝𝑚 𝑎
1𝑚(mod 𝑛) 𝑥2 2
≡ 𝑧2
= 𝑝1 𝑎
21𝑝2 𝑎
22… 𝑝𝑚 𝑎
2𝑚(mod 𝑛)⋮
𝑥
𝑘 2
≡ 𝑧2
= 𝑝1 𝑎
𝑘1𝑝2 𝑎
𝑘2… 𝑝𝑚 𝑎
𝑘𝑚(mod 𝑛), 𝑝
𝑗
∈ 𝐹𝐵.Step7.sovle linear dependent
[𝑎
11
𝑎12
⋯ 𝑎1𝑚
𝑎21
𝑎22
⋮ ⋮
⋯
⋱ 𝑎
2𝑚
𝑎𝑘1
𝑎𝑘2
⋯ 𝑎𝑘𝑚
⋮ ]𝑇
× [ 𝑑
1
𝑑2
⋮ 𝑑
𝑘
] ≡ [⋮] ( 2)
Step8.∏ 𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
≡ ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
(mod 𝑛), ∏𝑘 𝑖=1,𝑖∈𝑑
𝑥𝑖 2
= 𝑋2
、 ∏𝑘 𝑖=1,𝑖∈𝑑
𝑧𝑖
= 𝑌2 Step9.if
(𝑝 = GCD(𝑛, (𝑋 − 𝑌)),𝑛 𝑝
≠ 𝑞) r (𝑞 = GCD(𝑛, (𝑋 + 𝑌)),𝑛 𝑞
≠ 𝑝 )then 𝑥
0
= 𝑥𝑖
, 𝑖 = goto Step1 else output 𝑝, 𝑞15
2.1.7. 數域篩選法
數域篩選法(Number Field Sieve)[11][12]是由 John Pollard 所提出針對 不同的分解對象數域篩選法有兩種形式: (一) Special Number Field Sieve 適 用於𝑛 = 𝑐