相关文章:《数据编码、加密:理解并区分它们的作用》
SSL/TLS协议
HTTPS 可以认为是 HTTP + TLS/SSL,所以我们只需要了解 TLS/SSL 原理即可。
TLS(传输层安全)是更为安全的升级版 SSL。由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL。
在进入原理之前,我们需要了解两个基础概念:数字证书、证书授权中心,以及常用的数据加密方式
- 数字证书(Digital Certificate)是用来证明公钥(非对称密钥算法中用于加密的密钥)所有者身份的。我们人人都可以自己生成一个公钥,但是这个公钥是否能代表是你的,这个认证的过程需要一个权威机构执行,这个机构就是证书授权中心。
- 证书授权中心(Certificate Authority)负责证书颁发。CA 是行业内信得过的组织机构,它具有权威性,由它颁发的证书大家都相信是可靠的。
常见的数据加密方式
1. 对称加密
对称加密算法是指加密和解密使用同一个密钥的加密方式。对称加密算法的实现原理很简单:将原始数据通过一个密钥进行加密,然后再用同样的密钥进行解密即可。由于加密和解密使用同一个密钥,因此对称加密算法的加解密速度非常快,但是密钥的安全性较低。
常见的对称加密算法有DES、3DES、AES等。其中AES算法是目前最为常用的对称加密算法,它使用128位、192位或256位的密钥进行加密和解密。
2. 非对称加密
非对称加密算法是指加密和解密使用不同的密钥的加密方式。非对称加密算法的实现原理比对称加密算法复杂。它使用一对密钥,一个是公钥,另一个是私钥。公钥可以公开,而私钥必须保密。通过公钥加密的数据只能使用私钥进行解密,而通过私钥加密的数据只能使用公钥进行解密。因此,非对称加密算法的安全性非常高。
常见的非对称加密算法有RSA、DSA、ECC等。其中RSA算法是目前最为常用的非对称加密算法。
3. 摘要算法
摘要算法也叫哈希算法,它是一种能够将任意长度的数据转换为固定长度摘要(或散列值)的算法。摘要算法的实现原理是,将原始数据通过哈希函数计算得到摘要值,摘要值的长度一般固定,常见的有MD5、SHA-1、SHA-2等。
摘要算法主要用于验证数据的完整性,比如说数字签名。数字签名是一种利用非对称加密技术和哈希算法来保证数据的完整性和真实性的技术。发送方使用私钥对摘要值进行加密,然后将密文和原始数据一起发送给接收方。接收方使用公钥对密文进行解密,然后计算原始数据的摘要值,对比发送方发送的摘要值是否一致,以此来验证数据的完整性和真实性。
SSL/TLS协议
SSL/TLS协议是一种用于保证数据传输安全的协议。
- 它通过数字证书来验证服务器的身份,并对数据进行加密,保证数据传输的安全性。
- 具体而言,SSL/TLS协议使用了非对称加密和对称加密两种加密方式,其中非对称加密用于身份验证和密钥协商,对称加密用于数据传输的加密与解密。
- 这种技术实现可以保证即使黑客在传输过程中截取了数据,也无法解密数据的内容。
- 由客户端发起握手,告诉服务器客户端支持的 TLS/SSL 版本、数据加密算法、以及一个随机数
1.1服务端确认支持这个版本的 TLS/SSL、加密算法,并生成一个随机数
1.2服务端将证书(带公钥)、服务端生成的随机数返回给客户端 - 客户端检查证书是否可信(和已有的 CA 列表对比,看是否是已有 CA 颁发的证书),并生成第三个随机数 PreMasterSecret
- 客户端使用证书带的公钥将 PreMasterSecret 进行加密,并通过之前交换的数据生成一个 Hash 值,发送给服务端,请求变更编码
3.1. 服务端校验 Hash(确认不是假的客户端),并使用自己证书的私钥解密出 PreMasterSecret
3.2. 服务端根据之前的随机数和约定的加密算法,生成用于加密后续传输数据的会话密钥 SessionSecret
3.3. 服务端根据之前交换的数据生成一个 Hash 值,发送给客户端,确认开始变更编码 - 客户端校验 Hash (确认不是假的服务端),并生成会话密钥
- 客户端使用会话密钥加密数据,并发送给服务端
5.1. 服务端使用会话密钥解密数据,执行业务逻辑后产生数据
5.2. 服务端使用会话密钥加密数据,返回给客户端 - 客户端使用会话密钥解密数据,完成一次和服务端的数据交换
在这个过程中,有几个关键点:
- 前两次的随机数(客户端随机数、服务端随机数)是明文传输的
- 非对称密钥算法只被使用了一次,即客户端使用证书公钥加密 PreMasterSecret,服务端使用证书私钥解密出 PreMasterSecret
- 应用数据的传输使用的是对称密钥算法,客户端/服务端都使用会话密钥进行加/解密
在握手阶段,安全与否的关键在于 PreMasterSecret 是否能够被破解,虽然理论上通过 RSA 算法加密是比较安全的,但还是有破解的可能性。最安全的做法是不发送 PreMasterSecret,而是根据一系列参数由客户端和服务端分别计算出 PreMasterSecret,这个算法就是迪菲-赫尔曼密钥交换。
总结:
SSL/TLS协议采用了对称加密和非对称加密相结合的方式来保护通信数据的安全性和完整性。
- 对称加密:在建立SSL/TLS连接时,客户端和服务器会协商出一个对称密钥(也称为会话密钥),用于后续数据的加密和解密。对称加密算法的优点是加密效率高,适合对大量数据进行加密;缺点是密钥的安全性问题,密钥泄露或者被破解后,数据的安全性就无法保证。
- 非对称加密:为了解决对称加密中密钥安全性的问题,SSL/TLS协议还采用了非对称加密。在建立连接时,客户端和服务器会交换公钥和私钥,使用公钥加密数据,私钥解密数据,保证了数据的安全性。非对称加密算法的优点是安全性高,密钥不需要传输,但是加密效率较低,适合对少量数据进行加密。
SSL/TLS协议的加密实现原理总结如下:
- 握手协议:客户端向服务器发送握手请求,包括协议版本、加密套件、随机数等信息,服务器回复握手确认,包括协议版本、加密套件、随机数等信息,同时也会回复公钥证书,客户端验证证书有效性,提取公钥,生成会话密钥,并使用公钥加密会话密钥。
- 对称加密:客户端和服务器之间的通信采用对称加密算法,使用之前协商出的会话密钥进行数据的加密和解密。
- 非对称加密:SSL/TLS协议采用非对称加密算法保证会话密钥的安全传输。在握手过程中,服务器会向客户端返回证书,证书中包含服务器的公钥。客户端使用公钥加密生成的会话密钥,服务器使用私钥解密得到会话密钥。
- 数据完整性:SSL/TLS协议还使用了消息摘要算法(Message Digest,MD)和数字签名来保证数据的完整性。在数据传输过程中,发送方会使用消息摘要算法生成消息摘要,接收方使用相同的算法计算消息摘要,对比接收到的消息摘要和发送方发送的消息摘要是否相同,以此来验证数据的完整性。数字签名则是用于保证证书的真实性和完整性。
通过这些加密技术和安全机制,SSL/TLS协议可以保证通信数据的安全性和完整性,防止数据在传输过程中被窃听
参考:
https://ld246.com/article/1447920990604