如果数据已经加密并在客户端解密,我是否需要使用 TLS?

信息安全 加密 tls AES
2021-08-15 13:50:40

我们通过 Internet 提供静态内容,并且有一个业务要求,即必须对静态数据进行加密。目前它存储在 AWS S3 中,授权客户端可以通过 HTTP 访问它。我们可以通过 Cloudfront 或 Nginx 代理它以使用 TLS,但只有在必要时才会这样做。解密密钥由前端客户端通过单独的 HTTPS 请求检索。

鉴于静态内容已经加密,我们通过 HTTPS 提供静态内容是否有任何收获?它带来了额外的成本、基础设施和延迟,我想不出有什么好处。

2个回答

无论如何,您都应该通过 HTTPS 提供这些数据。正如 Gh0stFish 指出的那样,您可以简单地使用 S3 存储桶策略来要求这样做。

这有几个原因:

  • 使用纯 HTTP 可以很容易地执行流量分析。如果我知道加密的 blob 123 是敏感的,因为我已经看到它或者它来自具有敏感信息的站点,我可以看到还有谁下载了这个 blob 并将敏感信息与他们相关联。
  • 与静态加密不同,TLS 通常配置为提供完美的前向保密。也就是说,一旦连接断开,数据就无法恢复。
  • HTTPS 现在是标准的,不使用它,即使是加密数据,也常常被认为是不负责任的。如果您的客户询问他们的数据是否通过 HTTPS 提供,您可以简单地说“是”,而不必解释为什么不这样做以及为什么它仍然安全。
  • HTTP/2 可以提供显着的性能改进,但只能通过 Web 浏览器中的 HTTPS 使用。我不相信 S3 目前支持 HTTP/2,但如果将来支持,您将需要使用 HTTPS。
  • HTTPS 很快。大多数 x86-64 系统将能够在单核上以超过 6 GiB/s 的速度处理加密数据,这比 10 Gb/s 网卡更快。加密不再是曾经的瓶颈,因此几乎没有理由不使用它。
  • HTTPS 提供防止篡改请求的保护。例如,如果我作为攻击者刚刚看到客户端 A 请求文件 123,而我现在看到客户端 B 请求文件 456,如果密钥不是唯一的,我可以替换给客户端 A 的响应。如果我知道文件 123 是用于公开可用的性教育网站,而客户 B 是一家大公司,我可以替换那些虽然不是色情但可能不适合工作场所的材料。

首先,您不需要使用 CloudFront 或 Nginx 代理 - 您只需使用S3 Bucket Policy强制执行 TLS 。

如果不详细了解您的用例究竟是什么,就很难知道在您的情况下是否有任何特定的好处。值得记住的是,TLS 不仅提供机密性,它还提供完整性(即保证数据没有被中间人篡改)——您当前的加密是否也提供了这一点?

根据您的静态内容到底是什么,如果您尝试通过 HTTP 加载它,您也可能会收到浏览器警告,因为浏览器会阻止混合的活动内容,其中包括 JavaScript 文件或 CSS 等静态内容。