Keyless SSL 如何工作?| 前向保密

Keyless SSL 使无法共享其私钥的组织可以在保持 SSL/TLS 加密的同时迁移到云。

Share facebook icon linkedin icon twitter icon email icon

无密钥 SSL

学习目标

阅读本文后,您将能够:

  • 说明 TLS 握手中的步骤以及会话密钥与私钥之间的区别
  • 了解 Keyless SSL 如何使用私钥将 TLS 握手的一部分与其余握手分开
  • 了解 Diffie-Hellman 与 RSA 握手之间的区别
  • 了解什么是前向保密

什么是 Keyless SSL?

Keyless SSL

Keyless SSL 是使用云供应商进行 SSL 加密的公司提供的一项服务。通常,这意味着云供应商必须知道公司的私钥,但 Keyless SSL 是规避该问题的一种方法。出于监管原因,许多组织无法共享其私钥。通过 Keyless SSL,这些组织仍然能够使用 TLS 并利用云,同时保证密钥的安全。

SSL(更准确地称为 TLS)是一种用于对网络上的通信进行身份验证和加密的协议。SSL/TLS 要求使用所谓的公钥和私钥,如果公司使用该协议来保护往返其网站的流量(请参见 HTTPS),私钥通常仍由公司拥有。但是当公司迁移到云中并且供应商提供 TLS 加密时,供应商将改为使用私钥。

通过将涉及私钥的握手部分迁移出供应商的服务器,私钥可以安全地保留在公司拥有的财产中。云供应商并非直接使用私钥来生成会话密钥,而是通过安全通道从公司获取会话密钥,并使用这些密钥来维护加密。因此,仍然使用私钥,但不会与公司外部的任何人共享。

例如,假设 Acme Co. 实施 SSL。Acme Co. 会将其私钥安全地存储在他们拥有和控制的服务器上。如果 Acme Co. 迁移到云并使用云服务提供商进行 Web 托管,则该供应商将拥有私钥。但如果 Acme Co. 与实施 Keyless SSL 的供应商一起迁移到云,那么私钥可以保留在 Acme Co. 拥有和控制的服务器上,就像在非云 SSL 实施中一样。

Keyless SSL 如何工作?

Keyless SSL 基于以下事实:在 TLS 握手期间仅使用私钥一次,即 TLS 通信会话开始时发生。Keyless SSL 通过拆分 TLS 握手的步骤来实现。提供 Keyless SSL 的云供应商将该过程的私钥部分迁移到另一台服务器,通常是客户保留在本地的服务器。

握手期间需要使用私钥来解密或加密数据时,供应商的服务器会将所需数据转发到客户的私钥服务器。私钥对客户服务器上的数据进行加密或解密,然后将数据发回供应商的服务器,而 TLS 握手如常继续。

Keyless SSL 仅从云供应商的角度来看为“无密钥”:他们从不查看其客户的私钥,但客户仍拥有并可使用私钥。同时,公钥仍如常在客户端使用。

什么是会话密钥?

会话密钥是在 TLS 握手完成后由通过 TLS 进行安全通信的双方使用的对称密钥。一旦双方商定了一组会话密钥,就不再需要使用公钥和私钥。TLS 为每个唯一的会话生成不同的会话密钥。

有哪些生成会话密钥的步骤?

这取决于在 TLS 握手中使用哪种密钥交换算法。两种主要的密钥交换算法是 RSA 密钥交换算法和短暂 Diffie-Hellman 密钥交换算法。

RSA 密钥交换

在 RSA 握手中,TLS 握手中创建会话密钥的步骤如下:

  1. 客户端向服务器发送一条明文 "hello" 消息,其中包括他们要使用的协议版本、受支持的密码套件列表和称为“客户端随机数”的随机数据短字符串。
  2. 服务器使用其 SSL 证书、首选密码套件和一个不同的随机数据短字符串(称为“服务器随机数”)响应(以明文格式)。
  3. 客户端创建另一组随机数据,称为“预主机密”。客户端从服务器的 SSL 证书中获取公钥,加密预主机密,并将其发送到服务器;只有拥有私钥的人员才能解密预主机密。
  4. 服务器解密预主机密。请注意,这是唯一一次使用私钥!
  5. 现在,客户端和服务器都有客户端随机数、服务器随机数和预主机密。它们彼此独立,将这三个输入组合起来可得到会话密钥。它们都应达到相同的结果,并且会话期间的所有后续通信都用这些新密钥进行加密。
