网站首页 > 技术文章 正文
什么是RSA
前面文章我们讲了AES算法,AES算法是一种是对称加密算法,本文我们来介绍一个十分常用的非对称加密算法RSA。
非对称加密算法也叫公钥密码算法,通过生成的公私钥来对明文密文进行加密解密。 RSA的名字是由它的三个开发者Ron Rivest, Adi Shamir和 Leonard Adleman的首字母而来的。
RSA公司在1983年为RSA算法申请了专利。
RSA的加密
RSA的加密可以用下面的公式来表示:
密文=明文^E\ mod\ N密文=明文E mod N
通过公式我们可以知道RSA的密文是通过明文的E次方再对N进行mod运算得到的。这个加密过程只用到了阶乘和取模运算,可以算是非常简单明了了。
简洁的才是最好的,这可能也是RSA算法这么通用的原因吧。
如果知道了E和N,那么就可以得到密文,所以我们把E和N的组合称为公钥,可以这样表示 公钥{E,N}。
如何选择E和N是一个复杂的数学过程,我们会在后面讲到。
RSA的解密
先看一下RSA解密的公式:
明文\ =\ 密文^D\ mod\ N明文 = 密文D mod N
通过公式可以看到,明文是通过密文的D次方,再和N取模得到的。这里的N和加密的N是同一个数字。
D和N的组合表示为私钥{D,N}。
N,E,D的生成
知道了RSA的加密和解密原理之后,接下来我们就要探讨一下加密和解密过程中的N,E,D是怎么生成的。
生成过程如下:
1. 生成N
生成N的公式如下:
N=p*qN=p*q
p和q是两个很大的质数,太小的话容易被破译,太大的话会影响计算速度。通常p和q的大小为1024比特。这两个数是通过伪随机数生成器生成的。伪随机数生成器不能直接生成质数,它是通过不断的重试得到的。
2. 求L
L是一个中间数,它和p,q一样,不会出现在RSA的加密和解密过程。
L的计算公式如下:
L=lcm(p-1, q-1)L=lcm(p-1,q-1)
L是p-1和q-1的最小公倍数
3. 求E
E就是用来加密的公钥了,E是一个比1大,比L小的数。并且E和L必须互质。只有E和L互质才能计算出D值。
1< E1<E
gcd(E,L)=1gcd(E,L)=1
这里E也是通过伪随机数生成器来生成的。
找到了E和N,我们的公钥就生成了。
4. 求D
计算D的公式如下:
1<D<E1<D<E
E*D\ mod\ L=1E*D mod L=1
破解RSA
如果想破解RSA, 对于密码破解者来说,他知道了公钥{E,N}, 知道了密文,根据公式:
密文=明文^E\ mod\ N密文=明文E mod N
有没有可能直接通过已知的三个变量,求出未知变量明文呢?
这个求解其实是一个离散对数的问题。目前还没有发现求离散对数的高效的方法。可以说是非常困难的。
那么有没有可能通够暴力破解来得出密钥中的D呢?
目前RSA算法中p和q的长度一般为1024比特以上,生成的N的长度为2048比特以上,E和D的长度和N差不多,如果要暴力破解2048比特的D是非常困难的。
由公式:
E*D\ mod\ L=1E*D mod L=1
可知,如果破解者知道了L的值,那么就可以轻易的求出D。而L是通过p和q计算出来的,所以p和q一定要保密,否则跟密码泄露是一样的。
因为 N= p * q , 而p和q都是质数, N又是已知的,那么我们可不可以通过质因数分解来得到 p和q呢?
目前来说,还没有有效的对大整数进行质因素分解的高效算法,所以目前来说RSA算法还是很安全的,但是一旦有这样的算法出现,那么RSA将会很容易被攻破。
所以官方推荐:1024比特的RSA算法不应该被用于新的用途。2048比特的RSA算法可以用到2030年,4096比特的算法可以用到2031年。
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问:flydean的博客 flydean.com
猜你喜欢
- 2025-07-01 Java 如何加载带密码的 PCKS8 PEM 私钥
- 2025-07-01 犯罪啊 2.8万台路由器居然共用一把RSA密钥
- 2025-07-01 HTTPS全站加密时代 网宿推证书优选方案
- 2025-07-01 如何在 Windows 11 或 10 上使用 Winget 安装 OpenSSH
- 2025-07-01 网络篇:朋友面试之https认证加密过程
- 2025-07-01 如何安全管理SSH密钥以防止服务器被入侵
- 2025-07-01 在 Windows 10 上实现免密码 SSH 登录
- 2025-07-01 HTTPS的加密过程是怎样的?(https加密和解密的过程)
- 2025-07-01 Linux系统实现SSH安全免密登录的设置与管理
- 2025-07-01 Burpsuit插件开发之RSA加解密(burpsuite安装插件)
你 发表评论:
欢迎- 584℃几个Oracle空值处理函数 oracle处理null值的函数
- 578℃Oracle分析函数之Lag和Lead()使用
- 564℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 563℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 558℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 551℃【数据统计分析】详解Oracle分组函数之CUBE
- 538℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 532℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)