前言:
非对称加密指的是加密和解密的秘钥不同,也就是常见的公钥密码体制,其代表加密算法就RSA。有人可能会说传统的对称加密不是挺好的吗,一个秘钥就可搞定加密和解密。
这就需要说公钥密码体制优点了,
- 既保证了通信的机密性,又保证了真实性。假设双方 A 和 B 进行通信,机密性指的是将可以确定接收方是事先设定的,但是发送方不能确定。真实性指的是可以确定发送方的身份是符合事前确定的,但是不能确定接收方的身份。
- 加密和解密是分开的,并且私钥加密的密文可以用公钥进行解密,常见的可以用作数字签名。
1、RSA 算法
首先RSA是典型的的非对称加密算法,通过使用该算法生成一个公钥和一个私钥,用户留着公钥和私钥,将公钥发送给对方。
RSA之所以这么的流行以及安全,归因于RSA算法是基于大数因子分解问题,很难对一个大数进行因式分解。例如,p和q是两个超级大的素数,如果对 n 进行逆向分解出素数 p 和 q,以目前的电脑性能是结算不出来的,
加密函数和解密函数不难,重点在于生成两个大素数 p 和 q,,以及证明公式。
2、 RSA加密
1)RSA明文加密:,其中 n 和 e 是公钥,C是密文,M是明文。
3、 RSA解密
2)RSA密文解密:,将上1)式子带入有:。其中 n 和 d 是私钥。C是密文,M是解密后的明文。
4、生成公钥和私钥
1)首先设定两个很大的素数 p 和 q,后 ,设明文M=19
例如:n = 7× 17 = 119,然后转成二进制为1110111,总共是7位,一般是要1024位才安全。
2)计算欧拉函数 ,用来计算后面的d。这里。
3)选定e,e必须满足,且 。这里可以选定 e=5。
4)计算d,满足公式 ,其中 d 是 e 的乘法逆元。
然后可以计算出,这个数比较小,试出来d=77。
5)就得出公钥(n, e)和私钥(n, d),然后将数字按照标准的 RSA 秘钥样式ASN.1格式,将数字按照语法转成字符串,具体怎么变得,后补。
6)计算密文:
7)解密密文:
总结:
RSA算法并不难,相对于非对称加密的代换和置换,是真的很简洁。之所以RSA这么安全就在于大数 n 不容易分解。后面用到的数字签名都是用 RSA 搞定的。
参考文章: