算法
一、认识
https
通过数字证书验证服务器是否为信任的服务器, 采用非对称加密的方式交换密钥,然后使用对称加密的方式对数据进行加密,并且对消息的内容采用摘要算法得到消息摘要,这样对端在解密数据后可以通过相同的消息摘要算法对计算后的消息摘要和传过来的消息摘要进行对比,从而判断数据是否经过篡改。
以密码学为基础的信息安全包含主要的五个方面:机密性,可用性,完整性,认证性,不可否认性。
为了保证安全,TLS
就需要保证这五个特性。简要说明下这个五个特性:
- 机密性:保密信息不会透露给非授权的用户或实体;
- 可用性:指的是加密服务的高可用;
- 完整性:信息不回被非法篡改,有对应的篡改检测机制;
- 认证性:参与信息交换的两个主体需要确认对方的身份是否可信,避免信息被不怀好意的人给窃取或者篡改;
- 不可否认性:指的是用户在事后无法否认曾经进行的信息交换、签发;
每种算法,在TLS中都有其特定的用处。
二、对称加密算法
所谓对称加密,就是使用同一个密钥进行加解密。最常见的就是 AES
加密算法 和 DES
加密算法。加解密过程:
-
浏览器给服务器发送一个随机数
client-random
和一个支持的加密方法列表 -
服务器给浏览器返回另一个随机数
server-random
和双方都支持的加密方法 -
然后两者用加密方法将两个随机数混合生成密钥,这就是通信双上加解密的密钥
但是对称加密,加解密双方如何安全的传递密钥是一个问题。如果服务器直接把密钥传输给客户端,然后才进行加密通信,可能在传输密钥的过程中,密钥就被窃取了。
三、非对称加密算法
非对称加密通常包含一对密钥,称为公钥(public key
)和 私钥(private key
)。其中一个密钥加密后的数据,只能让另一个密钥进行解密。如 RSA
、ECDHE
。 加解密过程:
-
浏览器给服务器发送一个随机数
client-random
和一个支持的加密方法列表 -
服务器把另一个随机数
server-random
、加密方法、公钥传给浏览器 -
然后浏览器用公钥将两个随机数加密,生成密钥,这个密钥只能用私钥解密
使用公钥反推出私钥是非常困难,但不是做不到,随着计算机运算能力提高,非对称密钥至少要 2048
位才能保证安全性,这就导致性能上要比对称加密要差很多
TLS
实际用的是两种算法的混合加密。通过 非对称加密算法 交换 对称加密算法 的密钥,交换完成后,再使用对称加密进行加解密传输数据。这样就保证了会话的机密性。过程如下:
-
浏览器给服务器发送一个随机数
client-random
和一个支持的加密方法列表 -
服务器把另一个随机数
server-random
、加密方法、公钥传给浏览器 -
浏览器又生成另一个随机数
pre-random
,并用公钥加密后传给服务器 -
服务器再用私钥解密,得到
pre-random
-
浏览器和服务器都将三个随机数用加密方法混合生成最终密钥
这样即便被截持,中间人没有私钥就拿不到pre-random
,就无法生成最终密钥。可又有问题来了,如果一开始就被DNS
截持,我们拿到的公钥是中间人的,而不是服务器的,数据还是会被窃取,所以数字证书来了,往下看,先简单说一下摘要算法