为什么有人会“双重加密”?

信息安全 加密 tls
2021-08-29 03:41:49

如果我有一个网站或移动应用程序,它通过安全的 SSL/TLS 连接(即 HTTPS)与服务器通信,并且还在已经安全的连接之上加密用户和服务器之间发送和接收的消息,我会做不必要的动作?还是双重加密是一种常用方法?如果是这样,为什么?

4个回答

这并不罕见,但可能不是必需的。很多开发者似乎忘记了 HTTPS 流量已经被加密了——看看这个网站上关于实现客户端加密的问题的数量——或者因为联想 SSL等广为人知的问题而觉得它不能被信任中间人一团糟

然而,大多数人并没有受此影响,目前还没有针对 TLSv1.2 的任何特别可行的攻击,所以它并没有真正增加太多。

另一方面,在某些情况下,在传输之前加密数据是有正当理由的。例如,如果您正在开发存储应用程序,您可能希望使用客户端上的应用程序使用只有用户知道的密钥进行加密——这意味着服务器根本无法解密数据,但它仍然可以存储它。通过 HTTPS 发送意味着攻击者也不应该能够获取客户端加密的数据,但即使他们能够获取,也没关系。这种模式经常被基于云的密码管理器使用。

从本质上讲,这取决于您要防御的内容 - 但是,如果您不信任 SSL/TLS,您可能也无法信任您发送的加密代码(在 Web 应用程序案例中)!

HTTPS 仅在消息通过网络/互联网传输时提供加密。

如果消息在客户端和最终处理它的服务器之间的某个点由中介(例如消息队列)存储或处理,那么它在中介中时将不会保持加密。

此外,如果 TLS/SSL 在服务边界(例如在负载平衡器上)终止,则它可能不会在内部网络上加密。这可能是需要高安全性的问题,例如在某些受监管的环境中。

在这两种情况下,消息级加密将确保数据在客户端和最终接收者之间的所有点都被加密。

正如@honze 所说,这被称为深度防御,旨在确保即使系统受到部分破坏(例如,他们设法进行中间人攻击以破坏 SSL/TLS,或利用消息队列中的漏洞来获取静态数据)攻击者无法获取受保护的数据。

我想分享我在标题问题上的经验。它与完整的问题本身并没有真正的关系,但这回答了“为什么有人会双重加密?”的问题。

过去,我曾在一家处理护理提供者(医生、医院等)和保险组织(互助机构)之间沟通的组织工作。我们有点像路由器。

架构大致如下:

care provider 1 \                   / insuring organization 1
care provider 2 ---- router (us) ---- insuring organization 2
care provider 3 /                   \ insuring organization 3

我们有以下保护:

  1. 端到端加密:护理提供者 1 需要将患者信息发送给保险组织 1。此信息对隐私敏感,因此需要加密。在我们的层面上,我们无权知道哪些数据正在发送给保险组织。
  2. 护理提供者 - 路由器加密:护理提供者将信息作为元数据发送给我们,以便我们能够处理它。此信息需要加密。合同规定,即使在我们的网络内部,消息仍然必须加密,这样只有我们的一个服务器知道正在发送的信息的元数据。由于我们有多个管道(负载平衡器、防火墙等),因此在此级别也需要加密。
  3. HTTPS 避免 MITM 攻击:不仅我们的数据需要保护,HTTP 元数据也需要保护,因此 HTTPS。

我希望这能阐明为什么需要多层加密。

你说的对。这是一个称为纵深防御的多层安全概念。

加密消息很可能解决端到端加密问题,而 SSL/TLS 解决元数据加密问题。这是一个有用的模式。