所选密码套件在 SSL/TLS 连接中的作用

信息安全 tls 密码学 哈希 密钥交换 密码
2021-08-28 22:45:48

当涉及到安全的 TLS 配置(例如 HTTPS)时,主题主要是关于受支持的密码套件。

我想完全了解密码套件的哪个部分在 SSL/TLS 连接中具有哪个角色。

所以据我了解,它通常是这样工作的:

  1. 客户端连接到服务器
  2. 客户端告诉服务器他们支持的协议(例如 TLS 1.2)和密码套件(例如ECDHE-RSA-AES128-GCM-SHA256
  3. 服务器回答并同意他们都支持的协议和密码套件(例如 TLS 1.2 和ECDHE-RSA-AES128-GCM-SHA256),以及服务器证书(也包含他们的公钥)

--- 现在从这里开始,他们根据选择的协议进行通信,密码套件的作用变得很重要 ---

  1. 客户端根据已知的证书颁发机构验证服务器的证书并提取服务器的公钥以进行密钥交换

  2. 现在密码套件的密钥交换开始(在本例中为 ECDHE-RSA),它使用服务器的公钥 - 结果是预主密钥(如下图所示)

  3. 使用pre-master secret,然后使用密码和散列算法(在本例中为AES128-GCMSHA256)进行消息加密和摘要。

  4. 重复密钥交换,使用密码加密,使用预先共享的秘密并使用散列算法进行验证。结果是主机密

  5. 密钥与密码和散列算法一起使用,以加密任何进一步的通信。

SSL/TLS 握手(图表来自:https ://blogs.msdn.microsoft.com/kaushal/2013/08/02/ssl-handshake-and-https-bindings-on-iis/ )

我对密码套件在 TLS 通信中的作用的理解是否正确 - 还是我在某些细节上错了?

2个回答

所以据我了解,它通常是这样工作的:

  1. 客户端连接到服务器

对于 HTTPS 是的。对于其他应用程序,它会有所不同;有些建立新的连接,有些重用现有的连接。

  1. 客户端告诉服务器他们支持的协议(例如 TLS 1.2)和密码套件(例如 ECDHE-RSA-AES128-GCM-SHA256)

Ciphersuite复数形式,以及扩展中的许多其他内容,都显示在您链接的文章中。(突出显示 SNI 与所描述的 IIS/http.sys 逻辑相关。)

  1. 服务器回答并同意他们都支持的协议和密码套件(例如 TLS 1.2 和 ECDHE-RSA-AES128-GCM-SHA256),以及服务器证书(也包含他们的公钥)

该证书包含静态(长期)公钥,正如 ISMSDEV 所说,伴随着任何中间的又名链证书,以及可选的根证书。该文章没有明确说明,但确实在网络跟踪中显示,证书实际上是单独的消息,但可能在同一个 SSL/TLS记录中并且几乎总是在相同的 TCP 帧中。对于临时密钥交换,如您指定但不是本文中的密码套件,服务器的临时密钥(带有参数和签名,就像 ISMSDEV 所说的那样)在单独的消息 ServerKeyExchange 中;然后可选的另一条消息“请求”客户端证书,同样没有明确说明,这次没有显示;然后是 ServerHelloDone 消息,根本没有描述,但显示了。

--- 现在从这里开始,他们根据选择的协议进行通信,密码套件的作用变得很重要 ---

协议版本/格式和密钥交换已经影响了上面的服务器消息。对称密码和可能的哈希还没有效果。

  1. 客户端根据已知的证书颁发机构验证服务器的证书并提取服务器的公钥以进行密钥交换

验证证书,提取长期(已认证)密钥,并提取和验证临时密钥(如果使用),它位于您指定的密码套件中。

  1. 现在密码套件的密钥交换开始了(在本例中为 ECDHE-RSA),它使用服务器的公钥 - 结果是预主密钥(如下图所示)

密钥交换已经开始,上面有服务器消息;现在使用客户端的密钥完成。您复制的图表显示了一个从客户端到服务器的箭头,带有(加密的)预主密钥,因为它适用于使用 RSA 密钥交换的密码套件,但您使用 ECDHE-RSA 密钥交换指定了一个密码套件,并且为此客户端的临时公钥而是发送(明文),并且在两个对等方独立地使用 ECDH 算法来导出预主密钥。

此外,如果请求了客户端证书(也称为客户端身份验证),则客户端可以通过客户端的密钥交换消息(两者)作为单独的消息发送自己的证书链及其在副本上的签名,如文章中所述,但未显示。

  1. 使用预主密钥,然后使用密码和散列算法(在本例中为 AES128-GCM 和 SHA256)进行消息加密和摘要。

还没有。

  1. 重复密钥交换,使用密码加密,使用预先共享的秘密并使用散列算法进行验证。结果是主秘密

没有重复,也没有直接使用前主密。相反,pre-master secret 与 Hello 消息中的“随机”(nonce)值一起使用,在称为 PRF(伪随机函数)的算法中推导出主密钥,然后类似地使用主密钥来推导几个会话密钥。正如文章所说:

[服务器] 执行一系列步骤(客户端也执行,从相同的预主密钥开始)以生成主密钥。(bullet) 客户端和服务器都使用主密钥来生成会话密钥,这些密钥是对称密钥,用于加密和解密 SSL 会话期间交换的信息并验证其完整性 [...]

请注意“会话密钥”中的复数形式。对于TLS1.2 中的某些密码套件,包括您指定的密码套件,密码套件中的哈希会影响 PRF。对于其他密码套件和所有较低的协议版本,它不会。请参阅ECDHE-RSA-AES-GCM-SHA 中的哈希值是什么?.

  1. 主密钥与密码和散列算法一起使用,以加密任何进一步的通信。

每个端点发送一条消息 ChangeCipherSpec 以“激活”密码套件,然后发送一条消息 Finished,这是第一个加密(和 MACed)消息。正如文章所说:

CLIENT 和 SERVER 互相发送一条消息,通知他们未来的消息将使用会话密钥加密。然后它发送一个单独的(加密的)消息,表明它的握手部分已经完成。

没有任何东西直接使用主密钥。对称(数据)加密使用两个会话密钥(每个方向一个)。对于使用 HMAC 来保证完整性的密码套件(如文章中所述),它使用密码套件中的哈希算法(以及另外两个会话密钥),但是您指定了一个使用 GCM 模式的密码套件,正如 ISMSDEV 所说,它提供了自己的身份验证(不是使用任何哈希)。

我认为你在正确的路线上。我对密码套件对协议影响的协议的理解就是这样。

客户你好

包含客户端支持的 SSL/TLS 版本的最高版本、客户端生成的随机数、会话 ID(初始握手将被清零)、客户端支持的可能密码套件列表(见下文)(这些包含要使用的身份验证算法、要使用的加密算法和密钥协商协议)

客户端现在等待来自服务器的响应...

服务器你好

包含客户端支持的服务器支持的 SSL/TLS 的最高版本、服务器生成的随机 nonce、客户端提供的会话 ID 或客户端提供的新会话 ID。服务器选择使用哪个密码套件,例如:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

分解为:

- 协议- TLS

- 密钥交换算法- ECDHE_RSA - 椭圆曲线 Diffie Helman Ephemeral 与 RSA。客户端将如何就对称密钥达成一致。

- 加密算法- AES_128_GCM - 用于使用约定的密钥加密有效负载数据的算法。AES 128(高级加密标准,密钥长度为 128 位)并使用块模式 GCM(伽罗瓦/计数器模式),它还为加密数据提供消息身份验证。

- 伪随机函数- SHA256 - 用于生成主密钥的算法类型,用于创建会话密钥的种子。在这个密码套件中,它使用众所周知的 SHA256 哈希算法来提供高水平的熵。证书

此消息包含用于签署服务器公钥的证书和 X509 证书链中的任何中间证书。

服务器密钥交换

使用密码套件中的密钥协商协议,服务器将它需要的任何元素发送给客户端。例如,对于 Ethermeral Diffie Helman,这将是 3 个参数加上这些参数的签名。参数是两个全局 DH 参数加上服务器 DH 公钥。