公钥加密算法-RSA

RSA算法

RSA算法是由它的三位开发者,即 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏的首字母组成的 (Rivest-Shamir-Adleman)。
RSA 可以被用于公钥加密、数字签名和密钥交换。



一、简介

RSA算法是非对称加密算法。了解RSA算法之前需要了解素数的概念。
素数:只能被1和本身整除的数。如:13,19…
RSA算法数学难题:两个大素数相乘容易,素数相乘的乘积分解比较难。
RSA算法中间涉及到数论的一些知识。RSA算法的流程理解起来是比较简单的。实际的难度在于RSA选择和生成的私钥与公钥。


二、RSA算法流程

  1. 选择两个大素数,p、q(这里的p和q不能太小,太小容易被破解,太大计算时间比较长)
  2. n=p*q。Φ(n) = (p-1)(q-1)(这里的Φ(n)是欧拉函数:Φ(n)的值为小于n且与n互质的个数)
  3. 选择一个公钥e(1<e<Φ(n)),e不是p-1与q-1的因子。gcd(e,(p-1)(q-1))=1(e与Φ(n)互素)
  4. 私钥d:(d*e)mod(p-1)(q-1)=1
  5. 加密(密文:c,明文:p):c=p^e modn。公钥(n,e)
  6. 解密:p=c^dmodn。私钥(p,q,d)

1、 加密或者验签过程

明文先转换为比特串分组,使每个分组对应的十进制数小于n,即分组长度小于log2n,然后对每个明文分组mi 作加密运算,具体过程如下。

  1. 获得接收公钥(e,n)。
  2. 把消息M分组长度为(L<log2n)的消息组M=m1m2m3…mt。
  3. 使用加密算法ci=mi^e mod n(l≤i≤t),计算出密文c=c1c2…ct

公钥指数e的长度比较短,因此可以提高解密和验签的速度

2、解密或者签名过程

  1. 将密文c按长度L分组得c=c1 c2…ct。
  2. 使用私钥d和解密算法mi=ci^d mod n(l≤i≤t)计算mi。
  3. 得明文消息M=m1m2m3…mt。

RSA算法加解密
RSA算法流程图


三、RSA算法密钥长度

RSA密钥长度有:1024、2048、3072、7680、15360(单位都是bit)。1024位的密钥已经不安全了。密钥长度越长安全性则越高。RSA算法推荐的密钥长度为2048位。

四、RSA的数学难题

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积(即上面的n是公开的)公开作为加密密钥。RSA的安全性依赖于大数分解。

参考文章如下: 翱游公钥密码算法

猜你喜欢

转载自blog.csdn.net/qq_43589852/article/details/127356933