什么是 HTTPS
HTTPS 解决了 HTTP 不安全的问题
HTTP 整个传输过程数据都是明文的,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。
-
① HTTPS 使用加密算法对报文进行加密,黑客截获了也看不懂
-
② HTTPS 使用摘要算法对报文进行完整性确认,黑客一旦修改报文,那么 HTTPS 可以及时发现并做相应处理
-
③ HTTPS 使用数字签名,保证黑客不能伪造请求或响应报文
HTTPS 由 HTTP + SSL/TLS 组成,即在 HTTP 下面增加了一个 SSL 安全套接层(运行在SSL之上的HTTP协议)
SSL 即安全套接层(Secure Sockets Layer),在 OSI 七层网络模型中处于第 5 层(会话层),由网景公司于 1994 年发明,常用 v2 和 v3 两个版本。
IETF 在1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。
今天 TLS 已经发展出了三个版本,分别是 2006 年的 1.1、2008 年的 1.2 和 2018 年的1.3,目前应用的最广泛的 TLS 是 1.2 。
HTTPS 的安全性是基于 TLS 的加密算法,因此要理解 HTTPS 其实就是要理解 TLS 背后的加密算法原理。
数据加密算法
古典密码学
在古代战争中,为了防止书信被截获后重要信息泄露,人们开始对书信进行加密。
移位式加密
如密码棒,使用布条缠绕在木棒上的方式来对书信进行加密。
- 加密算法:缠绕后书写
- 密钥:木棒的尺寸
替换式加密
按规则使用不同的文字来替换掉原先的文字来进行加密。
例如,码表:
原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA
原始书信:I love you
加密书信:J mpwf zpv
解读后:I love you
- 加密算法:替换文字
- 密钥:替换的码表
与古典密码学相对应的就是现代密码学,主要包括两大分类:对称加密算法和非对称加密算法
- 可以加密任何二进制数据
- 非对称加密的出现使得密码学有了更广泛的用途:数字签名
对称加密算法
对称加密算法:使用相同的密钥,不同的加密和解密算法,对明文加密,对密文解密。
TLS 里有非常多的对称加密算法可供选择,比如 RC4、DES、3DES、AES、ChaCha20 等,前三种被认为不安全,目前常用的只有 AES 和 ChaCha20
-
AES 的意思是“高级加密标准”(Advanced Encryption Standard) ,密钥长度可以是 128 位(比特)、192 位(比特)或 256 位(比特)。安全强度很高,性能也很好,而且有的硬件还会做特殊优化,所以非常流行,是应用最广泛的对称加密算法。
-
ChaCha20 是 Google 设计的另一种加密算法,密钥长度固定为 256 位,纯软件运行性能要超过 AES,曾经在移动客户端上比较流行,但 ARMv8 之后也加入了 AES 硬件优化,所以现在不再具有明显的优势,但仍然算得上是一个不错的算法。
对称加密的破解
破解思路:
- 拿到一组或多组原文-密文对
- 设法找到一个密钥,这个密钥可以将这些原文-密文对中的原文加密为密文,以及将密文解密为原文的组合,即为成功破解
反破解:
- 一种优秀的对称加密算法的标准是,让破解者找不到比穷举法(暴力破解法)更有效的破解手段,并且穷举法的破解时间足够长(例如数千年)。
对称加密的缺点
对称加密算法面临的最大问题:如何把密钥安全地传递给对方,术语叫做“密钥交换”。
对称加密算法的缺点就是不能在不安全的网络上传输密钥,因为一旦密钥泄露则加密通信失败。
非对称加密算法
非对称加密算法是使用相同的加密算法 + 两个不同的密钥(不对称),一个叫公钥(public key),一个叫私钥(private key),公钥可以公开给任何人使用,而私钥必须严格保密。