TLS 握手 - 对称方案
TLS handshake - Symmetric scheme
据我所知,TLS 可以同时使用对称和非对称加密。
非对称方案用于交换密钥,但何时以及使用什么对称方案?
The asymmetric schemes are used to exchange keys
和数字签名。
对称方案用于在密钥交换期间使用约定的对称密钥进行数据传输。
是的,你是对的。非对称算法通常比对称算法慢。但是,对称算法需要共享密钥来加密和解密消息。因此,TLS 允许客户端和服务器使用非对称机制交换共享密钥。没有非对称算法,就无法以安全的方式在双方之间交换共享秘密。一旦双方都拥有共享密钥,客户端和服务器之间的所有后续通信都将使用比非对称算法快得多的对称算法进行加密。
在非常高的层次上,建立 TLS 连接的步骤如下所示:
- 客户端 -> 安全会话请求
- 服务器 -> 发送证书和链证书
- 客户端 -> 验证证书
- 客户端 -> 为对称加密生成随机密钥
- 客户端->用服务器public密钥加密生成的密钥并将加密后的值发送给服务器
- 服务器->用自己的私钥解密客户端发送的密钥
从这里开始,服务器和客户端之间的所有后续通信都将使用对称算法进行加密。
具体使用哪种算法由服务器和客户端支持的密码套件决定。在连接设置期间,要使用的密码套件由客户端首选项决定。
典型的密码套件名称如下所示:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
这里
ECDHE - 密钥交换算法
ECDSA - 用于签署密钥的数字签名算法
AES_128_GCM - 使用 128 位密钥的分组密码和模式
ECDHE 代表椭圆曲线 Diffie Hellman Ephemeral。 Elliptic 变体(第一个 E)用于性能,而 Ephemeral 变体(最后一个 E)用于前向保密。前向保密意味着如果攻击者通过 TLS 记录所有通信并在稍后的某个时间点以某种方式获取私钥,he/she 无法解密过去记录的通信。
ECDSA 用于验证(验证其完整性)共享秘密。 ECDSA 比 HMAC 等其他身份验证算法更弱且更慢。然而它被用于共享密钥认证,因为它不需要验证者知道用于创建认证标签的密钥。服务器可以很好地使用其私钥来验证消息的完整性。
AES_128_GCM - 一旦双方(通常是浏览器和网络服务器)共享了一个公共密钥,就会使用对称分组密码算法加密各方之间的消息交换。在这种特殊情况下,使用具有 128 位密钥和 GCM 身份验证模式的分组密码 AES。
如果您在浏览器中打开 HTTPS 网站,您可以使用浏览器实用程序查看使用的密码套件。例如,在 Firefox 中,您可以在页面信息中的安全选项卡下看到详细信息,如下所示:
据我所知,TLS 可以同时使用对称和非对称加密。 非对称方案用于交换密钥,但何时以及使用什么对称方案?
The asymmetric schemes are used to exchange keys
和数字签名。
对称方案用于在密钥交换期间使用约定的对称密钥进行数据传输。
是的,你是对的。非对称算法通常比对称算法慢。但是,对称算法需要共享密钥来加密和解密消息。因此,TLS 允许客户端和服务器使用非对称机制交换共享密钥。没有非对称算法,就无法以安全的方式在双方之间交换共享秘密。一旦双方都拥有共享密钥,客户端和服务器之间的所有后续通信都将使用比非对称算法快得多的对称算法进行加密。
在非常高的层次上,建立 TLS 连接的步骤如下所示:
- 客户端 -> 安全会话请求
- 服务器 -> 发送证书和链证书
- 客户端 -> 验证证书
- 客户端 -> 为对称加密生成随机密钥
- 客户端->用服务器public密钥加密生成的密钥并将加密后的值发送给服务器
- 服务器->用自己的私钥解密客户端发送的密钥
从这里开始,服务器和客户端之间的所有后续通信都将使用对称算法进行加密。
具体使用哪种算法由服务器和客户端支持的密码套件决定。在连接设置期间,要使用的密码套件由客户端首选项决定。
典型的密码套件名称如下所示:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
这里
ECDHE - 密钥交换算法
ECDSA - 用于签署密钥的数字签名算法
AES_128_GCM - 使用 128 位密钥的分组密码和模式
ECDHE 代表椭圆曲线 Diffie Hellman Ephemeral。 Elliptic 变体(第一个 E)用于性能,而 Ephemeral 变体(最后一个 E)用于前向保密。前向保密意味着如果攻击者通过 TLS 记录所有通信并在稍后的某个时间点以某种方式获取私钥,he/she 无法解密过去记录的通信。
ECDSA 用于验证(验证其完整性)共享秘密。 ECDSA 比 HMAC 等其他身份验证算法更弱且更慢。然而它被用于共享密钥认证,因为它不需要验证者知道用于创建认证标签的密钥。服务器可以很好地使用其私钥来验证消息的完整性。
AES_128_GCM - 一旦双方(通常是浏览器和网络服务器)共享了一个公共密钥,就会使用对称分组密码算法加密各方之间的消息交换。在这种特殊情况下,使用具有 128 位密钥和 GCM 身份验证模式的分组密码 AES。
如果您在浏览器中打开 HTTPS 网站,您可以使用浏览器实用程序查看使用的密码套件。例如,在 Firefox 中,您可以在页面信息中的安全选项卡下看到详细信息,如下所示: