本篇文章主要介绍在项目中接触到的有关加密公私钥和数据证书以及SSL协议的内容。
加密技术是为了保证双方通信的过程中保证信息的安全性,加密技术分为对称加密算法和非对称加密算法。
对称加密就是加密密钥和解密密钥相同,密钥的含义就是加密的方法。 举例来说,小明和小红约定在考试时交流答案,他们两个规定,摸鼻子代表A,摸眼睛代表B,摸嘴巴代表C,摸眉毛代表D;小红和小明两个定的这一系列规则就是我们所说的密钥。 对称性加密也就是加密过程和解密过程用的是同样的规则,但是这样的规则并不是很安全,如果被第三方知道加密规则,极易对加密内容进行破解。
非对称加密就是对对称加密算法的改进。 为了更加安全的传输数据,我们规定信息发送方和信息接收方分别有一对密钥,若将小红和小明分别当成信息的接收方和信息的发送方,小红手里有自己的公钥和私钥,小明也有自己的公钥和私钥。 其中公钥是由私钥生成的,且生成过程不可逆,即有公钥不能推测出私钥,公钥是公开的,私钥是只存在在自己手里。 用公钥加密的内容只能用对应的私钥解密,用私钥加密的信息,也只能用对应的公钥解密
密钥对加密的规则是:小明在发送信息给小红时,会用小红的公钥对发送的明文(即发送的内容)进行加密,小红拿到加密的信息,用自己的私钥进行解密;在小红给小明回信息的时候,采用小明的公钥对明文进行加密,小明在拿到信息后用自己的私钥解密。
1.如果小明的公钥被被人串改,那小红在给小明发信息的时候,用她以为的小明的公钥进行加密,小明就无法得知小红的信息内容;由于公钥是公开的,每个人都有一个公钥,如何保证某个公钥属于某个人就显得十分重要,于是产生了第三方权威机构CA,CA的主要作用就是证实公钥的归属性。
CA的工作机制:CA(Certificate Authority)电子认证服务,CA是权威的第三方机构,承担公钥体系中,公钥的合法性检验,CA机构颁发的是证书叫数字证书。 如上图所示数字证书包含,公钥拥有者的个人信息,以及个人的私钥,还有就是CA的签名, 其中将个人信息和和公钥通过Hash函数进行计算,将计算的结果用CA机构的私钥加密形成的结果就是CA的数字签名。 数字证书能保证公钥的合法性是原理是,CA私钥加密的Hash后的信息,只能用CA的公钥解开,CA的公钥是确定的,我们在拿到数字证书后,也将个人信息和公钥进行Hash函数计算,和用CA公钥解开的信息进行对比,只有两者完全相同,这个公钥的合法性才能被确认,Hash函数是不可逆的,只有计算的内容完全一直才能生成同样的计算结果。数字证书很好的保证了公钥的合法性。
数字签名的作用就是为了避免信息的内容被修改。下图是具体的可视化流程。 分别是对消息进行数签签名的过程,和数据签名的验证原理。
仍以小红和小明进行举例,非对称加密的整个流程就是: 小红将要发送给小明的信息,先进行Hash函数计算,称计算结果为Hash1,并对Hash1用自己的私钥加密(数字签名),然后将信息全文和数签之后的内容用小明的公钥加密,其中小明的公钥从CA机构颁发的数字证书中获取。 当小明拿到加密的信息后,用自己的私钥进行解密,得到明文和数字签名内容,用小红的公钥对数字签名内容进行解密,得到Hash1,小明对得到的明文信息也进行Hash计算,得到Hash2将Hash1与Hash2进行对比,若两者相同,则认为信息未被篡改。下图是简易的流程图。
SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务是提供私密性,信息完整性和身份认证。1994年改版为SSLv2,1995年改版为SSLv3.
TLS(Transport Layer Security)安全传输层协议,)用于在两个通信应用程序之间提供保密性和数据完整性。该标准协议是由IETF于1999年颁布,整体来说TLS非常类似SSLv3,只是对SSLv3做了些增加和修改。
SSL既是在通信时产生安全通道,保护通信信息内容的安全性。重点是在握手阶段产生随机数,利用随机数生成对称密钥,这里的对称密钥仅有通信双方知道,我们可以用该对称密钥进行明文的加密,保护信息的安全性。生成兑成密钥的过程如下。 如上图所示,左边是信息发送方,右边是信息接收方。具体流程解释如下: 1-2.发送方向接受方发送连接请求,产生一个随机数,并将这个随机数发送给接收方; 3.接收方在接收道请求后,返回自己的数字证书,和自己生成的随机数; 4-7.发送方在接收到信息后,对接受方的数字证书进行验证,拿取公钥,并生成随机数,用接收方的公钥加密第三个随机数,将自己的数字证书和加密的随机数发送给接收方,同时将握手过程中生成的三个随机数按照一定的算法生成兑成密钥; 7-8.接收方在接收到证书后进行验证,并对接收到的加密随机数进行解密,同时,按照同样的算法,将三个随机数生成对称密钥; 9-10.在SSL通信中,我们用自己的私钥对信息进行数字签名,然后用对称密钥进行明文和密文的加密, 11-12.接收方在接收到信息后,用对称密钥进行解密,获取信息,用接收方的公钥进行信息验证,完成通信。用对称密钥进行加密是为了加速运算速度,完全使用非对称加密降低运算速度。
参考文章: https://zhuanlan.zhihu.com/p/40020102