1977 年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼 (Leonard Adleman)一起提出,因此名爲 RSA 算法。
RSA 算法中公私鑰的產生
1 | 隨機選擇兩個不相等的質數 p 和 q | p = 11, q = 29 |
2 | 計算 p 和 q 的乘積 n(明文小於 n) | n = p× q = 11 * 29 = 319 |
3 | 計算 n 的歐拉函數 v=φ(n) | 歐拉函數是小於或等於n的正整數中與n互質的數的數目。所謂的互質,就是最大公約數爲1。
v=φ(319)=(11-1)(29-1) = 280 |
4 | 隨機選擇一個整數 k
|
例子選擇 k = 187 |
5 | 計算 k 對於 v 的模反元素 d | (d × k)%v = 1。也就是在模 v 中的 d ≡ k-1 (mod v)
例子結果爲3 (3*187)% 280 = 561%280 = 1 |
6 | 公鑰:(k,n) | (187,319) |
7 | 私鑰:(d,n) | (3,319) |
RSA 算法加解密流程
1 | 加密 c ≡ m^k (mod n),m 爲明文,c爲密文 | 明文123。
|
2 | 解密 m ≡ c^d (mod n) | 以私鑰加密,用公鑰解密;以公鑰加密,用私鑰解密
|
證明
條件和相關的定理
推導
網上不少資料在推導中,只是給出了第一種情況,即明文m和n=qp互質的情況,如果q和p的數值遠大於m是沒有問題,但是不見得這個條件成立,而且也無需這個條件。第二種情況,對於我這種數學渣渣來講,是很精巧的計算,參考自 https://wenku.baidu.com/view/5200777565ce05087732133e.html