数据加密

由于许多数据存在隐私性,秘密性,那么自然对数据进行加密是防止信息泄露的有效手段,尤其是对于非法获取数据的攻击者。包括古典密码学,我们知道从很久开始人们就对数据进行加密处理。
对于对称密码体制譬如DES加密算法,其实和许多古典密码本质上是相同的,由于加密和解密采用相同的密钥,加密数据的安全性就得不到保证,如果需要加密传输数据的非常多时,密钥的管理和分发就会非常复杂麻烦

公开密钥密码体制的安全逻辑

得益于数学,非对称加密方式最大的改变就是加密和解密所用的密钥不再相同,加密密钥被称为公钥,解密密钥被称为私钥。公钥的私密性相对与私钥就显得不那么重要了,具体应用过程可以如下做简单总结:
1.假设a与服务器进行联系,服务器会自己生成一对公钥和私钥,公钥用来加密所发的信息,私钥用来解密被公钥加密的密文
2.服务器会把公钥传给a,a用公钥把自己的消息进行加密,一旦加密,a自己也解不开了,因为只有私钥可以解,而私钥只有服务器才有

3.a把加密的消息传给服务器,服务器用私钥解密,就完成了一次对话

可能这时候会有疑问,如果服务器要传给给a消息,a不能解密怎么办呢,很简单:
4.a只需要随便生成一个很普通常规的密钥用来进行加密解密,并把这个密钥通过服务器的公钥加密发送给服务器
5.服务器给a发送消息时用a的密钥进行加密就可以了

RSA算法

rsa是现在应用十分广泛的非对称加密算法,下面简单分析介绍一下:
1.随机找出两个质数P,Q,越大越好,并计算其公共模数N

2.计算关于N的欧拉函数φ(n)

φ(n) 表示在小于等于 n 的正整数之中,与 n 构成互质关系的数的个数
3.计算公钥E,E的取值必须是整数,E 和 φ(N) 必须是互质数

4.计算私钥D

找到D,实质就是对上面的二元一次方程求解,利用扩展欧几里得算法求解,算出一组整数解(D,Y),取D为私钥
5.密钥对已经生成,就可以对密文进行加密,加密算法如下

6.解密过程

RSA的可靠性

通过上面的算法,我们知道这其实是个数学问题,那么问题在于有没有可能在已知(N,E)的情况下,推导出D;
其实不难发现,想要推导出D,我们需要知道P,Q,那么这就是对N进行因数分解的问题了;
如果N很小,我们几乎都可以轻松分解,但对于大整数的因数分解,这就是很繁琐的数学问题,只能通过暴力破解尝试分解,而暴力破解需要以时间为代价,对于分解很大的N,破解可能需要数十年之久,但事实上密钥对会按时更换,即使花很久破解了一对密钥,而这对密钥早已没有意义了;
对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠,假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解,只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。
当然,如果是量子计算机,RSA的破解就十分简单了,事实上量子计算机可能会导致现在的常用加密方式变得毫无意义,但是俗话说要用魔法打败魔法,新的量子加密技术也在被提出,不过这也是后话了