既信安导论学习RSA之后,这些东西被丢弃了很久,还是码一下,方便以后找。
1.前述
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA算法以他们三人姓氏开头字母命名。
RSA是目前最有影响力的公钥加密算法,到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要秘钥长度足够长,用RSA加密的信息实际上是不能被解破的。ISO推荐它为公钥数据加密标准。
RSA算法基于简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
RSA是"非对称加密算法",非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公钥与私钥是配对的,用公钥加密的数据只有配对的私钥才能解密,反之亦然。因加解密使用两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称算法的在应用的过程如下,假设发送方向接收方发送消息(明文):
1.接收方生成公钥和私钥,公钥公开,私钥保留;
2.发送方将要发送的消息采用公钥加密,得到密文,然后将密文发送给接收方;
3.接收方收到密文后,用自己的私钥进行解密,获得明文。 可以看出,非对称加密解决了对称加密密钥传输的问题。
2.欧拉定理
如果两个正整数a和n互质,则n的欧拉函数φ(n)可使下面等式成立
aφ(n)≡1(mod n)
上式表示,a的φ(n)次方被n除的余数为1,或者叙述为,a的φ(n)次方减去1后可以被n整除。注意,φ(n)是n的欧拉函数。
3.模反元素(逆元)
如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。这时b被称为a的模反元素。公式如下:
ab≡1(mod n)
4.密钥生成
密钥生成的步骤如下:
1).随机选择两个不相等的质数p和q;
2).计算p和q的乘积n(将n转换为二进制后,二进制的长度就是密钥的长度,实际应用中一般选择1024位、2048位);
3).计算n的欧拉函数φ(n);
4).随机选择一个整数e,其中φ(n)>e>1,且e与φ(n)互质(实际应用中e一般选为65537);
5).计算e对于φ(n)的模反元素d;
6).将n和e封装成公钥(n,e),n和d封装成私钥(n,d)。
RSA算法可归纳如下:
选择两个素数p和q,计算n=p*q,φ(n)=(p-1)(q-1)
选择整数e,使gcd(φ(n), e)=1,1<e<φ(n) (gcd(φ(n), e)=1 表示最大公约数为1)
计算逆元d=e^-1modφ(n)得到公钥KU={e, n},私钥={d, n}
5.加密与解密
加密(用公钥KU):明文M<n, 密文:C=m^e mod n
解密(用私钥KR):密文:C, 明文:M=C^d mod n
6.RSA与HTTPS
RSA由于太耗CPU的资源,因此它通常用来加密对称密钥,或者用来数字签名,HTTPS用到RSA有两个地方,一个是客户端验证证书的有效性,另一个是加密pre_master随机值,通过服务器,客户端各产生的随机值再加这一个公钥加密的随机值从而计算出对称密钥
7.代码实现