加密和解密使用的是兩個不同的秘鑰,這種算法叫做非對稱加密。非對稱加密又稱為公鑰加密,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必須成立,所以就有兩種加密方法:
對稱加密存在雖然快速,但是存在致命的缺點就是秘鑰需要傳遞。非對稱加密雖然不需要傳遞秘鑰就可以完成加密和解密,但是其致命缺點是速度不夠快,不能用於高頻率,高容量的加密場景。所以才有了兩者的互補關系,在傳遞對稱加密的秘鑰時采用非對稱加密,完成秘鑰傳送之後采用對稱加密,如此就可以完美互補。