SSL Handshake (RSA) Without Keyless SSL

Keyless SSL 在步骤 4 中生效。凭借 Keyless SSL,云供应商无需自行解密预主机密,而是通过安全通道以加密形式将其发送到客户托管或控制的服务器。客户的私钥将解密预主密码,然后将解密的预主密码发回云供应商。云供应商的服务器使用此项得出会话密钥,并且 TLS 通信如常继续。

Cloudflare Keyless SSL Handshake (RSA)

短暂 Diffie-Hellman 密钥交换

短暂 Diffie-Hellman (DHE) 握手(“短暂”是因为同一密钥从未使用两次)使用 Diffie-Hellman 算法生成会话密钥,这是一种在不安全通道上交换密钥的方法。通过这种 TLS 握手,私钥身份验证成为独立于会话密钥生成的过程。

除了使用的算法之外,DHE 握手和 RSA 握手之间的主要区别在于如何生成预主机密。在 RSA 握手中,预主机密由客户端生成的随机数据组成。在 DHE 握手中,客户端和服务器使用商定的参数分别计算相同的预主机密。

  1. 就像在 RSA 握手中一样,客户端发送他们要使用的协议版本、受支持的密码套件列表以及客户端随机数。
  2. 服务器用其选择的密码套件、服务器随机数和 SSL 证书响应。在这里,DHE 握手开始与 RSA 握手有所不同:服务器还发送其 Diffie-Hellman (DH) 参数,该参数将用于计算预主机密。它还使用服务器的私钥加密客户端随机数、服务器随机数和 DH 参数。这是唯一一次使用私钥,它验证服务器是其声称的身份。
  3. 客户端使用公钥解密服务器的消息并验证 SSL 证书。然后,客户端使用其 DH 参数回复。
  4. 双方使用客户端的 DH 参数和服务器的 DH 参数,彼此分开计算预主机密。
  5. 然后,他们将此预主机密与客户端随机数和服务器随机数组合以获取会话密钥。
SSL Handshake (Diffie-Hellman) Without Keyless SSL

私钥仅在步骤 2 中使用,这是 Keyless SSL 变得重要的地方。此时,SSL/TLS 供应商将客户端随机数、服务器随机数和服务器的 DH 参数发送到拥有私钥的客户控制的服务器。此信息将使用私钥进行加密,然后以加密形式发回云供应商,后者将其传递给客户端。客户端能够使用公共密钥解密此数据,并且握手将继续。这样,云供应商无需触摸私钥。

Cloudflare Keyless SSL (Diffie Hellman)

短暂 Diffie-Hellman 握手尽管比 RSA 握手花费的时间稍长,但有称为前向保密的优点。由于私钥仅用于身份验证,因此攻击者无法使用它来查找任何指定的会话密钥。

什么是前向保密?什么是完美前向保密?

前向保密确保加密的数据即使私钥公开时仍保持加密。这也称为“完美前向保密”。如果每个通信会话使用唯一的会话密钥,并且会话密钥与私钥分开生成,则前向保密是可能的。如果单个会话密钥受损,则攻击者只能解密该会话;所有其他会话都将保持加密状态。

在为前向保密设置的协议中,私钥在初始握手过程中用于身份验证,否则不用于加密。短暂 Diffie-Hellman 握手将会话密钥与私钥分开生成,因此具有前向保密。

相反,RSA 没有前向保密;在私钥受损的情况下,攻击者可以解密过去对话的会话密钥,因为他们可以解密明文形式的预主机密以及客户端随机数和服务器随机数。通过将这三者结合起来,攻击者可以得到任何指定的会话密钥。

Cloudflare 如何实施 Keyless SSL?

Cloudflare 是第一个发布 Keyless SSL 的云供应商,它允许面临严格安全限制的企业(例如银行)迁移到云。Cloudflare 同时支持 RSA 和 Diffie-Hellman 握手,因此公司可以通过 Diffie-Hellman 合并前向保密,并防止攻击者在窃取其私钥后解密其数据。

Cloudflare 服务器与私钥服务器之间的所有通信均通过安全的加密通道进行。此外,尽管额外访问了私钥服务器,但 Cloudflare 发现 Keyless SSL 对性能的影响可以忽略不计。

有关 Keyless SSL 如何工作的更多技术细节,请参阅此博客文章。有关 Cloudflare 的 Keyless SSL 的更多信息,请探索 Keyless SSL 服务的详细信息。