非对称加密之RSA

公钥,私钥产生,一共和6个数有关:

p, q , n , φ(n) , e , d

下面详细说下这几个数的含义,与产生步骤


1. 随机产生两个不相等的质数 p , q

61 和 53

**2. n 为p q 的乘积 **

n = 61*53 = 3233

*3. 计算欧拉函数 φ(n) = (p-1)(q-1) **

  φ(n) = 60*52 = 3210

4. 随机选择一个整数 e, 条件是1< e < φ(n),且e与φ(n) 互质 (实际上,经常选择65537)

选择 17, e=17

** 5. 计算 e 对于φ(n) 的模反元素 d**

    ed ≡ 1 (mod φ(n))
    试子可以推导为:
    ed - 1 = kφ(n)  >>>  ed + φ(n)k = 1 

    >>  e 和 φ(n) 都是知道的 >> 17d + 3210k = 1
    根据 ** 扩展欧几里得算法 ** 知道一定有整数解 d 和 k 
    有(2753,-15),d= 2753

**6. 将n和e封装成公钥,n和d封装成私钥 **

各自组成:
私钥  n = 3323 和 d = 2753
公钥  n = 3323 和 e =17

这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。

那么,有无可能在已知n和e的情况下,推导出d?

    (1)ed ≡ 1 (mod φ(n))。 只有知道e和φ(n),才能算出d。
    (2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
    (3)n = pq。只有将n因数分解,才能算出p和q。

** 可以推出,只有将 n 质因数分解算出 p和q,才能得到d , 破解私钥 **

但是大整数的因数分解是非常困难的。到现在,除了暴力破解没有什么特别有效的方法。所以如果,你的n 取得特别大,密钥的长度足够长,就无法破解了。
实际应用中,密钥的长度一般是1024位,安全要求高的情况是2048位(目前人类的能分解的最大整数十 2^768),所以1024是相当安全的。


怎么加密解密

加密,公钥(n,e),对面信息m数字(字符串可以是编码),m要小于n
m^e ≡ c (mod n)
代入公钥(3323,17)
65^17≡ 2790 (mod 3233)
c= 2790,就是加密之后的数字

解密,私钥(n,d)来解密
c^d ≡ m (mod n)
2790^2753 ≡ 65 (mod 3233)
解密出了 m = 65

其实我还要好多细节不懂,数学基础太弱了.......

你可能感兴趣的:(非对称加密之RSA)