素數與密碼學的關系


素數被利用在 密碼學 上,所謂的 公鑰 就是將想要傳遞的信息在編碼時加入砠數,編碼之后傳送給收信人,任何人栶到此信息后,若沒有此收信人所擁有砄 密鑰 ,則解密的過程中(實為尋找素數的蠇程),將會因為找素數的過程( 分解質因數 )過久而無法解讀信息。

哪些數是素數

人們很難捕捉到素數的分布規律。素數之間的間隔要多大有多大,對於無論多大的自然數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-1、q-1沒有公因數,這是容易做到的。根據這個方法,編碼規則可以公開,可是由於N太大,分解得到p、q幾乎是不可能的,他人也就無從知道d,不可能破譯密碼了。

RSA提出后,三位發明家曾經公布了一條密碼,懸賞100美元破譯,他們預言,人們至少需要20000年,才能破譯,即使計算機性能提高百倍,也需要200年。但只過了不到18年,這個密碼就被人破譯,意思是:“The magic words are squeamish ossifrage”。這個密碼如此快的破解,是因為全世界二十多個國家的六百多位工作者自發聯合起來,利用計算機網絡,同時進行因式分解,並不斷交流信息,匯總計算結果,用了不到一年的時間,就將129位的N分解成64位和65位的兩個素數的積。計算機網絡將分解效率提高了近萬倍,這是發明者當初沒有預想到的。但是,如果提高位數到200或300位,工作量將會大的不可思議,即使計算機技術有重大突破,破譯也幾乎不可能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM