聊聊对称/非对称加密在HTTPS中的应用

目前经常使用的加密算法主要分红三类:git

  • 对称加密算法
  • 非对称加密算法
  • 消息摘要算法

在互联网中,信息防御主要涉及两个方面:信息窃取和信息篡改。对称/非对称加密算法可以避免信息窃取,而消息摘要算法可以避免信息篡改。算法

对称加密算法

发送方和接收方须要持有同一把密钥,发送消息和接收消息均使用该密钥。浏览器

相对于非对称加密,对称加密具备更高的加解密速度,但双方都须要事先知道密钥,密钥在传输过程当中可能会被窃取,所以安全性没有非对称加密高。安全

非对称加密算法

接收方在发送消息前须要事先生成公钥和私钥,而后将公钥发送给发送方。发送放收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。服务器

在这个过程当中,公钥负责加密,私钥负责解密,数据在传输过程当中即便被截获,攻击者因为没有私钥,所以也没法破解。性能

非对称加密算法的加解密速度低于对称加密算法,可是安全性更高。加密

消息摘要算法

消息摘要算法能够验证信息是否被篡改。3d

在数据发送前,首先使用消息摘要算法生成该数据的签名,而后签名和数据一同发送给接收者。接收者收到数据后,对收到的数据采用消息摘要算法得到签名,最后比较签名是否一致,以此来判断数据在传输过程当中是否发生修改。cdn

不管输入的消息有多长,计算出来的消息摘要的长度老是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体能够产生192比特位和256比特位的消息摘要。通常认为,摘要的最终输出越长,该摘要算法就越安全。变长输入,定长输出。server

只要输入的消息不一样,对其进行摘要之后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具备的性质:输入改变了,输出也就改变了;两条类似的消息的摘要确不相近,甚至会截然不同。从理论上来讲,无论使用什么样的摘要算法,必然存在2个不一样的消息,对应一样的摘要。由于输入是一个无穷集合,而输出是一个有限集合,因此从数学上来讲,必然存在多对一的关系。可是实际上,很难或者说根本不可能人为的造出具备一样摘要的2个不一样消息。因此咱们选择摘要算法的时候,要注意其安全性。好比如今MD5就是不安全的,已经被国内王小云破解。

消息摘要是单向、不可逆的。只能进行正向的信息摘要,而没法从摘要中恢复出任何的原始消息,甚至根本就找不到任何与原信息相关的信息。固然,能够采用强力攻击的方法,即尝试每个可能的信息,计算其摘要,看看是否与已有的摘要相同,若是这样作,最终确定会恢复出摘要的消息。但实际上,要获得的信息多是无穷个消息之一,因此这种强力攻击几乎是无效的。

消息摘要算法来源于CRC算法,最初CRC算法是用来验证数据完整性的,即咱们常见的奇偶校验码、循环冗余校验,在CRC基础上发展处了MD和SHA量大算法家族,CRC比这些算法都要早,MD算法比SHA算法早,SHA算法是对MD算法的改进。再后来则发展出了能够带有密码的消息摘要算法-MAC算法。

消息摘要算法包括三大类,MD、SHA和MAC算法,MD的分类是按照版本规定的,SHA则是按照适用的消息长度分类的:

  • MD算法: Message Digest Algorithm ,目前主流的是MD5算法,为第五版算法,以前有MD二、MD三、MD4算法。
  • SHA算法:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
  • MAC算法:带有密码信息的信息摘要算法,是对MD和SHA算法的演变和改进,包括HmacMD二、HmacMD四、HmacMD五、HmacSHA-256等。

对称/非对称加密算法在HTTPS协议中的应用

HTTPS实际上是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会经过TLS进行加密,因此传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。

title

  1. 客户端发起HTTPS请求

    这个没什么好说的,就是用户在浏览器里输入一个https网址,而后链接到server的443端口。

  2. 服务端的配置

    采用HTTPS协议的服务器必需要有一套数字证书,能够本身制做,也能够向组织申请。区别就是本身颁发的证书须要客户端验证经过,才能够继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。若是对公钥和私钥不太理解,能够想象成一把钥匙和一个锁头,只是全世界只有你一我的有这把钥匙,你能够把锁头给别人,别人能够用这个锁把重要的东西锁起来,而后发给你,由于只有你一我的有这把钥匙,因此只有你才能看到被这把锁锁起来的东西。

  3. 传送证书

    这个证书其实就是公钥,只是包含了不少信息,如证书的颁发机构,过时时间等等。

  4. 客户端解析证书

    这部分工做是有客户端的TLS来完成的,首先会验证公钥是否有效,好比颁发机构,过时时间等等,若是发现异常,则会弹出一个警告框,提示证书存在问题。若是证书没有问题,那么就生成一个随即值。而后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,否则看不到被锁住的内容。

  5. 传送加密信息

    这部分传送的是用证书加密后的随机值,目的就是让服务端获得这个随机值,之后客户端和服务端的通讯就能够经过这个随机值来进行加密解密了。

  6. 服务段解密信息

    服务端用私钥解密后,获得了客户端传过来的随机值(私钥),而后把内容经过该值进行对称加密。所谓对称加密就是,将信息和私钥经过某种算法混合在一块儿,这样除非知道私钥,否则没法获取内容,而正好客户端和服务端都知道这个私钥,因此只要加密算法够彪悍,私钥够复杂,数据就够安全。

  7. 传输加密后的信息

    这部分信息是服务段用私钥加密后的信息,能够在客户端被还原

  8. 客户端解密信息

    客户端用以前生成的私钥解密服务段传过来的信息,因而获取了解密后的内容。整个过程第三方即便监听到了数据,也一筹莫展。

非对称加密算法的性能是很是低的,缘由在于寻找大素数、大数计算、数据分割须要耗费不少的CPU周期,因此通常的HTTPS链接只在第一次握手时使用非对称加密,经过握手交换对称加密密钥,在以后的通讯走对称加密。

相关文章
相关标签/搜索