導航:首頁 > 文檔加密 > rsa加密解密轉換證明

rsa加密解密轉換證明

發布時間:2023-01-03 23:03:39

㈠ rsa加密和解密的理論依據是什麼

以前也接觸過RSA加密演算法,感覺這個東西太神秘了,是數學家的事,和我無關。但是,看了很多關於RSA加密演算法原理的資料之後,我發現其實原理並不是我們想像中那麼復雜,弄懂之後發現原來就只是這樣而已..
學過演算法的朋友都知道,計算機中的演算法其實就是數學運算。所以,再講解RSA加密演算法之前,有必要了解一下一些必備的數學知識。我們就從數學知識開始講解。
必備數學知識
RSA加密演算法中,只用到素數、互質數、指數運算、模運算等幾個簡單的數學知識。所以,我們也需要了解這幾個概念即可。
素數
素數又稱質數,指在一個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。這個概念,我們在上初中,甚至小學的時候都學過了,這里就不再過多解釋了。
互質數
網路上的解釋是:公因數只有1的兩個數,叫做互質數。;維基網路上的解釋是:互質,又稱互素。若N個整數的最大公因子是1,則稱這N個整數互質。
常見的互質數判斷方法主要有以下幾種:
兩個不同的質數一定是互質數。例如,2與7、13與19。
一個質數,另一個不為它的倍數,這兩個數為互質數。例如,3與10、5與 26。
相鄰的兩個自然數是互質數。如 15與 16。
相鄰的兩個奇數是互質數。如 49與 51。
較大數是質數的兩個數是互質數。如97與88。
小數是質數,大數不是小數的倍數的兩個數是互質數。例如 7和 16。
2和任何奇數是互質數。例如2和87。
1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。
輾轉相除法。
指數運算
指數運算又稱乘方計算,計算結果稱為冪。nm指將n自乘m次。把nm看作乘方的結果,叫做」n的m次冪」或」n的m次方」。其中,n稱為「底數」,m稱為「指數」。
模運算
模運算即求余運算。「模」是「Mod」的音譯。和模運算緊密相關的一個概念是「同餘」。數學上,當兩個整數除以同一個正整數,若得相同餘數,則二整數同餘。
兩個整數a,b,若它們除以正整數m所得的余數相等,則稱a,b對於模m同餘,記作: a ≡ b (mod m);讀作:a同餘於b模m,或者,a與b關於模m同餘。例如:26 ≡ 14 (mod 12)。
RSA加密演算法
RSA加密演算法簡史
RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
公鑰與密鑰的產生
假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰:
隨意選擇兩個大的質數p和q,p不等於q,計算N=pq。
根據歐拉函數,求得r = (p-1)(q-1)
選擇一個小於 r 的整數 e,求得 e 關於模 r 的模反元素,命名為d。(模反元素存在,當且僅當e與r互質)
將 p 和 q 的記錄銷毀。
(N,e)是公鑰,(N,d)是私鑰。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。
加密消息
假設Bob想給Alice送一個消息m,他知道Alice產生的N和e。他使用起先與Alice約好的格式將m轉換為一個小於N的整數n,比如他可以將每一個字轉換為這個字的Unicode碼,然後將這些數字連在一起組成一個數字。假如他的信息非常長的話,他可以將這個信息分為幾段,然後將每一段轉換為n。用下面這個公式他可以將n加密為c:

ne ≡ c (mod N)
計算c並不復雜。Bob算出c後就可以將它傳遞給Alice。
解密消息
Alice得到Bob的消息c後就可以利用她的密鑰d來解碼。她可以用以下這個公式來將c轉換為n:
cd ≡ n (mod N)
得到n後,她可以將原來的信息m重新復原。
解碼的原理是:
cd ≡ n e·d(mod N)
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由費馬小定理可證明(因為p和q是質數)
n e·d ≡ n (mod p) 和 n e·d ≡ n (mod q)
這說明(因為p和q是不同的質數,所以p和q互質)
n e·d ≡ n (mod pq)
簽名消息
RSA也可以用來為一個消息署名。假如甲想給乙傳遞一個署名的消息的話,那麼她可以為她的消息計算一個散列值(Message digest),然後用她的密鑰(private key)加密這個散列值並將這個「署名」加在消息的後面。這個消息只有用她的公鑰才能被解密。乙獲得這個消息後可以用甲的公鑰解密這個散列值,然後將這個數據與他自己為這個消息計算的散列值相比較。假如兩者相符的話,那麼他就可以知道發信人持有甲的密鑰,以及這個消息在傳播路徑上沒有被篡改過。

