导读
昨天在面试广联达提前批时,面试题中有这么一道选择题,涉及到RSA算法,这个知识点有点模糊,因此在这里做个记录。
RSA算法
RSA算法是目前理论和实际应用中最为成熟的和完善的公钥密码体制。RSA用来解决对称密码的密钥分发问题。还可以用来进行数字签名来保证信息的否定与抵赖,利用数字签名较容易发现攻击者对信息的非法篡改以保证信息的完整性。
RSA的安全性依赖于大整数的因子分解的困难性,为了满足信息安全强度的需求,密钥的位数都比较多(521位甚至更高),导致幂模运算的运算量极大,成为提高RSA算法加解密速度的瓶颈。
RSA算法的加密与解密
RSA算法产生密钥的过程:
1.系统产生两个大素数p, q**(保密)**
2.计算n=pq**(公开),欧拉函数Φ(n)=(p-1)(q-1)(保密)**
3.随机选择满足gcd(e,Φ(n))=1的e作为公钥(公开),加密密钥就是(e,n)
4.计算满足ed=1(mod Φ(n))的d作为私钥(保密),解密密钥即为(d,n)
- RSA的加解密过程: 首先将明文分组并数字化,每个数字化分组明文的长度不大于logn,然后对每个明文分组m依次进行加解密运算。
- 1.加密运算:使用公钥e和要加密的明文m进行c=me(mod n)运算即得密文
- 2.解密运算:使用私钥d和要加密的明文m进行c=md(mod n)运算即得明文
RSA 算法的缺陷
使用 RSA 密钥协商算法的最大问题是不支持前向保密。
因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密的,服务端收到到后,会用私钥解密得到随机数。所以一旦服务端的私钥泄漏了,过去被第三方截获的所有 TLS 通讯密文都会被破解。