素數和加密

來源:互聯網
上載者:User

分享自己對素數的認識。這裡,由於知識水平和時間的限制,無法對素數的應用做所有的介紹,但希望藉助自己的一些見解,起到拋磚引玉的作用。

寫下此文,導線是無意中瞥見蔡天新的幾則微博:

“數學家是把咖啡變成定理的機器。”這是匈牙利數學家愛多士的名言。近日,有一個計算結果勝過定理,美國中密蘇里州大學Cooper教授找到了新的最大素數,第48個梅森素數——2的57885161次方減1。該素數共有17425170位,比之前的最大素數足足多了4457081位。如果把這個新素數列印出來,將會有65公裡長。

梅森素數是指形如2^p-1(2的p次方減1)的素數,其中p也是素數。古希臘的阿契塔(風箏發明者)發現,每個梅森素數對應一個畢達哥拉斯完美數。以後每50年找到一個新的,但利用電腦,最近11年就找到10個。如今速度又慢下來,過去5年才找到這麼1個。 (3月2日 08:57)

 首先,我們已經定義了:

只能被1和它本身整除的正整數(1除外)稱之為素數。

那麼素數因此有了一個極其重要的性質:

素數不能被因式分解。(意味著素數不能被所有小於它的數(1除外)整除)

這個性質決定了這樣一個結論:

正整數可以被表示為素數的乘積,如果不計算排列的順序,那麼這種表示方式是唯一的。

太好了,表示方式是“唯一”的,唯一性有多重要,舉個例子:

很多戀愛中的女孩子,會問男的:“你會只愛我一個人嗎?”“你會一直對我好嗎?”暫且不討論屌絲和高富帥是如何回答這類問題的,只討論女孩子想確認的東西是什麼。沒錯,是你的情感是否專一,她是否是你的唯一。
女孩子都如此渴求唯一性這樣美好的東西,那學習數學,愛好數學的人,怎麼能不對唯一性情有獨鐘?

好,話題有點扯了,拉回來。
我們知道了唯一性是很重要的,於是對於任意的正整數,其表示形式如果按因子從小到大的順序,就只有一種表示形式.

只有不能分解的數(素數)才有資格去表示其他的數的分解形式。

那好,我問:為什麼要研究這樣的一個素數的表示形式?

原因很簡單:我們不需要從2,3,4,5,...,90這樣的每一個數去除91來判斷91是否是素數,而只需要從素數列[2,3,5,7,11,...,]去除91來判斷91是否是素數.

為什麼會有這樣的轉化?(這裡再重複一下:因為一個合數的分解形式,一定包含比它小的素數的指數冪形式).

那麼如果說素數是有限的,那麼只要找出所有的素數,那麼就可以知道一個數到底是不是素數了.

結果是:

素數是無窮多個的.

素數的無窮性的證明素數的個數是無窮的。最經典的證明由歐幾裡得證得,在他的《幾何原本》中就有記載。它使用了現在證明常用的方法:反證法。具體的證明如下:●假設質數只有有限的 n個,從小到大依次排列為p1,p2,……,pn,設 N = p1 × p2 × …… × pn,那麼,N+1是素數或者不是素數。●如果N+1為素數,則N+1要大於 p1,p2,……,pn,所以它不在那些假設的素數集合中。●如果N+1為合數,因為任何一個合數都可以分解為幾個素數的積;而N和N+1的最大公約數是1,所以N+1不可能被p1,p2,……,pn整除,所以該合數分解得到的素因數肯定不在假設的素數集合中。●因此無論該數是素數還是合數,都意味著在假設的有限個素數之外還存在著其他素數。●對任何有限個素數的集合來說,用上述的方法永遠可以得到有一個素數不在假設的素數集合中的結論。●所以原先的假設不成立。也就是說,素數有無窮多個。其他數學家也給出了他們自己的證明。歐拉利用黎曼函數證明了全部素數的倒數之和是發散的,恩斯特·庫默的證明更為簡潔,Hillel
Furstenberg則用拓撲學加以了證明。

