RSA加密演算法 原理

2021-09-19 22:53:19 字數 3899 閱讀 1457

mod函式是乙個求餘函式,其格式為: mod(nexp1,nexp2),即是兩個數值表示式作除法運算後的餘數。特別注意:在excel中,mod函式是用於返回兩數相除的餘數,返回結果的符號與被除數(divisor)的符號相同。

一、 什麼是「素數」?素數是這樣的整數,它除了能表示為它自己和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的約數,這兩個數為互質數。等等。

約數,亦稱「公因數」。它是乙個能被若干個整數同時均整除的

整數。如果乙個整數同時是幾個整數的

約數,稱這個整數為它們的「公約數」;公約數中最大的稱為最大公約數。對任意的若干個正整數,1總是它們的公因數。

公約數,亦稱「公因數」。它是乙個能被若干個整數同時均整除的

整數。如果乙個整數同時是幾個整數的

約數,稱這個整數為它們的「公約數」;公約數中最大的稱為最大公約數。對任意的若干個正整數,1總是它們的公因數。

公約數與公倍數相反,就是既是a的約數同時也是b的約數的數,12和15的公約數有1,3,最大公約數就是3。再舉個例子,30和40,它們的公約數有1,2,5,10,最大公約數是10

三、什麼是模指數運算?指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有乙個整數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

(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)得:

因此,得到相應的密文資訊為: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加密演算法

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

RSA加密演算法

演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...

RSA加密演算法

一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...