浅谈加密算法(一)RSA
什么是RSA
了解RSA之前我们要先了解对称式加密算法和非对称式加密算法
对称式加密算法指的是用于加密的密钥和解密的密钥是同一个,非对称式加密算法就是加密的密钥和解密的密钥并非同一个(分为公钥和私钥)
而RSA 是一种非常优秀的非对称式的加密算法。
RSA加密算法的优势
RSA算法主要是用来数据加密和数字签名。
RSA的神奇之处在于它有一个公钥和一个私钥,公钥可以公开,任何人都可以用,私钥只能你自己用,必须保护好。公钥加密的信息只能用私钥解密(公钥也解不开,就是这么神奇)。
这根我们平常理解的加密不一样。加密相当于上锁,解密相当于开锁。日常生活中上锁和开锁用的是同一把钥匙(家家的锁都是这样的),没有问题,但是在上网时这样做是有问题的。
有什么问题呢?
假如说你登录网上银行给朋友转账,不幸的是你被黑客盯上了。当你在网银上填写朋友的账号和转账金额后,账号和金额会通过互联网传给银行。当然,这中间需要经过很多路由器(比如你家的路由器)。黑客完全可以截获你发给银行的信息(太容易了),然后把你转账的目标账号修改成他的账号,这样钱就到他那儿了,太危险了。
为了避免上面的情况发生,你填写的目标账号和转账金额都是加密后传给银行(虽然你没有看到,但是浏览器默默帮你加密了),这下黑客没办法了吧?还是有办法的!
你登录网银的时候,银行会把秘钥传给你的浏览器,黑客当然也能截获秘钥。刚才我们说了,加密和解密用同一个秘钥(钥匙),黑客截获了你和银行间的秘钥,就能解开加密的数据,还是可以把你转账的目标账号换成他的账号。这下郁闷了:还能不能开心的用网银转账了?难道非得亲自去银行柜台办理?
先看看问题的根源:由于黑客能截获你和银行之间的所有信息,所以无论发送的是秘钥还是账号,统统都逃不过黑客的眼睛。这时候加密形同虚设了。那怎么才能安全的转账呢?
现在该RSA算法展示真正的技术了!
假设银行放弃了上面的加密方式,转而使用RSA算法。当你登录网银的时候,银行先把它的公钥发给你的浏览器(公钥可以给任何人看,包括黑客),当你输入转账金额和账号后,浏览器先用银行的公钥进行加密,然后发给银行。注意,公钥加密的数据只能用私钥解密,而私钥在银行手里!这时黑客截获了加密数据也无法解密,此时黑客的内心是痛苦的:我没有银行的私钥啊!这样我们就安全的完成了网银转账。
这就是RSA算法的神奇之处。RSA算法实现了在不安全信道上进行数据的安全传输。
RSA算法不仅可以用于银行系统,还可以用于个人间的数据安全分享。比如说你和朋友想分享一些文件,但是你俩的网络被黑客监控了。这时你可以和朋友交换公钥,把要分享的文件先通过他的公钥加密后发给他,黑客由于没有你朋友的私钥而无法解密,只有你朋友能解密。你朋友用同样的方法把他的文件加密分享给你。进一步扩展,任何两个单位/个人之见都可以通过这种方式加密分享数据,而不用担心被黑客解密。
这么看来,RSA算法既神奇又实用!
前些年大起大落的比特币(区块链技术),用的就是公钥密码算法,虽然不是RSA算法,但原理相同。
自从诞生的那一天起,RSA算法就接受来自全球黑客、学者、研究人员的攻击。40多年过去了,事实证明RSA算法很安全,只要你的秘钥够长。RSA秘钥长度通常是1024~4096位。2010年的时候攻破了RSA-768,一些专家认为RSA-1024在不远的未来会被攻破,但没几乎有人认为RS-4096能够在可预见的未来被攻破。
1 | 本段(指 RSA加密算法的优势) 本行以上内容均为转载内容 |
而数字签名即是一方用私钥加密,而收信方可以通过公钥正常解密,以证明对方身份,这种方式也因与生活中签名的作用相似而得名
RSA加密算法的缺点
RSA加密因涉及许多复杂运算,所以比起对称式加密算法还是有一些缺点
- 加解密速度慢
- 不适合大文件加密
- 加密后数据长度发生变化
实现方法
终于到了正文部分
前置知识
1.mod 运算
mod又称 模,取余。 顾名思义它是得到余数的运算
例如:
11/3 = 3……2
11 mod 3 = 2
常用规律: (a×b) mod n = [(a mod n) × (b mod n)] mod n
2.欧拉函数
欧拉函数,记作φ(n),表示为从1到n的自然数中与n互质的数的个数
例如:
当N=10时,与10互质的正整数有1,3,7,9,所以φ(10)=4。
当 n = p × q (p, q 为质数) 时
在 1 ~ n 中不与 n 互质的数为 p, q 及它们的倍数
1.在 1 ~ n 中,因为 n = p × q 所以 p 及 p 的倍数有 q 个
2.在 1 ~ n 中,因为 n = p × q 所以 q 及 q 的倍数有 p 个
而 1, 2 中有一个数 p × q 重复, 所以不与 n 互质的数有 p + q - 1 个
所以 φ(n) = n - p - q + 1 = p × q - (p + q) + 1 = (p - 1) × (q - 1)
3.欧拉定理
欧拉定理是指一个关于同余的性质,具体表述为:若n和a为正整数,且互质,则
了解这一切之后我们就可以愉快的开始了
准备工作
设密文为 C , 明文为 M
1.生成p, q两个大质数且p,q大于M 所以 n = p × q > M
2.计算欧拉函数 φ(n) = (p - 1) × (q - 1)
3.计算两个正整数值 e 与 d 使之满足 (e × d) mod φ(n) = 1, 其中 e 为公钥 d 为私钥
加解密方程
加密 C =
解密 M =
证明
∵(e × d) mod φ(n) = 1
∴e × d = t × φ(n) + 1, t∈Z
∴
∴
∵欧拉定理 且 p, q两个大质数不等于M
∴
∴
∵n = p × q > M
∴
证毕
1 | 本段(指 实现方法)参考《每个人都应学点密码学 给秘密加把锁》 王旭正 著 有所改动 |
安全性分析
由上文可知私钥d依赖于φ(n),而目前求出φ(n)最好的方法就是把生成密钥的步骤倒过来,即质因数分解,而质因数分解目前最快的算法时间复杂度为亚指数级,所以目前看来只要大质数p, q足够大, RSA加密都是安全的