RSA加密演算法的安全性

當p和q是一個大素數的時候,從它們的積pq去分解因子p和q,這是一個公認的數學難題。然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。
1994年彼得·秀爾(Peter Shor)證明一台量子計算機可以在多項式時間內進行因數分解。假如量子計算機有朝一日可以成為一種可行的技術的話,那麼秀爾的演算法可以淘汰RSA和相關的衍生演算法。(即依賴於分解大整數困難性的加密演算法)
另外,假如N的長度小於或等於256位,那麼用一台個人電腦在幾個小時內就可以分解它的因子了。1999年,數百台電腦合作分解了一個512位長的N。1997年後開發的系統,用戶應使用1024位密鑰,證書認證機構應用2048位或以上。
RSA加密演算法的缺點

雖然RSA加密演算法作為目前最優秀的公鑰方案之一,在發表三十多年的時間里,經歷了各種攻擊的考驗,逐漸為人們接受。但是,也不是說RSA沒有任何缺點。由於沒有從理論上證明破譯RSA的難度與大數分解難度的等價性。所以,RSA的重大缺陷是無法從理論上把握它的保密性能如何。在實踐上,RSA也有一些缺點:
產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密;
分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,。

㈡ 理論分析和舉例說明RSA的加密和解密是互逆的

由於沒有辦法打出fai這個希臘字母 n的歐拉函數我用@(n)來表示
^ 代表冪的意思
e*d=1(mod @(n))
m為明文 c為密文
加密:c=m^e(mod n)
解密:m=c^d(mod n)
證明加密解密互逆也就是證明:
m=(m^e)^d(mod n) //把加密式子過程的c 帶到解密過程那個式子中
也就是證明 m=m^(e*d) (mod n)

因為 e*d=1(mod @(n)) 可以推導出 e*d=k*@(n)+1
所以m=m*(k*@(n)+1) (mod n)
也就可以寫出m=m*m^(k*@(n)) (mod n)
因為根據費馬定理 m^(@(n))=1 (mod n)
所以m^(k*@(n)) =1^k(mod n)=1(mod n)
m*m^(k*@(n)) (mod n)=m*1 (mod n)=m(mod n)證明就ok了

主要把握2點: 費馬定理
公私鑰關於@(n)互逆 就鬆鬆搞定

㈢ rsa加密演算法

rsa加密演算法如下:

演算法原理:

RSA公開密鑰密碼體制的原理是:根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰

㈣ RSA加密解密演算法的證明

1. 選擇兩個質數 p, q

2. 設 n =p * q

3. 求出n的歐拉函數 f = (p-1)*(q-1)

4. 在[2, f)的范圍內隨機找一個與f互質的數 e 作為公鑰的指數

5. 算出私鑰指數d,d為公鑰指數e對 f 的一個模反元素,即 ed = kf +1 (k為正整數)

6. 將(n, e)封裝成公鑰,將(n, d)封裝成私鑰

1. 設被加密的數為m, m為小於n的非負整數

2. 算出 c = (m^e) % n ,則 c 即為密文

算出 (c^d)%n , 即為被加密的數m,證明如下。

因為  c=m^e - n*g,其中g為非負整數,

所以  (c^d)%n = [ (m^e - n*g) ^ d ] % n

展開多項式後將n的整數倍的項去除,得到

[( m^e )^d] % n

=[ m^(e*d) ] % n

=[ m^(k*f+1) ] % n

=[ m * m^(k*f) ] % n

={ m * [ (m^f) ^ k] } % n

接下來分三種情況討論:

第一種情況:m=0或者m=1

則 { m * [ (m^f) ^ k] } % n = m

第二種情況:m>1,且m與n互質

根據  歐拉定理   ,m^f = h*n+1,其中h為正整數

則 { m * [ (m^f) ^ k] } % n

={ m * [ ( h*n+1 ) ^ k] } % n

