基本介紹
- 中文名:產業等級質數
- 外文名:Industrial-grade primes
- 領域:密碼學
- 命名者:亨利·科恩
- 定義:一整數未以嚴謹的方式證明為質數
- 有關術語:質數
簡介,素數測試,米勒-拉賓素性檢驗,加密算法,
簡介
質數(Prime number),又稱素數,指在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數(也可定義為只有1與該數本身兩個正因數的數)。大於1的自然數若不是素數,則稱之為合數。
產業等級質數簡單來說是指一個整數通過了素數測試但在數學上缺乏嚴格證明。產業等級質數有時會用來代替一些算法中需要的認證質數,像RSA加密算法就需要用戶產生大的質數。若數字位數超過100位,證明它們是產業等級質數會比素性測試簡單很多。前者可以立即產生,而其不是質數的失效率很低,因此在實務上幾乎不可能失效。換句話說,對於於這些數字是質數可以抱持非常高的信心,不過不是一定成立。
素數測試
素數問題是一個使得很多數學家著迷的問題。素數就是一個除了 1 和它自身以外不能被其它數整除的數。素數的一個基本問題是如何有效地確定一個數是否是一個素數,即素性測試問題。素性測試問題不僅在數學上是一個有挑戰性的問題,而且在實際中也是非常重要的。例如,很多現代密碼學套用通常需要確定一個幾百位的素數。如果不採用一些專門有效的方法,即使人們使用運行速度最快的計算機來測試一個 100 位的十進制整數,那么花費的時間將超過宇宙存在的時間。數學家嘗試設計對素數的有效測試已經長達兩千多年了。Eratosthenes篩法是對於所有素數都有效的最古老的算法,然而它的時間複雜性是輸入規模的冪指數,因此在實際中使用它是不合適的。17 世紀的 Fermat 小定理是一些有效素性測試算法的起點,但其逆定理是不滿足的。上世紀 80 年代,這個領域的普遍觀點是應該存在一個用於素性測試的確定的多項式時間算法,但沒有人能給出證明。已經確立了一些素性測試算法,但是它們都存在一些問題。一些算法是非常快速的,但是這些算法會以很小的機率產生一個錯誤結果;另一些算法是有條件的,如使用了未證明的假設;還有一些算法是確定的也是無條件的,但不能在多項式時間內完成。因此,設計一個在多項式時間內每次都給出一個正確回答的有效算法在計算機科學和數學中都是一個挑戰。多年來,研究者們已經嘗試了很多方法,包括使用了一些複雜的數學技術,但沒有一個成功。
米勒-拉賓素性檢驗
米勒-拉賓素性檢驗是一種素數判定法則,利用隨機化算法判斷一個數是合數還是可能是素數。卡內基梅隆大學的計算機系教授Gary Lee Miller首先提出了基於廣義黎曼猜想的確定性算法,由於廣義黎曼猜想並沒有被證明,其後由以色列耶路撒冷希伯來大學的Michael O. Rabin教授作出修改,提出了不依賴於該假設的隨機化算法。首先介紹一個相關的引理。 和 總是得到 ,稱這兩個數為1的“平凡平方根”。當 是素數且 時,不存在 的“非平凡平方根”。為了證明該引理,我們假設 是 的平方根,於是有
也就是說,能夠整除素數 ,根據歐幾里得引理,或者 能夠整除 p,即 或即 是 的平凡平方根。
假設 是一個奇素數,且 。於是是一個偶數,可以被表示為的形式, 和 都是正整數且是奇數。對任意在 範圍內的 和 ,必滿足以下兩種形式的一種:
因為由於 費馬小定理 ,對於一個素數 ,有
又由於上面的引理,如果我們不斷對 取平方根,我們總會得到 1 或 -1。如果我們得到了 -1,意味著②式成立, 是一個素數。如果我們從未得到 -1,那么通過這個過程我們已經取遍了所有2的冪次,即①式成立。
米勒-拉賓素性測試就是基於上述原理的逆否,也就是說,如果如果我們能找到這樣一個 ,使得對任意 以下兩個式子均滿足:
那么 n 就不是一個素數。這樣的 稱為 是合數的一個憑證(witness)。否則 可能是是一個證明 是素數的“強偽證”(strong liar),即當確實是一個合數,但是對當前選取的來說上述兩個式子均不滿足,這時我們認為 是基於 的大機率素數。
每個奇合數都有很多個對應的憑證 ,但是要生成這些 並不容易。當前解決的辦法是使用機率性的測試。我們從集合 中隨機選擇非零數,然後檢測當前的是否是 n 為合數的一個憑證。如果 n本身確實是一個合數,那么大部分被選擇的 a都應該是n的憑證,也即通過這個測試能檢測出 n是合數的可能性很大。然而,仍有極小機率的情況下我們找到的 a是一個“強偽證”(反而表明了 n可能是一個素數)。通過多次獨立測試不同的 a,我們能減少這種出錯的機率。
對於測試一個大數是否是素數,常見的做法隨機選取基數 a,畢竟我們並不知道憑證和偽證在 這個區間如何分布。典型的例子是 Arnault 曾經給出了一個397位的合數 n,但是所有小於307的基數 a都是 n是素數的“強偽證”。不出所料,這個大合數通過了 Maple 程式的isprime() 函式(被判定為素數)。這個函式通過檢測 這幾種情況來進行素性檢驗。
加密算法
在密碼學中,加密(Encryption)是將明文信息改變為難以讀取的密文內容,使之不可讀的過程。只有擁有解密方法的對象,經由解密過程,才能將密文還原為正常可讀的內容。加密算法就是加密的方法。加密算法可以分為兩類:對稱加密和非對稱加密在密碼學中,加密是將明文信息隱匿起來,使之在缺少特殊信息時不可讀。對稱加密就是將信息使用一個密鑰進行加密,解密時使用同樣的密鑰,同樣的算法進行解密。非對稱加密,又稱公開密鑰加密,是加密和解密使用不同密鑰的算法,廣泛用於信息傳輸中。