我們有這樣的打算:從素數列的每一項去整除n來判斷n是否為素數,這樣的判斷過程是很繁瑣的,當然,這是最自然的做法.

於是,我們很想知道素數列的通項公式,但事實上是,很多數學家們都在為此付出努力,但素數的一般運算式並未浮出水面.

於是,我們判斷素數的方法,始終感覺很繁瑣.

當你覺得一件事情繁瑣的時候,那麼一定是可以找到改進方案

比如對於要判斷是否是素數的n

你可以只從2判斷到sqrt(n); 因為如果n不是素數的話,一定可以分解為兩個素的乘積形式,比如說n=a*b,那麼a和b中至少有一個會<=sqrt(n), 【反證即可.若兩數都大於...】

這些都只是細節的問題,不是本質問題.

(你也可以看看這裡,輸出2-n的所有素數的代碼)

本質的問題是:


素數到底有沒有一般的判斷方法.比如說有一個函數y=f(n).用以判斷一個素是不是素數.

就好像在二進位當中,n&(n-1)==0可以用來判斷n是2^k形式的數一樣. 或者說n-1的二進位運算式全是1.

答案當然是有,但是效率是低下的.比如威爾遜證明了(n-1)!+1≡0(modn)是n為素數的充要條件.

這個判斷式的計算量是O(nlogn)的,計算量太大.

當無法從一般的角度入手的時候,可以從特殊入手:

17世紀還有位法國數學家叫梅森,他曾經做過一個猜想:當2^p-1
中的p是素數時,2^p-1是素數。

梅森素數就是一種嘗試.嘗試從另外一個角度來揭露素數的某種性質,

這樣在素數判別上,我們又增加了一定的依據.

對於梅森素數,瞭解到的情況是:對於2^p-1的形式,用勒莫的判斷方法,會相對比較便利.即使是1000位的的數用來做素數判別,也只需要至多1周的時間.相比於試除法10^486年(和電腦效能有關)來說,那是快得驚人了.


那麼素數,有什麼實際的作用?

下面的內容引用了這裡的資訊,原文的舉例中,加密寫錯了.不過不影響大致的閱讀.【原文出處】

RSA密碼編譯演算法是最常用的非對稱式加密演算法,CFCA在認證服務中離不了它。但是有不少新來的同事對它不太瞭解,恰好看到一本書中作者用執行個體對它進行了簡化而生動的描述,使得高深的數學理論能夠被容易地理解。我們經過整理和改寫精選給大家閱讀,希望能夠對時間緊張但是又想瞭解它的同事有所協助。
RSA是第一個比較完善的公開密鑰演算法,它既能用於加密,也能用於數位簽章。RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定RSA的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流行的公開密鑰演算法。
RSA的安全基於大數分解的難度。其公開金鑰和私密金鑰是一對大素數(100到200位十進位數或更大)的函數。從一個公開金鑰和密文恢複出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。 
RSA的公開金鑰、私密金鑰的組成,以及加密、解密的公式可見於下表:


可能各位同事好久沒有接觸數學了,看了這些公式不免一頭霧水。別急,在沒有正式講解RSA密碼編譯演算法以前,讓我們先複習一下數學上的幾個基本概念,它們在後面的介紹中要用到:

一、 什麼是“素數”?
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等於13*1以外,不能表示為其它任何兩個整數的乘積,所以13是一個素數。素數也稱為“質數”。