={ m * [ i*n + 1 ] } % n    (其中i為展開指數多項式後合並n的同類項得到的正整數)

=m%n 

=m  (因為m<n)

第三種情況:m>1,且m與n不互質

因為n=p*q, 且p, q均為質數,則 m=j*p或者j*q, 其中j為正整數

當m=j*p時, 因為m<n, 所以m與q互質

(證明:如果m, q不互質,則m含有質因數q,因為p與q互質, 所以 j 含有質因數p, 這與m<n矛盾)

根據歐拉定理 m^(q-1)=x*q+1 ,其中x為正整數

則 { m * [ (m^f) ^ k] } % n

= { m * [ ( m^[(p-1)*(q-1)] ) ^ k] } % n

={ m * [ m^(q-1)^(p-1)^k ] } % n

={ j * p * [ ( x*q+1 )^ (p-1)^k ] } % n

={ j * p * [ y*q + 1 ] } % n    (其中y為展開指數多項式後合並q的同類項得到的正整數)

=(j*p*y*q + m ) %n

=(j*y*n+m) % n

=m

同理,當m=j*q時也成立。

證明完畢。

RSA解密正確性證明_國科大網安二班的博客-CSDN博客

https://blog.csdn.net/weixin_46395886/article/details/114700012#:~:text=RSA%E8%A7%A3%E5%AF%86%E6%AD%A3%E7%A1%AE%E6%80%A7%E8%AF%81%E6%98%8E%20%E5%85%88%E6%8F%8F%E8%BF%B0%E4%B8%80%E4%B8%8BRSA%E5%AF%86%E7%A0%81%E4%BD%93%E5%88%B6%EF%BC%9A%20RSA%E5%AF%86%E7%A0%81%E4%BD%93%E5%88%B6%EF%BC%9A%20%E5%A4%A7%E7%B4%A0%E6%95%B0%20p%2Cq%20%EF%BC%8C%E6%A8%A1%E6%95%B0,n%20%3D%20pq%20%EF%BC%8C%E5%8A%A0%E5%AF%86%E6%8C%87%E6%95%B0%20b%20%EF%BC%8C%E8%A7%A3%E5%AF%86%E6%8C%87%E6%95%B0

RSA演算法原理 - 知乎 (hu.com)

https://zhuanlan.hu.com/p/48249182#:~:text=RSA%E7%AE%97%E6%B3%95%E5%8E%9F%E7%90%86%201%20%EF%BC%881%EF%BC%89%E4%B9%99%E6%96%B9%E7%94%9F%E6%88%90%E4%B8%A4%E6%8A%8A%E5%AF%86%E9%92%A5%20%28%E5%85%AC%E9%92%A5%E5%92%8C%E7%A7%81%E9%92%A5%29%E3%80%82...,2%20%EF%BC%882%EF%BC%89%E7%94%B2%E6%96%B9%E8%8E%B7%E5%8F%96%E4%B9%99%E6%96%B9%E7%9A%84%E5%85%AC%E9%92%A5%EF%BC%8C%E7%84%B6%E5%90%8E%E7%94%A8%E5%AE%83%E5%AF%B9%E4%BF%A1%E6%81%AF%E5%8A%A0%E5%AF%86%E3%80%82%203%20%EF%BC%883%EF%BC%89%E4%B9%99%E6%96%B9%E5%BE%97%E5%88%B0%E5%8A%A0%E5%AF%86%E5%90%8E%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%8C%E7%94%A8%E7%A7%81%E9%92%A5%E8%A7%A3%E5%AF%86%E3%80%82

㈤ 密碼學基礎(三):非對稱加密(RSA演算法原理)

加密和解密使用的是兩個不同的秘鑰,這種演算法叫做非對稱加密。非對稱加密又稱為公鑰加密,RSA只是公鑰加密的一種。

現實生活中有簽名,互聯網中也存在簽名。簽名的作用有兩個,一個是身份驗證,一個是數據完整性驗證。數字簽名通過摘要演算法來確保接收到的數據沒有被篡改,再通過簽名者的私鑰加密,只能使用對應的公鑰解密,以此來保證身份的一致性。

