⑴ 利用RSA完成數據的加密與解密應用.求詳細過程,求原理。
1、已知 p = 19,q = 23,則 n = p * q = 437,phi_n = ( p - 1) * (q - 1) = 396;
2、已知 e = 13,符合 gcd(e, phi_n) = 1,即 e 和 phi_n 互為素數;
3、由 e * d mod phi_n = 1,解出 d = 61;
4、因為Alice向Bob發送的明文為 m = 10;則加密後的密文為 c = m ^ e % n = 222;
5、Bob收到密文 c 後,利用私鑰 d 即可得出明文 m = c ^ d % n = 10。
6、我認為題中私鑰和公鑰的概念你好像搞錯了:Alice要向BOB傳送數字10,那麼Alice用來加密 使用的是Bob的公鑰,即e,而Bob用來解密的是他自己的私鑰,即d。
7、上面的d我是用了軟體Sage算出的,這個軟體用來解RSA很好用,有興趣的話可以試試,當然 它還有很多很強大的功能。
⑵ RAS加密的數學原理
RSA演算法是現今使用最廣泛的公鑰密碼演算法,也是號稱地球上最安全的加密演算法。在了解RSA演算法之前,先熟悉下幾個術語根據密鑰的使用方法,可以將密碼分為對稱密碼和公鑰密碼
對稱加密:加密和解密使用同一種密鑰的方式
非對稱加密:加密和解密使用不同的密碼的方式,因此公鑰密碼通常也稱為非對稱密碼。
好多人都知道RSA加密的數學公式,但是不知道其的內部運作,那麼我們以下就詳細分析一波!
圖1,mod就是取余的意思,上面公式的意思是3的多少次方除以17餘數為12。由圖2可知道3的13次方的時候就滿足圖1的公式。由圖2的可知,公式後面的余數都是不一樣的,而且是1-16。當我們好奇試試3^17%17時候,結果就是3,好明顯等於了3^1%17的結果,那麼我們稱 3為17的原根 。
思考:任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關系?
計算這個值的方式叫做歐拉函數,使用:Φ(n)表示
計算8的歐拉函數,和8互質的 1 、2、 3 、4、 5 、6、 7 、8 所以 φ(8) = 4
計算7的歐拉函數,和7互質的 1、2、3、4、5、6 、7 所以 φ(7) = 6
計算56的歐拉函數:φ(56) = φ(8)* φ(7) = 4 * 6 = 24
如果兩個正整數,除了1以外,沒有其他公因數,我們就稱這兩個數是 互質關系 (coprime)。
一、當n是質數的時候,φ(n)=n-1。
二、如果n可以分解成兩個互質的整數之積,如n=A*B則: φ(A*B)=φ(A)*φ(B)
根據以上兩點得到:如果N是兩個質數P1 和 P2的乘積則:φ(N)=φ(P1)* φ(P2)=(P1-1)*(P2-1)
如果兩個正整數m和n互質,那麼m的φ(n)次方減去1,可以被n整除。如圖3所示:
我們可以設置互質的數如m=5和n=3,那麼φ(3) = 3-1=2,5^2%3=1。所以上面的公式是成立的。(有興趣的可以試多一點數字,注意是互質的兩個數)
歐拉定理的特殊情況:如果兩個正整數m和n互質,而且n為質數!那麼φ(n)結果就是n-1。如圖4所示:
注意:滿足第3步的時候,m必須要小於n。
如果兩個正整數e和x互質,那麼一定可以找到整數d,使得 ed-1 被x整除。那麼d就是e對於x的「模反元素」。如圖6所示:
公鑰: n和e
私鑰: n和d
明文: m
密文: c
1、n會非常大,長度一般為1024個二進制位。(目前人類已經分解的最大整數,232個十進制位,768個二進制位)
2、由於需要求出φ(n),所以根據歐函數特點,最簡單的方式n ,由兩個質數相乘得到:
質數:p1、p2 Φ(n) = (p1 -1) * (p2 - 1)
3、最終由φ(n)得到e 和 d 。
總共生成6個數字:p1、p2、n、φ(n)、e、d
除了公鑰用到了n和e其餘的4個數字是不公開的。目前破解RSA得到d的方式如下:
1、要想求出私鑰 d 。由於e*d = φ(n)*k + 1。要知道e和φ(n);
2、e是知道的,但是要得到 φ(n),必須知道p1和 p2。
3、由於 n=p1*p2。只有將n因數分解才能算出。
⑶ RSA 加密演算法(原理篇)
前幾天看到一句話,「我們中的很多人把一生中最燦爛的笑容大部分都獻給了手機和電腦屏幕」。心中一驚,這說明了什麼?手機和電腦已經成為了我們生活中的一部分,所以才會有最懂你的不是你,也不是你男朋友,而是大數據。
如此重要的個人數據,怎樣才能保證其在互聯網上的安全傳輸呢?當然要靠各種加密演算法。說起加密演算法,大家都知道有哈希、對稱加密和非對稱加密了。哈希是一個散列函數,具有不可逆操作;對稱加密即加密和解密使用同一個密鑰,而非對稱加密加密和解密自然就是兩個密鑰了。稍微深入一些的,還要說出非對稱加密演算法有DES、3DES、RC4等,非對稱加密演算法自然就是RSA了。那麼當我們聊起RSA時,我們又在聊些什麼呢?今天筆者和大家一起探討一下,有不足的地方,還望各位朋友多多提意見,共同進步。
RSA簡介:1976年由麻省理工學院三位數學家共同提出的,為了紀念這一里程碑式的成就,就用他們三個人的名字首字母作為演算法的命名。即 羅納德·李維斯特 (Ron Rivest)、 阿迪·薩莫爾 (Adi Shamir)和 倫納德·阿德曼 (Leonard Adleman)。
公鑰:用於加密,驗簽。
私鑰:解密,加簽。
通常知道了公鑰和私鑰的用途以後,即可滿足基本的聊天需求了。但是我們今天的主要任務是來探究一下RSA加解密的原理。
說起加密演算法的原理部分,肯定與數學知識脫不了關系。
我們先來回憶幾個數學知識:
φn = φ(A*B)=φ(A)*φ(B)=(A-1)*(B-1)。
這個公式主要是用來計算給定一個任意的正整數n,在小於等於n的正整數中,有多少個與n構成互質的關系。
其中n=A*B,A與B互為質數,但A與B本身並不要求為質數,可以繼續展開,直至都為質數。
在最終分解完成後,即 φ(N) = φ(p1)*φ(p2)*φ(p3)... 之後,p1,p2,p3都是質數。又用到了歐拉函數的另一個特點,即當p是質數的時候,φp = p - 1。所以有了上面給出的歐拉定理公式。
舉例看一下:
計算15的歐拉函數,因為15比較小,我們可以直接看一下,小於15的正整數有 1、2、3、4、5、6、7、8、9、10、11、12、13、14。和15互質的數有1、2、4、7、8、11、13、14一共四個。
對照我們剛才的歐拉定理: 。
其他感興趣的,大家可以自己驗證。
之所以要在這里介紹歐拉函數,我們在計算公鑰和私鑰時候,會用到。
如果兩個正整數m 和 n 互質,那麼m 的 φn 次方減1,可以被n整除。
其中 .
其中當n為質數時,那麼 上面看到的公式就變成了
mod n 1.
這個公式也就是著名的 費馬小定理 了。
如果兩個正整數e和x互為質數,那麼一定存在一個整數d,不止一個,使得 e*d - 1 可以被x整除,即 e * d mode x 1。則稱 d 是 e 相對於 x的模反元素。
了解了上面所講的歐拉函數、歐拉定理和模反元素後,就要來一些化學反應了,請看圖:
上面這幅圖的公式變化有沒有沒看明白的,沒看明白的咱們評論區見哈。
最終我們得到了最重要的第5個公式的變形,即紅色箭頭後面的:
mod n m。
其中有幾個關系,需要搞明白,m 與 n 互為質數,φn = x,d 是e相對於x的模反元素。
有沒有看到一些加解密的雛形。
從 m 到 m。 這中間涵蓋了從加密到解密的整個過程,但是缺少了我們想要的密文整個過程。
OK,下面引入本文的第四個數學公式:
我們來看一下整個交換流程:
1、客戶端有一個數字13,服務端有一個數字15;
2、客戶端通過計算 3的13次方 對 17 取余,得到數字12; 將12發送給服務端;同時服務端通過計算3的15次方,對17取余,得到數字6,將6發送給客戶端。至此,整個交換過程完成。
3、服務端收到數字12以後,繼續計算,12的15次方 對 17取余,得到 數字10。
4、客戶端收到數字 6以後,繼續計算,6的13次方 對 17 取余,得到數字 10。
有沒有發現雙方,最終得到了相同的內容10。但是這個數字10從來沒有在網路過程中出現過。
好,講到這里,可能有些人已經恍然大悟,這就是加密過程了,但是也有人會產生疑問,為什麼要取數字3 和 17 呢,這里還牽涉到另一個數學知識,原根的問題。即3是17的原根。看圖
有沒有發現規律,3的1~16次方,對17取余,得到的整數是從1~16。這時我們稱3為17的原根。也就是說上面的計算過程中有一組原根的關系。這是最早的迪菲赫爾曼秘鑰交換演算法。
解決了為什麼取3和17的問題後,下面繼續來看最終的RSA是如何產生的:
還記得我們上面提到的歐拉定理嗎,其中 m 與 n 互為質數,n為質數,d 是 e 相對於 φn的模反元素。
當迪菲赫爾曼密鑰交換演算法碰上歐拉定理會產生什麼呢?
我們得到下面的推論:
好,到這里我們是不是已經看到了整個的加密和解密過程了。
其中 m 是明文;c 是密文; n 和 e 為公鑰;d 和 n 為私鑰 。
其中幾組數字的關系一定要明確:
1、d是e 相對於 φn 的模反元素,φn = n-1,即 e * d mod n = 1.
2、m 小於 n,上面在講迪菲赫爾曼密鑰交換演算法時,提到原根的問題,在RSA加密演算法中,對m和n並沒有原根條件的約束。只要滿足m與n互為質數,n為質數,且m < n就可以了。
OK,上面就是RSA加密演算法的原理了,經過上面幾個數學公式的狂轟亂炸,是不是有點迷亂了,給大家一些時間理一下,後面會和大家一起來驗證RSA演算法以及RSA為什麼安全。
⑷ 公鑰密碼→RSA詳解
在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。用於解密的密鑰必須被配送給接收者,這一問題稱為 密鑰配送問題 ,如果使用公鑰密碼,則無需向接收者配送用於解密的密鑰,這樣就解決了密鑰配送問題。可以說公鑰密碼是密碼學歷史上最偉大的發明。
解決密鑰配送問題的方法
在人數很多的情況下,通信所需要的密鑰數量會增大,例如:1000名員工中每一個人都可以和另外999個進行通信,則每個人需要999個通信密鑰,整個密鑰數量:
1000 x 999 ÷ 2 = 499500
很不現實,因此此方法有一定的局限性
在Diffic-Hellman密鑰交換中,進行加密通信的雙方需要交換一些信息,而這些信息即便被竊聽者竊聽到也沒有問題(後續文章會進行詳解)。
在對稱密碼中,加密密鑰和解密密鑰是相同的,但公鑰密碼中,加密密鑰和解密密鑰卻是不同的。只要擁有加密密鑰,任何人都可以加密,但沒有解密密鑰是無法解密的。
公鑰密碼中,密鑰分為加密密鑰(公鑰)和解密密鑰(私鑰)兩種。
公鑰和私鑰是一一對應的,一對公鑰和私鑰統稱為密鑰對,由公鑰進行加密的密文,必須使用與該公鑰配對的私鑰才能夠解密。密鑰對中的兩個密鑰之間具有非常密切的關系——數學上的關系——因此公鑰和私鑰是不能分別單獨生成的。
發送者:Alice 接收者:Bob 竊聽者:Eve
通信過程是由接收者Bob來啟動的
公鑰密碼解決了密鑰配送的問題,但依然面臨著下面的問題
RSA是目前使用最廣泛的公鑰密碼演算法,名字是由它的三位開發者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母組成的(Rivest-Shamir-Adleman)。RSA可以被使用公鑰密碼和數字簽名(此文只針對公鑰密碼進行探討,數字簽名後續文章敬請期待)1983年在美國取得了專利,但現在該專利已經過期。
在RSA中,明文、密鑰和密文都是數字,RSA加密過程可以用下列公式來表達
密文 = 明文 E mod N
簡單的來說,RSA的密文是對代表明文的數字的 E 次方求mod N 的結果,換句話說:將明文和自己做 E 次乘法,然後將結果除以 N 求余數,這個余數就是密文。
RSA解密過程可以用下列公式來表達
明文 = 密文 D mod N
對表示密文的數字的 D 次方求mod N 就可以得到明文,換句話說:將密文和自己做 D 次乘法,在對其結果除以 N 求余數,就可以得到明文
此時使用的數字 N 和加密時使用的數字 N 是相同的,數 D 和數 N 組合起來就是RSA的解密密鑰,因此 D 和 N 的組合就是私鑰 。只要知道 D 和 N 兩個數的人才能夠完成解密的運算
根據加密和解密的公式可以看出,需要用到三個數—— E 、 D 和 N 求這三個數就是 生成密鑰對 ,RSA密鑰對的生成步驟如下:
准備兩個很大的質數 p 和 q ,將這兩個數相乘,結果就是 N
N = p x q
L 是 p-1 和 q-1 的最小公倍數,如果用lcm( X , Y )來表示 「 X 和 Y 的最小公倍數」 則L可以寫成下列形式
L = lcm ( p - 1, q - 1)
E 是一個比1大、比 L 小的數。 E 和 L 的最大公約數必須為1,如果用gcd( X , Y )來表示 X 和 Y 的最大公約數,則 E 和 L 之間存在下列關系:
1 < E < L
gcd( E , L ) = 1 (是為了保證一定存在解密時需要使用的數 D )
1 < D < L
E x D mod L = 1
p = 17
q = 19
N = p x q = 17 x 19 = 323
L = lcm ( p - 1, q - 1) = lcm (16,18) = 144
gcd( E , L ) = 1
滿足條件的 E 有很多:5,7,11,13,17,19,23,25,29,31...
這里選擇5來作為 E ,到這里我們已經知道 E = 5 N = 323 這就是公鑰
E x D mod L = 1
D = 29 可以滿足上面的條件,因此:
公鑰: E = 5 N = 323
私鑰: D = 29 N = 323
要加密的明文必須是小於 N 的數,這是因為在加密運算中需要求 mod N 假設加密的明文是123
明文 E mod N = 123 5 mod 323 = 225(密文)
對密文225進行解密
密文 D mod N = 225 29 mod 323 = 225 10 x 225 10 x 225 9 mod 323 = (225 10 mod 323) x (225 10 mod 323) x (225 9 mod 323) = 16 x 16 x 191 mod 323 = 48896 mod 323 = 123(明文)
如果沒有mod N 的話,即:
明文 = 密文 D mod N
通過密文求明文的難度不大,因為這可以看作是一個求對數的問題。
但是,加上mod N 之後,求明文就變成了求離散對數的問題,這是非常困難的,因為人類還沒有發現求離散對數的高效演算法。
只要知道 D ,就能夠對密文進行解密,逐一嘗試 D 來暴力破譯RSA,暴力破解的難度會隨著D的長度增加而加大,當 D 足夠長時,就不能再現實的時間內通過暴力破解找出數 D
目前,RSA中所使用的 p 和 q 的長度都是1024比特以上, N 的長度為2048比特以上,由於 E 和 D 的長度可以和N差不多,因此要找出 D ,就需要進行2048比特以上的暴力破解。這樣的長度下暴力破解找出 D 是極其困難的
E x D mod L = 1 L = lcm ( p - 1, q - 1)
由 E 計算 D 需要使用 p 和 q ,但是密碼破譯者並不知道 p 和 q
對於RSA來說,有一點非常重要,那就是 質數 p 和 q 不能被密碼破譯這知道 。把 p 和 q 交給密碼破譯者與把私鑰交給密碼破譯者是等價的。
p 和 q 不能被密碼破譯者知道,但是 N = p x q 而且 N 是公開的, p 和 q 都是質數,因此由 N 求 p 和 q 只能通過 將 N 進行質因數分解 ,所以說:
一旦發現了對大整數進行質因數分解的高效演算法,RSA就能夠被破譯
這種方法雖然不能破譯RSA,但卻是一種針對機密性的有效攻擊。
所謂中間人攻擊,就是主動攻擊者Mallory混入發送者和接收者的中間,對發送者偽裝成接收者,對接收者偽裝成發送者的攻擊,在這里,Mallory就是「中間人」
這種攻擊不僅針對RSA,而是可以針對任何公鑰密碼。在這個過程中,公鑰密碼並沒有被破譯,所有的密碼演算法也都正常工作並確保了機密性。然而,所謂的機密性並非在Alice和Bob之間,而是在Alice和Mallory之間,以及Mallory和Bob之間成立的。 僅靠公鑰密碼本身,是無法防禦中間人攻擊的。
要防禦中間人攻擊,還需要一種手段來確認所收到的公鑰是否真的屬於Bob,這種手段稱為認證。在這種情況下,我們可以使用公鑰的 證書 (後面會陸續更新文章來進行探討)
網路上很多伺服器在收到格式不正確的數據時都會向通信對象返回錯誤消息,並提示「這里的數據有問題」,然而,這種看似很貼心的設計卻會讓攻擊者有機可乘。 攻擊者可以向伺服器反復發送自己生成的偽造密文,然後分析返回的錯誤消息和響應時間獲得一些關於密鑰和明文的信息。
為了抵禦這種攻擊,可以對密文進行「認證」,RSA-OAEP(最優非對稱加密填充)正是基於這種思路設計的一種RSA改良演算法。
RSA-OAEP在加密時會在明文前面填充一些認證信息,包括明文的散列值以及一定數量的0,然後用RSA進行加密,在解密的過程中,如果解密後的數據的開頭沒有找到正確的認證信息,則可以判定有問題,並返回固定的錯誤消息(重點是,不能將具體的錯誤內容告知開發者)
RSA-OAEP在實際應用中,還會通過隨機數使得每次生成的密文呈現不同的排列方式,從而進一步提高安全性。
隨著計算機技術的進步等,以前被認為是安全的密碼會被破譯,這一現象稱為 密碼劣化 ,針對這一點:
⑸ 密碼學基礎1:RSA演算法原理全面解析
本節內容中可能用到的符號說明如下:
質數和合數: 質數是指除了平凡約數1和自身之外,沒有其他約數的大於1的正整數。大於1的正整數中不是素數的則為合數。如 7、11 是質數,而 4、9 是合數。在 RSA 演算法中主要用到了質數相關性質,質數可能是上帝留給人類的一把鑰匙,許多數學定理和猜想都跟質數有關。
[定理1] 除法定理: 對任意整數 a 和 任意正整數 n,存在唯一的整數 q 和 r,滿足 。其中, 稱為除法的商,而 稱為除法的余數。
整除: 在除法定理中,當余數 時,表示 a 能被 n 整除,或者說 a 是 n 的倍數,用符號 表示。
約數和倍數 : 對於整數 d 和 a,如果 ,且 ,則我們說 d 是 a 的約數,a 是 d 的倍數。
公約數: 對於整數 d,a,b,如果 d 是 a 的約數且 d 也是 b 的約數,則 d 是 a 和 b 的公約數。如 30 的約數有 1,2,3,5,6,10,15,30,而 24 的約數有 1,2,3,4,6,8,12,24,則 30 和 24 的公約數有 1,2,3,6。其中 1 是任意兩個整數的公約數。
公約數的性質:
最大公約數: 兩個整數最大的公約數稱為最大公約數,用 來表示,如 30 和 24 的最大公約數是 6。 有一些顯而易見的性質:
[定理2] 最大公約數定理: 如果 a 和 b 是不為0的整數,則 是 a 和 b 的線性組合集合 中的最小正元素。
由定理2可以得到一個推論:
[推論1] 對任意整數 a 和 b,如果 且 ,則 。
互質數: 如果兩個整數 a 和 b 只有公因數 1,即 ,則我們就稱這兩個數是互質數(coprime)。比如 4 和 9 是互質數,但是 15 和 25 不是互質數。
互質數的性質:
歐幾里得演算法分為樸素歐幾里得演算法和擴展歐幾里得演算法,樸素法用於求兩個數的最大公約數,而擴展的歐幾里得演算法則有更多廣泛應用,如後面要提到的求一個數對特定模數的模逆元素等。
求兩個非負整數的最大公約數最有名的是 輾轉相除法,最早出現在偉大的數學家歐幾里得在他的經典巨作《幾何原本》中。輾轉相除法演算法求兩個非負整數的最大公約數描述如下:
例如, ,在求解過程中,較大的數縮小,持續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。
歐幾里得演算法的python實現如下:
擴展歐幾里得演算法在 RSA 演算法中求模反元素有很重要的應用,定義如下:
定義: 對於不全為 0 的非負整數 ,則必然存在整數對 ,使得
例如,a 為 3,b 為 8,則 。那麼,必然存在整數對 ,滿足 。簡單計算可以得到 滿足要求。
擴展歐幾里得演算法的python實現如下:
同餘: 對於正整數 n 和 整數 a,b,如果滿足 ,即 a-b 是 n 的倍數,則我們稱 a 和 b 對模 n 同餘,記號如下: 例如,因為 ,於是有 。
對於正整數 n,整數 ,如果 則我們可以得到如下性質:
譬如,因為 ,則可以推出 。
另外,若 p 和 q 互質,且 ,則可推出:
此外,模的四則運算還有如下一些性質,證明也比較簡單,略去。
模逆元素: 對整數 a 和正整數 n,a 對模數 n 的模逆元素是指滿足以下條件的整數 b。 a 對 模數 n 的 模逆元素不一定存在,a 對 模數 n 的模逆元素存在的充分必要條件是 a 和 n 互質,這個在後面我們會有證明。若模逆元素存在,也不是唯一的。例如 a=3,n=4,則 a 對模數 n 的模逆元素為 7 + 4k,即 7,11,15,...都是整數 3 對模數 4 的模逆元素。如果 a 和 n 不互質,如 a = 2,n = 4,則不存在模逆元素。
[推論2] 模逆元素存在的充分必要條件是整數 a 和 模數 n 互質。
[定理3] 唯一質數分解定理: 任何一個大於1的正整數 n 都可以 唯一分解 為一組質數的乘積,其中 都是自然數(包括0)。比如 6000 可以唯一分解為 。
由質數唯一分解定理可以得到一個推論: 質數有無窮多個 。
[定理4] 中國剩餘定理(Chinese remainder theorem,CRT) ,最早見於《孫子算經》(中國南北朝數學著作,公元420-589年),叫物不知數問題,也叫韓信點兵問題。
翻譯過來就是已知一個一元線性同餘方程組求 x 的解:
宋朝著名數學家秦九韶在他的著作中給出了物不知數問題的解法,明朝的數學家程大位甚至編了一個《孫子歌訣》:
意思就是:將除以 3 的余數 2 乘以 70,將除以 5 的余數 3 乘以 21,將除以 7 的余數 2 乘以 15,最終將這三個數相加得到 。再將 233 除以 3,5,7 的最小公倍數 105 得到的余數 ,即為符合要求的最小正整數,實際上, 都符合要求。
物不知數問題解法本質
求解通項公式
中國剩餘定理相當於給出了以下的一元線性同餘方程組的有解的判定條件,並用構造法給出了解的具體形式。
模數 兩兩互質 ,則對任意的整數: ,方程組 有解,且解可以由如下構造方法得到:
並設 是除 以外的其他 個模數的乘積。
中國剩餘定理通項公式證明
⑹ 用RSA對下列數據實現加密和解密:
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
用RSA對下列數據實現加密和解密:
a. p=3,q=11,e=7;M=5
b. p=7,q=11,e=3;M=9
解析:
拜託:老大,你的家庭作業也來問?
你自己學吧:下面是課文^
RSA加密演算法
該演算法於1977年由美國麻省理工學院MIT(Massachusetts Institute of Technology)的Ronal Rivest,Adi Shamir和Len Adleman三位年輕教授提出,並以三人的姓氏Rivest,Shamir和Adlernan命名為RSA演算法。該演算法利用了數論領域的一個事實,那就是雖然把兩個大質數相乘生成一個合數是件十分容易的事情,但要把一個合數分解為兩個質數卻十分困難。合數分解問題目前仍然是數學領域尚未解決的一大難題,至今沒有任何高效的分解方法。與Diffie-Hellman演算法相比,RSA演算法具有明顯的優越性,因為它無須收發雙方同時參與加密過程,且非常適合於電子函件系統的加密。
RSA演算法可以表述如下:
(1) 密鑰配製。假設m是想要傳送的報文,現任選兩個很大的質數p與q,使得:
(12-1);
選擇正整數e,使得e與(p-1)(q-1)互質;這里(p-1)(q-1)表示二者相乘。再利用輾轉相除法,求得d,使得:
(12-2);
其中x mod y是整數求余運算,其結果是x整除以y後剩餘的余數,如5 mod 3 = 2。
這樣得:
(e,n),是用於加密的公共密鑰,可以公開出去;以及
(d,n),是用於解密的專用鑰匙,必須保密。
(2) 加密過程。使用(e,n)對明文m進行加密,演算法為:
(12-3);
這里的c即是m加密後的密文。
(3) 解密過程。使用(d,n)對密文c進行解密,演算法為:
(12-4);
求得的m即為對應於密文c的明文。
RSA演算法實現起來十分簡捷,據說英國的一位程序員只塌仔用了3行Perl程序便實現了加密和解密運算。
RSA演算法建立在正整數求余運算基礎之上,同時還保持了指數運算的性質,這一點我們不難證明。例如:
(12-5);
(12-6)。
RSA公共密鑰加密演算法的核心是歐拉(Euler)函數ψ。對於正整數n,ψ(n)定義為小於n且與n互質的正整數的個數。例如ψ(6) = 2,這是因為小於6且與6互質的數有1和5共兩個數;再如ψ(7) = 6,這是因為互質數有1,2,3,5,6共6個。
歐拉在公元前300多年就發現了ψ函數的一個十分有趣的性質,那就是對於任意小於n且與n互質的正整數m,總有mψ(n) mod n = 1。例如,5ψ(6) mod 6 = 52 mod 6= 25 mod 6 =1。也就是說,在對n求余的運算下,ψ(n)指數具有周期性。
當n很小時,計算ψ(n)並不難,使用窮舉法即可求出;但當n很大時,計算ψ(n)就十分困難了,其運算量與判斷n是否為質數的情況相當。不過在特殊情況下,利用ψ函數的兩個性質,可以極大地減少運算量。
性質1:如果p是質數,則ψ(p) = (p-1)。
性質2:如果p與q均為質數,則ψ(p·q) = ψ(p)·ψ(q) = (p-1)(q-1)。
RSA演算法正是注意到這兩條性質來設計公共密鑰加密系統的,p與q的乘積n可以作為公共密鑰公布出來,而n的因子p和q則包含在專用密鑰中,可以用來解密。如果解密需要用到ψ(n),衡桐收信方由於知道因子p和q,可以方便地算出ψ(n) = (p-咐衫坦1)(q-1)。如果竊聽者竊得了n,但由於不知道它的因子p與q,則很難求出ψ(n)。這時,竊聽者要麼強行算出ψ(n),要麼對n進行因數分解求得p與q。然而,我們知道,在大數范圍內作合數分解是十分困難的,因此竊密者很難成功。
有了關於ψ函數的認識,我們再來分析RSA演算法的工作原理:
(1) 密鑰配製。設m是要加密的信息,任選兩個大質數p與q,使得 ;選擇正整數e,使得e與ψ(n) = (p-1)(q-1)互質。
利用輾轉相除法,計算d,使得ed mod ψ(n) = ,即ed = kψ(n) +1,其中k為某一正整數。
公共密鑰為(e,n),其中沒有包含任何有關n的因子p和q的信息。
專用密鑰為(d,n),其中d隱含有因子p和q的信息。
(2) 加密過程。使用公式(12-3)對明文m進行加密,得密文c。
(3) 解密過程。使用(d,n)對密文c進行解密,計算過程為:
cd mod n = (me mod n)d mod n
= med mod n
= m(kψ(n) + 1) mod n
= (mkψ(n) mod n)·(m mod n)
= m
m即為從密文c中恢復出來的明文。
例如,假設我們需要加密的明文代碼信息為m = 14,則:
選擇e = 3,p = 5,q = 11;
計算出n = p·q = 55,(p-1)(q-1) = 40,d = 27;
可以驗證:(e·d) mod (p-1)(q-1) = 81 mod 40 = 1;
加密:c = me mod n = 143 mod 55 = 49;
解密:m = cd mod n = 4927 mod 55 = 14。
關於RSA演算法,還有幾點需要進一步說明:
(1) 之所以要求e與(p-1)(q-1)互質,是為了保證 ed mod (p-1)(q-1)有解。
(2) 實際操作時,通常先選定e,再找出並確定質數p和q,使得計算出d後它們能滿足公式(12-3)。常用的e有3和65537,這兩個數都是費馬序列中的數。費馬序列是以17世紀法國數學家費馬命名的序列。
(3) 破密者主要通過將n分解成p·q的辦法來解密,不過目前還沒有辦法證明這是唯一的辦法,也可能有更有效的方法,因為因數分解問題畢竟是一個不斷發展的領域,自從RSA演算法發明以來,人們已經發現了不少有效的因數分解方法,在一定程度上降低了破譯RSA演算法的難度,但至今還沒有出現動搖RSA演算法根基的方法。
(4) 在RSA演算法中,n的長度是控制該演算法可靠性的重要因素。目前129位、甚至155位的RSA加密勉強可解,但目前大多數加密程序均採用231、308甚至616位的RSA演算法,因此RSA加密還是相當安全的。
據專家測算,攻破512位密鑰RSA演算法大約需要8個月時間;而一個768位密鑰RSA演算法在2004年之前無法攻破。現在,在技術上還無法預測攻破具有2048位密鑰的RSA加密演算法需要多少時間。美國Lotus公司懸賞1億美元,獎勵能破譯其Domino產品中1024位密鑰的RSA演算法的人。從這個意義上說,遵照SET協議開發的電子商務系統是絕對安全的。
⑺ RSA 加密演算法主要公式 - 草稿
從一道計算題開始了解 RSA 非對稱加密演算法的輪褲主要公式。
下面是一道關於 RSA 計察桐賣算的問題,比較簡單,從這道題來學習和了解關於 RSA 非對稱加密演算法的相關知識,當然,具體關於 RSA 加密演算法的知識不能僅限於以下問題,應該更全面的了解相關的知識。敗逗但是下面的問題已經把其中的重點演算法的表現出來了。
下面是關於 RSA 的主要數學公式:
n = p * q
ø(n) = (p - 1) * (q - 1)
ed ≡ 1 mod ø(n)
c = m e mod n
m = c d mod n
其中兩個 ** 是次方的意思
ed ≡ 1 mod ø(n)
3 * 7 ≡ 1 mod ø(n)
21 ≡ 1 mod ø(n)
ø(n) = 20
ø(n) = 2 * 10 = (p - 1) * (q - 1)
p, q = 3, 11
n = p * q = 3 * 11 = 3
c = m**e mod n = 6 ** 3 mod 33
6 ** 3
3 = 1 * (2 ** 0) + 1 * (2 ** 1)
t0 = 6 mod 33 = 6
t1 = 6 ** 2 mod 33 = 3
t0 * t1 mod n = 6 * 3 mod 33 = 18
因此 明文 6 的密文是 18
m = c ** d mod n = 18 ** 7 mod 33
t0 = 18 mod 33 = 18
t1 = 18 ** 2 mod 33 = 27
t2 = 27 ** 2 mod 33 = 3
t0 * t1 * t2 mod n = 18 * 27 * 3 mod 33 = 6
因此,密文 18 解密後是 6
⑻ 求解計算RSA演算法加密的步驟。 用RSA演算法加密時,已知公鑰是(e=7,n=20)...
加密時用公鑰d,解密時用私鑰e
公式都一樣
要加密或解密的數字做e次方或d次方,得到的數字再和n進行模運算,模運算就是求余數
拿你給的數據來算的話就是
3的7次方等於2187,2187除以20等於109,余數是7
所以得到的密文就是7
解密就是算7的3次方343,343除以20等於340餘數3,於是我們又得回原來的明文3了
⑼ rsa加密原理 RSA加密演算法原理是什麼
1、首先要使用概率演算法來驗證隨機產生的大的整數是否是質數,這樣的演算法比較快而且可以消除掉大多數非質數。假如有一個數通過了這個測試的話,那麼要使用一個精確的測試來保證它的確是一個質數。
2、除此之外這樣找到的p和q還要滿足一定的要求,首先它們不能太靠近,此外p-1或q-1的因子不能太小,否則的話N也可以被很快地分解。
3、此外尋找質數的演算法不能給攻擊者任何信息,這些質數是怎樣找到的,尤其產生悉滲隨機數的軟體必須非常好。要求是隨機和不可預測。這兩個要求並不相同。一個隨機過程可能可以產生一個不相關的數的系列,但假如有人能夠預測出(或部分地預測出)這個系列的話,那麼它就已經不可靠了。比如有一些非常好的隨機數演算法,但它們都已經被發表,因此它們不能被使用,因為假如一個攻擊者可以猜出p和q一半的位的話,那麼他們就已經可以輕而易舉地推算出另一半。
4、此外密鑰d必須足夠大,1990年有人證明假如p大於q而小於2q(這是一個很經常的情況)而d<n^(1 n的某一碧猛個漸進分數的分母(這個演算法的原理是利用n="pq來逼近phi:=(p-1)(q-1),而演算法要求d*e除悔陸橋以phi的余數是1,所以de=kphi+1,e/phi=k/d+1/phi,這說明了e/phi與k/d近似相等,從而可以通過e/N的漸進分數來尋找d(當然更多的,我們也可以更好地估計phi來獲得一個更好的估計,但對通常情況(e=65537),RSA演算法仍然是安全的))。
5、最後,RSA的原理保證了d和e必須與(p-1)(q-1)的因子互素,因此d,e都不可能為
⑽ 一個RSA演算法的加密運算,需要完整的演算過程。
我來回答你可以閉帖了,呵呵
看你題目的意思就是打算把republic這個詞按照你的方法裝換成數字例如是:X
p=3,q=11
n=p*q=33
t=(p-1)*(q-1)=20
取任何一個數e,要求滿足e<t並且e與t互素(就是最大公因數為1)
我們可以取e=7
要求d*e%t==1(D*e除以t取余等於1),我們可以找到D=3
此時我們就有了三個數
n=33
d=3 公鑰
e=7 私鑰
設消息為數M (M <n)
設c=(M**d)%n就得到了加密後的消息c
設m=(c**e)%n則 m == M,從而完成對c的解密。
註:**表示次方,上面兩式中的d和e可以互換。
我們可以對republic詞按照你的方法裝換成數字:X一位一位的加密。
加入X的第一位是6(別的同理)
則:M = 6
加密時:(c為加密後的數字)
c=(M**d)%n=(6^3)%33=216%33=18(商6餘18),則6加密後就是18了
解密時:
設m=(c**e)%n則 m == M,
(18^7)%33=612220032%33=6(商18552122餘6)
到此加密解密完成。
至於怎麼把republic裝換成X,把X裝分成多少部分進行分批加密,你可以自己決定。但是加密的數字M 需要小於n
如果需要給你寫個程序,留個Email,我空的時候寫個發給你。
我個人給你個方法,因為n=33 >26(26個英文字母),所以可以把republic分成一個字母一個字母的加密。
按你的分發 REP 就分成數字
18 05 16
加密
(18^3)%33=5832%33= 24
(05^3)%33=125%33= 26
(16^3)%33=%33= 4
所以加密後就是
24 26 04 轉換成字母就是 XZD
解密
(24^7)%33=4586471424%33=18
(26^7)%33=8031810176%33=05
(4^7)%33=16384%33=16
又變成 18 05 16 轉換成字母就是 REP
是不是很簡單啊~~
我如果不懂。空間裡面有片文章,你可以看看,就知道我上面講的那些是什麼意思了。
RSA演算法舉例說明
http://hi..com/lsgo/blog/item/5fd0da24d495666834a80fb8.html