RSA是(Rivest Shamir and Adleman)的縮寫,Ron Rivest, AdiShamir 和Leonard Adleman這仨哥們挺NB的,20多年前創造了這個算法,現在也已經廣泛使用了。
這是一種公鑰的加密算法,加密和解密是互逆的。如果用公鑰加密,私鑰解密,可實現保密通信;如果用私鑰加密,公鑰解密,可實現數字簽名。下面說一下算法:
1、首先選擇兩個大素數p和q
都要大於10^100,因爲小素數很容分解
2、令n=p*q和z=(p-1)*(q-1)
這部沒什麼可解釋的
3、選擇d,要求d與z互質。
只要是互質數都行
4、選擇e,要求e*d=1 (mod z)
一說這個mod就煩人了,這裏的mod的意思是數學符號,並非編程的mod,好比a=b (mod c),意思是a和b除以c後,餘數相同。
5、明文P被分爲k位的塊,k要滿足2^k<n的最大整數,於是0<=p<n。
這不沒什麼可說的。
下面是加密和解密過程,先說公鑰加密,私鑰解密的過程:
1、公鑰加密用到e,n這兩個數。C=P^e (mod n)
C是加密後的密文,P是明文,e和n就是算出來的數字了,但是這裏的mod是電腦編程裏的運算符,意思是取餘數。
解密用到d,n,P=C^d (mod n)
這樣明文P就出來了。
2、私鑰用到d,n這兩個數。C=P^d (mod n)
解密用到e,n這兩個數。P=C^e (mod n)
可以代兩個簡單的2位素數來試試,不過你會發現,p和q很容易就被推算出來了,所以爲什麼說要大素數的原因就在這裏。因爲安全性是基於大素數分解的困難性,如果***者要分解200位的數,需要40億年;500位的數,需要10^25年。這就是爲什麼RSA的重大缺陷是無法從理論上把握它的保密性能如何。