數字證書是將個人信息和數字簽名放到一起,經由CA機構的私鑰加密之後生成。當然,不經過CA機構,由自己完成簽名的證書稱為自簽名證書。CA機構作為互聯網密碼體系中的基礎機構,擁有相當高級的安全防範能力,所有的證書體系中的基本假設或者前提就是CA機構的私鑰不被竊取,一旦 CA J機構出事,整個信息鏈將不再安全。

CA證書的生成過程如下:

證書參與信息傳遞完成加密和解密的過程如下:

互質關系:互質是公約數只有1的兩個整數,1和1互質,13和13就不互質了。
歐拉函數:表示任意給定正整數 n,在小於等於n的正整數之中,有多少個與 n 構成互質關系,其表達式為:

其中,若P為質數,則其表達式可以簡寫為:

情況一:φ(1)=1
1和任何數都互質,所以φ(1)=1;

情況二:n 是質數, φ(n)=n-1
因為 n 是質數,所以和小於自己的所有數都是互質關系,所以φ(n)=n-1;

情況三:如果 n 是質數的某一個次方,即 n = p^k ( p 為質數,k 為大於等於1的整數),則φ(n)=(p-1)p^(k-1)
因為 p 為質數,所以除了 p 的倍數之外,小於 n 的所有數都是 n 的質數;

情況四:如果 n 可以分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)

情況五:基於情況四,如果 p1 和 p2 都是質數,且 n=p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)=(p1-1)(p2-1)

而 RSA 演算法的基本原理就是歐拉函數中的第五種情況,即: φ(n)=(p1-1)(p2-1);

如果兩個正整數 a 和 n 互質,那麼一定可以找到整數 b,使得 ab-1 被 n 整除,或者說ab被n除的余數是1。這時,b就叫做a的「模反元素」。歐拉定理可以用來證明模反元素必然存在。

可以看到,a的 φ(n)-1 次方,就是a對模數n的模反元素。

n=p x q = 3233,3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。

在實際使用中,一般場景下選擇1024位長度的數字,更高安全要求的場景下,選擇2048位的數字,這里作為演示,選取p=61和q=53;

因為n、p、q都為質數,所以φ(n) = (p-1)(q-1)=60×52= 3120

注意,這里是和φ(n) 互互質而不是n!假設選擇的值是17,即 e=17;

模反元素就是指有一個整數 d,可以使得 ed 被 φ(n) 除的余數為1。表示為:(ed-1)=φ(n) y --> 17d=3120y+1,算出一組解為(2753,15),即 d=2753,y=-15,也就是(17 2753-1)/3120=15。

注意,這里不能選擇3119,否則公私鑰相同??

公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)

公鑰是公開的,也就是說m=p*q=3233是公開的,那麼怎麼求e被?e是通過模反函數求得,17d=3120y+1,e是公開的等於17,這時候想要求d就要知道3120,也就是φ(n),也就是φ(3233),說白了,3233是公開的,你能對3233進行因數分解,你就能知道d,也就能破解私鑰。

正常情況下,3233我們可以因數分解為61*53,但是對於很大的數字,人類只能通過枚舉的方法來因數分解,所以RSA安全性的本質就是:對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。

人類已經分解的最大整數是:

這個人類已經分解的最大整數為232個十進制位,768個二進制位,比它更大的因數分解,還沒有被報道過,因此目前被破解的最長RSA密鑰就是768位。所以實際使用中的1024位秘鑰基本安全,2048位秘鑰絕對安全。

網上有個段子:

已經得出公私鑰的組成:
公鑰:(n,e)=(3233,2753)
私鑰:(n,d)=(3233,17)
加密的過程就是

解密過程如下:

其中 m 是要被加密的數字,c 是加密之後輸出的結果,且 m < n ,其中解密過程一定成立可以證明的,這里省略證明過程。

總而言之,RSA的加密就是使用模反函數對數字進行加密和求解過程,在實際使用中因為 m < n必須成立,所以就有兩種加密方法:

對稱加密存在雖然快速,但是存在致命的缺點就是秘鑰需要傳遞。非對稱加密雖然不需要傳遞秘鑰就可以完成加密和解密,但是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。所以才有了兩者的互補關系,在傳遞對稱加密的秘鑰時採用非對稱加密,完成秘鑰傳送之後採用對稱加密,如此就可以完美互補。

