加密算法解析六:RSA

摘要

前面已经讲了对称加密,但它们会遇到一个问题,密钥一旦暴露,密文就不安全了。因此出现了非对称加密算法,加密密钥与解密密钥不一致,其中一个密钥公开暴露也无所谓。一般是加密密钥为公钥,解密密钥为私钥。RSA算法的主要由三个人发明的,因此RSA分别是他们的姓氏首字母组合而成。

RSA的加密过程可以用公式:密文= mod N 来表示,即密文是明文的E次方再对N求模的结果,其中E和N就是RSA加密的公钥。

RSA的解密过程可以用公式:明文= mod N 来表示,即明文是密文的D次方再对N求模的结果,其中D和N就是RSA解密的私钥,解密N与加密的N是同一个。

所以密钥对(公钥和私钥)的关键就是 E、D、N的确定,它们确定了,公钥和私钥也就确定了。

步骤

该算法步骤主体就是求数学数字的过程,其加密解密步骤简洁但计算量大,不需要一堆的按位置换或分组置换,也不需要做异或运算之类的,总体步骤是如下图所示:

1、求N:p和q不能太小也不能太大,太小容易被破译,太大计算时间长,假如用伪随机数生成512bit的p和q,它们相当于155位的十进制数字。生成p和q后,它们的乘积就是N,即N=p×q (p和q互为质数)。

2、求L:这个L是RSA算法过程中的一个中间数,在加密和解密都不出现,只出现在生产密钥对的过程中,L为(p-1)和(q-1)的最小公倍数。用最小公倍数lcm(X,Y)表达式,则为 L=lcm(p-1,q-1)。

3、求E:E是一个比1大,比L小的数。E和L的最大公约数必须为1。用最大公约数gcd(X,Y)表示X和Y的最大公约数,则E需要满足: 1<E<L ,gcd(E,L)=1。要找出1,还是要用伪随机数生成器,在1<E<L范围内生成E的候选数,再判断gcd(E,L)=1,随机的候选数符合条件则为E。

4、求D:D由E计算得出,D、E、L之间需要满足以下关系:1<D<L,E×D mod L =1。

密钥对生成步骤整理如下:

当然,为什么能用E和N组成的公钥加密再用D和N组成的私钥能解密,这涉及了一系列数学证明,目前就略过。

这里实际举例求密钥对,比如 p=5,q=11,N=5×11=55,L=lcm(4,10)=20,而gcd(E,20)=1的数有很多,比如E可以等于3,5,7,11...,这里取E=7,而根据 7×D mod 20 = 1可求得D=3。即公钥(E,N)=(7,55),私钥(D,N)=(3,55)。

5、加密:注意加密的明文必须是小于N的数(因为加密解密都要mod N,而mod N的结果必定小于N,因此明文若大于N,则解密后无法得到正确的明文),密文= mod N 就可以将明文得到密文,假设明文是12,则密文= mod 55 = 23

6、解密:解密为:明文= mod N,将上面数据带入得 明文= mod 55 = 12,成功解密出明文。

安全性探究

由上可知,公钥(E,N)知道后,只需要求出D就可以知道私钥并解密了,但D由E和lcm(p-1,q-1)得来,因此,求得D的关键就是p和q。而当质数p和q很大时,它们的乘积N是很难因式分解出p和q的,这是个公认的数学难题,所以目前RSA还是安全的。

优缺点

优点:安全性高

缺点:对明文长度限制较大,加密解密计算量大速度慢

使用场景

既可用于签名,也可以用来加密。比如CA证书,发证方使用私钥加密,接收方使用证书和公钥解密验签。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间在手上,需要抓住

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值