RSA系列——大質數找尋
RSA的安全性關鍵在於大整數的分解是十分困難的。本節將討論大質數的尋找辦法。
根據素數定理:。隨機一個數,它是質數的概率是(此結論存疑,真實值應該是比這要高的,但足夠了)。
上一章提到過費馬小定理,根據其逆否命題,有:若正整數滿足且,則是合數。但很遺憾此命題的否命題並不成立。數論上存在「偽素數」的概念:若且為合數,則稱是一個基於的偽素數。研究表明,即使是只取基數,檢驗結果的正確率也是很可觀的。但如果要追求完美,想要通過改變基數進行多次檢驗來提高正確率,會有一種叫做卡邁克爾(Carmichael)數的數讓人感到十分尷尬。若是卡邁克爾數,對於任意與互質的有(雖說對於與不互質的是可以檢測出來的,但若是大質數的乘積,幾乎是與處於相同數量級的)。
令人慶幸的是,只需要一個小引理便可以對抗卡邁克爾數:若p為質數,則同餘方程在模意義下只有兩解。能看懂之前內容的讀者應該很容易就能對此進行證明(不過事實上,若是奇素數,,上述引理對於模也成立)。
同餘方程除的任何根稱為以為模的1的非平凡平方根。根據上述引理的逆否命題,得推論:若存在以為模的1的非平凡平方根,則是合數。它的否命題不成立,但若不是質數或質數的冪就成立了。證明也很簡單。
有了這些事實,我們便可以開始敘述著名的Miller-Rabin演算法(以下簡稱MR)了。注意:偽素數測試並不是MR(筆者身邊有人犯過把偽素數測試當作MR的錯誤)。
MR較偽素數測試區別是,MR增加了非平凡平方根的檢驗。因此當選定了基數之後,在計算時,需要稍微改變快速冪的演算法。令,其中為奇數那麼,那麼只需先算出的值,再將其連續平方次,在此過程中檢驗非平凡平方根即可。
顯然MR是可能出錯的。若我們把可以證明為合數的基數稱為一個「證據」,可以證明,隨機得到一個是證據的基數的概率不小於。也就是說,隨機選取個基數進行驗證,出錯概率至多為。事實上這個概率還可以進行優化,且可以通過構造的方法增加證據的數量。由於所用的界已經足夠了,在此不再贅述。畢竟,經過人們的計算,即便是上述最簡單的MR,取個基數進行驗證時,若返回結果為為質數,已足夠令人信服了。
至此算導搬運工作已結束。下次將進入RSA的另一個方面。
推薦閱讀:
※用密碼學玩暗軍棋 -- 閑聊多方計算
※為什麼 Touch ID 存儲在本地的指紋信息可以用來驗證 Apple ID,是否存在安全隱患?
※如何看待微軟發布的一個87K的庫帶了約760M測試數據?
※中國五大銀行的加密方式主要用的什麼方式?
※如何理解"語義安全(semantic security)"?