二、什麼是“互質數”(或“互素數”)?
小學數學教材對互質數是這樣定義的:“公約數只有1的兩個數,叫做互質數。”這裡所說的“兩個數”是指自然數。
判別方法主要有以下幾種(不限於此):
(1)兩個質數一定是互質數。例如,2與7、13與19。
(2)一個質數如果不能整除另一個合數,這兩個數為互質數。例如,3與10、5與 26。
(3)1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。
(4)相鄰的兩個自然數是互質數。如 15與 16。
(5)相鄰的兩個奇數是互質數。如 49與 51。
(6)大數是質數的兩個數是互質數。如97與88。
(7)小數是質數,大數不是小數的倍數的兩個數是互質數。如 7和 16。
(8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。

三、什麼是模指數運算? 
指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的餘數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。 
模指數運算就是先做指數運算,取其結果再做模運算。如
好,現在開始正式講解RSA密碼編譯演算法。
演算法描述:
(1)選擇一對不同的、足夠大的素數p,q。
(2)計算n=pq。
(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。
(4)找一個與f(n)互質的數e,且1<e<f(n)。
(5)計算d,使得de≡1 mod f(n)。這個公式也可以表達為d ≡e-1 mod f(n)
這裡要解釋一下,≡是數論中表示同餘的符號。公式中,≡符號的左邊必須和符號右邊同餘,也就是兩邊模運算結果相同。顯而易見,不管f(n)取什麼值,符號右邊1 mod f(n)的結果都等於1;符號的左邊d與e的乘積做模運算後的結果也必須等於1。這就需要計算出d的值,讓這個同餘等式能夠成立。
(6)公開金鑰KU=(e,n),私密金鑰KR=(d,n)。
(7)加密時,先將明文變換成0至n-1的一個整數M。若明文較長,可先分割成適當的組,然後再進行交換。設密文為C,則加密過程為:。
(8)解密過程為:。 

執行個體描述:
在這篇科普小文章裡,不可能對RSA演算法的正確性作嚴格的數學證明,但我們可以通過一個簡單的例子來理解RSA的工作原理。為了便於計算。在以下執行個體中只選取小數值的素數p,q,以及e,假設使用者A需要將明文“key”通過RSA加密後傳遞給使用者B,過程如下:
(1)設計公私密鑰(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3與20互質)則e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎樣取值呢?可以用試算的辦法來尋找。試算結果見下表:

通過試算我們找到,當d=7時,e×d≡1 mod f(n)同餘等式成立。因此,可令d=7。從而我們可以設計出一對公私密鑰,加密金鑰(公開金鑰)為:KU =(e,n)=(3,33),解密密鑰(私密金鑰)為:KR =(d,n)=(7,33)。
(2)英文數字化。
  將明文資訊數字化,並將每塊兩個數字分組。假定明文英文字母編碼錶為按字母順序排列數值,即:

則得到分組後的key的明文資訊為:11,05,25。
(3)明文加密 
使用者加密金鑰(3,33) 將數字化明文分組資訊加密成密文。由C≡Me(mod n)得:
(注意:此處的明文加密的圖片有誤,應該是Mi<->Ci,d<->e; 31<->05, 16<->25)
因此,得到相應的密文資訊為:11,31,16。
(4)密文解密。
使用者B收到密文,若將其解密,只需要計算,即:

使用者B得到明文資訊為:11,05,25。根據上面的編碼錶將其轉換為英文,我們又得到了恢複後的原文“key”。 
你看,它的原理就可以這麼簡單地解釋!
當然,實際運用要比這複雜得多,由於RSA演算法的公開金鑰私密金鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公開金鑰私密金鑰的產生,加密解密模指數運算都有一定的計算程式,需要仰仗電腦高速完成。

最後簡單談談RSA的安全性

首先,我們來探討為什麼RSA密碼難於破解? 
在RSA密碼應用中,公開金鑰KU是被公開的,即e和n的數值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私密金鑰來破解密文。從上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我們可以看出。密碼破解的實質問題是:從Pq的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私密金鑰。
當p和q是一個大素數的時候,從它們的積pq去分解因子p和q,這是一個公認的數學難題。比如當pq大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,RSA從提出到現在已近二十年,經曆了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公開金鑰方案之一。
然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密效能如何。
此外,RSA的缺點還有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於資料格式的標準化。因此,使用RSA只能加密少量資料,大量的資料加密還要靠對稱密碼演算法。

正如上面的紅線部分所言,大數分解為大素數乘積是很困難的.這是RSA密碼難於破解的保證.


【小結】

素數的判斷本身是一個難題。

大數的分解沒有行之有效演算法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.