HTTPS 对称密钥可以使用多长时间

信息安全 tls
2021-09-08 04:18:14

据我了解,HTTPS/SSL/TLS 通过 EC/DHE/RSA 密钥交换工作,提供用于未来通信的共享对称密钥(即用于 AES)。

在协商新密钥之前,主要浏览器会使用该对称密钥多长时间?

1个回答

完整的图片如下:非对称加密(RSA、DH...)产生一个称为主密钥的共享密钥从主密钥派生出用于加密的对称密钥。

区别与连接会话之间的区别有关。当客户端打开与服务器的连接时,两者可能会使用非对称加密进行新的完整握手,从而产生新的主密钥。或者他们可以同意重用来自先前连接的主密钥。后一种情况称为“缩写握手”。在同一主密钥上工作的不同连接称为会话,并由客户端和服务器在其消息中相互发送的会话 ID 标识。有关此过程的详细信息,请参阅此答案ClientHelloServerHello

当主密钥被重用时,即对于会话中的新连接,仍然会导出新的对称密钥,因为该导出对主密钥以及客户端和服务器在其初始消息中相互发送的两个随机值都有效。因此,对称密钥在每次连接时都会更新,但通过派生自一个“主密钥”,该“主密钥”可以被长期记住,并在许多连续的连接中重复使用。


建立连接后,正常情况是直到连接结束才更新密钥。在任何时候,根据协议规范,客户端或服务器都可以在连接内请求新的握手;新的握手可能会或可能不会“缩写”(仅当双方同意时才会发生缩写握手),但无论如何都会产生新的对称密钥(但不一定是新的主密钥)。

在实践中,这不会发生。如果服务器想要强制客户端使用证书进行身份验证,则会发生额外的连接握手(这是 IIS 的常见情况:第一次握手而没有客户端身份验证,并且当发送 HTTP 请求并且服务器了解实际目标时路径,它会触发额外的握手)。但是对于已部署的软件来说,仅仅为了密钥更新而真正进行新的握手是非常罕见的。主要原因是加密健壮性不需要密钥更新:AES 使用 128 位块,而不是 64 位块,因此在实际条件下不需要更新密钥。

所以发生的事情(尤其是在 Web 环境中)如下:

  • 连接的对称密钥保持不变,直到该连接结束。
  • 只要客户端和服务器允许,连接就会存在;在 Web 环境中,服务器通常会关闭已处于非活动状态超过一两分钟的连接。
  • 会话,即主密钥值,由客户端和服务器记住,并在可能的情况下重复使用。一个典型的 Web 浏览器会记住 SSL 会话,直到它被关闭(作为一个进程,即所有窗口都关闭)。典型的 Web 服务器将记住 SSL 会话一段给定的时间,这是可配置的(通常 10 分钟到 10 小时左右),也受可用 RAM 和可配置的限制(每个记住的会话最多使用几千字节) )。

连接的对称密钥仅保存在 RAM 中。master secret通常只保存在 RAM 中,但是当多个前端服务器在负载均衡器后面运行时,它们可能会通过各种方法共享 master secret,甚至可以是数据库。在这样的配置中,主秘密值因此可以存储到永久存储介质中(当然,这会引发很多潜在问题)。

如果您关闭客户端系统(不仅仅是让它进入睡眠或休眠状态,而是真正将其关闭),那么几乎可以保证所有对称密钥(包括主密钥)都已从客户端计算机中永久消失。