㈥ rsa加密解密演算法

1978年就出現了這種演算法,它是第一個既能用於數據加密
也能用於數字簽名的演算法。它易於理解和操作,也很流行。算
法的名字以發明者的名字命名:Ron Rivest, AdiShamir 和
Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。

RSA的安全性依賴於大數分解。公鑰和私鑰都是兩個大素數
( 大於 100個十進制位)的函數。據猜測,從一個密鑰和密文
推斷出明文的難度等同於分解兩個大素數的積。

密鑰對的產生:選擇兩個大素數,p 和q 。計算:
n = p * q
然後隨機選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 )
互質。最後,利用Euclid 演算法計算解密密鑰d, 滿足

e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )

其中n和d也要互質。數e和
n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任
何人知道。 加密信息 m(二進製表示)時,首先把m分成等長數據
塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。對
應的密文是:

ci = mi^e ( mod n ) ( a )

解密時作如下計算:

mi = ci^d ( mod n ) ( b )

RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )
式驗證。具體操作時考慮到安全性和 m信息量較大等因素,一般是先
作 HASH 運算。

RSA 的安全性。
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理
論上的證明,因為沒有證明破解RSA就一定需要作大數分解。假設存在
一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。目前,
RSA的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯
然的攻擊方法。現在,人們已能分解140多個十進制位的大素數。因此,
模數n必須選大一些,因具體適用情況而定。

RSA的速度:
由於進行的都是大數計算,使得RSA最快的情況也比DES慢上100倍,無論
是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量數據
加密。

RSA的選擇密文攻擊:
RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝
(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信
息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保
留了輸入的乘法結構:

( XM )^d = X^d *M^d mod n

前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵
--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有
兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體
任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不
對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way HashFunction
對文檔作HASH處理,或同時使用不同的簽名演算法。在中提到了幾種不
同類型的攻擊方法。

RSA的公共模數攻擊。
若系統中共有一個模數,只是不同的人擁有不同的e和d,系統將是危險
的。最普遍的情況是同一信息用不同的公鑰加密,這些公鑰共模而且互
質,那末該信息無需私鑰就可得到恢復。設P為信息明文,兩個加密密鑰
為e1和e2,公共模數是n,則:

C1 = P^e1 mod n

C2 = P^e2 mod n

密碼分析者知道n、e1、e2、C1和C2,就能得到P。

因為e1和e2互質,故用Euclidean演算法能找到r和s,滿足:

r * e1 + s * e2 = 1

假設r為負數,需再用Euclidean演算法計算C1^(-1),則

( C1^(-1) )^(-r) * C2^s = P mod n

另外,還有其它幾種利用公共模數攻擊的方法。總之,如果知道給定模數
的一對e和d,一是有利於攻擊者分解模數,一是有利於攻擊者計算出其它
成對的e』和d』,而無需分解模數。解決辦法只有一個,那就是不要共享
模數n。

RSA的小指數攻擊。 有一種提高
RSA速度的建議是使公鑰e取較小的值,這樣會使加密變得易於實現,速度
有所提高。但這樣作是不安全的,對付辦法就是e和d都取較大的值。

RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。
RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各
種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難
度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性
能如何,而且密碼學界多數人士傾向於因子分解不是NPC問題。

RSA的缺點主要有:
A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次
一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits
以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;
且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。
目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長
的密鑰,其他實體使用1024比特的密鑰。

閱讀全文

與rsa加密解密轉換證明相關的資料

熱點內容
centos命令窗口 瀏覽:596
編譯器有幾個好用的 瀏覽:500
資料庫和網站如何搭載伺服器 瀏覽:154
網路流理論演算法與應用 瀏覽:795
java和matlab 瀏覽:388
釘釘蘋果怎麼下app軟體 瀏覽:832
php網站驗證碼不顯示 瀏覽:859
鋁膜構造柱要設置加密區嗎 瀏覽:344
考駕照怎麼找伺服器 瀏覽:884
阿里雲伺服器如何更換地區 瀏覽:972
手機app調音器怎麼調古箏 瀏覽:503
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:19
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:275
冒險島什麼伺服器好玩 瀏覽:543
如何在伺服器上做性能測試 瀏覽:794