一.加密的分类
1.对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
2.非对称加密
需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
二.RSA
1.RSA的由来
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。
2.RSA的加解密公式
加密: 公钥(e,n) 密文 = 明文^e % n
解密: 私钥(d,n) 明文 = 密文^d % n
3.数学知识
素数(质数):除过1和本身,不能被其他数整除的数
互质数:公约数只有1的俩个数
两个质数一定是互质数
一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如5和12
如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和88
1和任意一个自然数是都是互质关系,比如1和100
相邻的两个自然数是互质数,如 15与 16
相邻的两个奇数是互质数 ,如 49与 51
欧拉函数:欧拉函数是小于x的正整数中与x互质的数的数目。
例如:若m、n互质f(mn) = f(m)f(n) = (m-1)(n-1);
欧拉定理:如果俩个正整数a和n互质,则n的欧拉函数F(n)可以让下列式子成立:
a ^ F(n) % n = 1 % n 即
a ^ F(n) % n = 1
模反元素(逆元):根据欧拉定理,如果俩个数互质,那么一定可以找到一个整数b,使得ab-1可以被整除,即ab%n=1。这时,b就叫做a的“模反元素”,或者称为模的逆元
4.RSA密钥产生的过程
- 随机选择俩个不相等的质数p和q
- 计算p和q的乘积n,n=pq
- 计算n的欧拉函数F(n)
- 随机选择一个整数e,1< e <F(n),且e与F(n)互质
- 计算e对于F(n)的模反元素d,使得(de)modF(n) = 1
- 产生公钥(e,n),私钥(d,n)
5.加密和解密
假设A给B发送信息m,m为加密信息,首先要使用公钥(e,n)进行加密。m必须是整数且m必须小于n。设加密后的信息为c
加密:
c=m^e mod n
当B收到A发送的消息后使用私钥(d,n)进行解密
解密
m=c^d mod n
6.RSA加密的安全性
RSA密钥产生的过程中共产生6个值分别为 p,q,n,F(n),e,d。其中只有e,n是公开的,p和q一般会销毁,d不能泄露。
而且由RSA产生密钥的过程可知,只有知道e和F(n)才能求出d,而只有知道p,q才能知道F(n)。
而n=pq 所以只有将n因数分解,才能求出p和q。
但是当p和q是一个大的素数时,从他们的积pq去分解因子p和q这是一个目前还没有解决的数学难题。目前已知被破解的最长的RSA密钥也仅仅是768位,而在RSA算法中一般都采用1024位的数字。因此RSA加密算法时非常安全的。
7.使用场景
网络通讯协议Https
- 浏览器发起链接请求。
- 服务器返回公钥。
- 浏览器产生一个对称加密密钥session key。
- 使用服务器的公钥加密此session key。
- 加密的session key 发送给服务器。
- 服务器通过私钥解密session key, 获取明文密码。
- 浏览器和服务器的通信现在通过session key 进行加密,进行安全通信
ssh登录
- 远程Server收到Client端用户的登录请求,Server把自己的公钥发给用户。
- Client使用这个公钥,将密码进行加密。
- Client将加密的密码发送给Server端。
- 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
- 若验证结果,给Client相应的响应