素數被利用在 密碼學 上,所謂的 公鑰 就是將想要傳遞的信息在編碼時加入砠數,編碼以後傳送給收信人,任何人栶到此信息後,若沒有此收信人所擁有砄 密鑰 ,則解密的過程當中(實爲尋找素數的蠇程),將會由於找素數的過程( 分解質因數 )太久而沒法解讀信息。
哪些數是素數
人們很難捕捉到素數的分佈規律。素數之間的間隔要多大有多大,對於不管多大的天然數n,老是存在兩個素數,它們之間的距離大於n並且其間沒有素數。理由很簡單,對於n,如下n個整數是相繼排列的,並且都是合數:(n+1)!+2,(n+1)!+3,…(n+1)!+(n+1)。可見在(n+1)!+1和(n+1)!+(n+2)之間沒有素數。
幾千年來,歷代數學家都但願能找到一個數學公式,把所有素數都表示出來。歐拉找到公式N=n2+n+41,當n=-40,-39,…0,1,…39時,N都是素數,只有80個素數。後來有人證實,N=n2+n+72491,當n=0,1,2,…11000時都是素數,也只有一萬多個。能夠證實,整係數多項式是不可能用來表示所有的素數,而不表示合數的。
十七世紀費馬猜想,2的2n次方+1,n=0,1,2…時是素數,這樣的數叫費馬素數,惋惜當n=5時,232+1就不是素數,至今也沒有找到第六個費馬素數。
18世紀發現的最大素數是231-1,19世紀發現的最大素數是2127-1,20世紀末人類已知的最大素數是2859433-1,用十進制表示,這是一個258715位的數字。
素數與密碼
本世紀七十年代,幾位美國數學家提出一種編碼方法,這種方法能夠把通信雙方的約定公開,然而卻沒法破譯密碼,這種奇蹟般的密碼就與素數有關。
人們知道,任何一個天然數均可以分解爲素數的乘積,若是不計因數的次序,分解形式是惟一的。這叫作算術基本定理,歐幾里得早已證實了的。但是將一個大整數分解卻沒有一個簡單通行的辦法,只能用較小的素數一個一個去試除,耗時極大。若是用電子計算機來分解一個100位的數字,所花的時間要以萬年計。但是將兩個100位的數字相乘,對計算機卻十分容易。美國數學家就利用了這一點發明瞭編制容易而破譯難的密碼方式。這種編碼方式以三位發明者姓氏的首字母命名爲RSA碼。
例如,A、B兩位通信者約定兩個數字N和e,A想要將數字M發給B,他不是直接將M發出,而是將M連乘e次,而後除以N,將餘數K發給B。B有一個祕密的數字d,連A也不知道,他將K連乘d次,而後除以N,獲得的餘數就是原來的數M。
數字是這樣選擇的,N=p×q,p、q是選定的兩個大的素數,選取e、d,使ed-1是(p-1)×(q-1)的倍數,並且使e和p-一、q-1沒有公因數,這是容易作到的。根據這個方法,編碼規則能夠公開,但是因爲N太大,分解獲得p、q幾乎是不可能的,他人也就無從知道d,不可能破譯密碼了。
RSA提出後,三位發明家曾經公佈了一條密碼,懸賞100美圓破譯,他們預言,人們至少須要20000年,才能破譯,即便計算機性能提升百倍,也須要200年。但只過了不到18年,這個密碼就被人破譯,意思是:「The magic words are squeamish ossifrage」。這個密碼如此快的破解,是由於全世界二十多個國家的六百多位工做者自發聯合起來,利用計算機網絡,同時進行因式分解,並不斷交流信息,彙總計算結果,用了不到一年的時間,就將129位的N分解成64位和65位的兩個素數的積。計算機網絡將分解效率提升了近萬倍,這是發明者當初沒有預想到的。可是,若是提升位數到200或300位,工做量將會大的難以想象,即便計算機技術有重大突破,破譯也幾乎不可能。網絡