• 沒有找到結果。

我們以 Quadratic Sieve 與 Gaussian Elimination 演算法做基礎,同時會 將程式設計為日後可改寫為其餘因數分解演算法,並不影響整體的流程。

24

只要將下圖的 Quadratic Sieve Matrix 改寫為其餘的因數分解演算法便可以 順利執行,在解線性方程組的部份將試著用多執行緒來設計,但目前針對 將高斯消去法以多執行緒改進的部份,演算法尚為成熟暫不做考慮。

圖 3.1. 二次篩選法流程圖

在流程圖中我們將 sieve 的動作分配給多個 thread 同時做篩選並生成矩 陣,在解線性方程組上我們用 GNU MP 做加快運算,將 0-1 矩陣編為 GNU MP 整數使資料壓縮並加快運算。在𝐺𝐹(2)下做 exclusive or 運算在這我們 已改寫 Gaussian Elimination 並以我們排序的概念設計演算法。整個程式設 計上以 GNU MP 為主要運算語法,使運算效能提高,GNU MP 針對不同的 演算法做到最佳化,在因數分解上常用到的大整數除法、大整數模運算與 數論運算皆有對應的方程式。動態記憶體規劃使資源不浪費,針對在此研 究中所用到的大數運算,GNU MP 可以幫助我們達到很好的實驗結果。

Initialization

Quadratic Sieve matrix (thread) 解線性方程組

(thread)

Factorization

25

3.2.1. 程式流程

整體最為需要注意的為 Sieve 也就是將等號右式的質因數若不在 𝐹𝑎𝑐𝑡𝑜𝑟𝐵𝑎𝑠𝑒以內的便捨去此數,必需要用到大量的整數除法與大整數模運 算,我們先以模運算先快速判斷𝐹𝐵中的質數是否為等號右式的質因數,再 做整數除法將質因數取出,並同時記錄質因數指數系數,以迴圈重覆篩選 若等號右式的質因數全數落在𝐹𝐵便將此數留存,留待之後解線性相依用。

而解 0-1 linear equation 解線性相依問題我們以高斯消去法為主,高斯消去 法是線性代數中的演算法,用來為線性方程組求解,解高斯消去法最後會 產生出一個梯行陣式。在線性代數中可用來檢驗矩陣中有多少解集合可以 組成線性相依,可以很精確易懂的求出線性相依解,我們藉由高斯消去法 與增廣矩陣去求出可線性相依的行列式,高斯消去法可用在電腦中來解決 數千條等式及未知數並可以用在任何 field 中。二次篩選法中的高斯消去法 與一般的不同在於其運算在𝐺𝐹(2)之下,我們針對此種高斯消去法做程式 設計。處於𝐺𝐹(2)之下的高斯消去法方程式中元素便只有 0 與 1 兩種元素,

我們便可使用程式設計中的 exclusive or 技巧加速高斯消去法的運算。

首先 Step1. Initialization:會生成兩個同位元的兩個大質數𝑝

𝑞相乘得 𝑛,並針對不同的公鑰𝑛決定𝐵-smooth 並產生𝐹𝑎𝑐𝑡𝑜𝑟𝐵𝑎𝑠𝑒( 𝐹𝐵)。Step2.

Quadratic Sieve matrix:中如果質因數超過𝐹𝐵便捨棄,並以多執行緒同時篩

26

選,挑選完的值為矩陣A並以 GNU MP 大整數型態編譯。Step3. 解線性方 程組:矩陣A解高斯消去法若得線性相依向量。Step4. Factorization:從線性相 依向量解找到𝑥

2

的同餘右式𝑦

2

使 (𝑥 + 𝑦)(𝑥 − 𝑦)分別可能有𝑛的因數存 在,嘗試對𝑛做因數分解。

圖 3.2. 二次篩選法規劃圖

3.2.2. 以多執行緒篩選

以二次篩選法為基礎,在我們的程式中 sieve 的動作以多執行緒為概念 做設計,將𝑥

𝑖

做存取控制並以 Pthread 提供的功能設計執行緒排隊存取,可 將𝑆𝑡𝑒𝑝2的(𝑥

𝑖

+ 1)分配給各執行緒,以加速篩選速度,而在篩選時所需要 大量的大整數除法與大整數模運算,以多執行緒分配可達到個人電腦資源 的有效利用,並各自記錄篩選下來的值,以 double linklist 串列做記錄,再 將資料串聯起來後再交給解 0-1 線性方程組的 Function 做處理。

Initialization

Generate RSA Modulus

Choosing B-smooth

Generate Factor base

Quadratic Sieve matrix

Create Thread

Matrix Sieve (Quadratic

Sieve Algorithm)

解線性 方程組

solve matrix

Gauss Sort gauss

Factorization

27

圖 3.3. 高斯消去法接收多執行緒資料

相關文件