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

什么是RSA加密

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

數(shù)字簽名 && 數(shù)字證書

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

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

CA證書的生成過程如下:


CA機構頒發(fā)的數(shù)字證書

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


加密和解密

歐拉函數(shù)

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

euler函數(shù)

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

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

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

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

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

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

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

模反元素

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

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

RSA算法原理

1、隨機選擇兩個質數(shù)并計算乘積

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

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

2、計算n的歐拉函數(shù)φ(n)。

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

3、隨機選擇一個整數(shù)e,條件是1< e < φ(n),且e與φ(n) 互質,即1<e<3120

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

4、計算e對于φ(n)的模反元素d

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

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

5、生成結果

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

為什么無法破解

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

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

人類已經分解的最大整數(shù)是:


分解質因數(shù)

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

網上有個段子:

破解 HTTPS 的三種方法

RSA的加密和解密過程

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

m^e ≡ c (mod n)

解密過程如下:

c^d ≡ m (mod n)

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

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

  • 分段加密

  • 使用對稱加密加密原文,使用RSA加密對稱加密中使用的秘鑰

對稱加密和非對稱加密的區(qū)別和聯(lián)系

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容