Last Updated:

什么是端到端加密以及为什么它是如此令人困惑的术语

银狐

什么是端到端加密

假设您坐在咖啡店里想检查一些东西。您连接到本地 WiFi,打开浏览器,然后使用 Google 搜索。从概念上讲,您的手机正在与 Google 服务器通信,您所注意到的只是搜索结果出现。Internet 协议很好地隐藏了路由到远程机器的所有复杂性。

browsergoogle.comcommunicationThe browser communicates with a Google server

但实际上,这种连接要经过很多中间节点,从您连接的 WiFi 路由器开始。

browserWiFi routerISPbackbonegoogle.comCommunication goes through intermediary nodes

例如,traceroute 是一种可以显示每个数据包到达目的地的路径的工具,它显示了这些路由器沿途到达 google.com 服务器:

10.176.98.1
10.176.2.3
173.205.39.229
213.200.120.54
69.174.23.134
108.170.240.97
216.239.54.107
172.217.7.206

这些只是可以远程识别的那些。可能还有其他人隐藏在外面的眼睛里。当所有数据包通过这些节点时,无论您发送什么,所有这些节点都可以读取它。

browserWiFi routerISPbackbonegoogle.comCan read the communicationCommunication goes through intermediary nodes

这就是 HTTPS 和其他加密通信协议有用的原因。通过加密流量,只有预期的接收者才能解密,您可以使用相同的中间节点,而不必担心他们可能会窃听对话。

browserWiFi routerISPbackbonegoogle.comCan not read the communicationHTTPSTransport-level encryption

这称为传输级加密,因为它可以保护传输中的数据,即在节点之间传输数据时。在上面的例子中,浏览器对数据进行加密,只有谷歌服务器才能解密。它在两个参与者之间建立了一个私人通道。

browsergoogle.comsecure communicationThe browser securely communicates with a Google server

在上面的例子中,两端(浏览器和谷歌服务器)是唯一可以读取通信的一端它经过多少个节点以及谁控制它们都无关紧要。在咖啡馆示例中,您可能会忽略通信流中的所有路由器,因为它们无法读取您发送的内容。

这就是端到端加密。

什么不是端到端加密

但是,如果您正在与代理连接的节点进行通信呢?假设您发现一个有趣的搜索结果并点击了链接。例如,您正在访问的网站使用 Cloudflare 作为代理。

browserCloudflarewebsiteHTTPS?A website that uses Cloudflare as a proxy

在这种情况下,您的浏览器连接到 Cloudflare,而 Cloudflare 连接到网站。浏览器和代理之间的部分使用 HTTPS,因此 WiFi 路由器、ISP 以及位于您和 Cloudflare 之间的 Internet 的所有其他部分无法读取通过线路发送的内容。

但是 Cloudflare 和网站之间的部分呢?是否使用加密使此连接端到端加密?

不,浏览器和网站之间的连接不是端到端加密的,因为它们之间有一个可以读取通信的盒子。如果存在可以读取通信的中间节点,则所有边是否都使用加密并不重要。

为什么端到端加密是一个令人困惑的术语

选择结束

让我们换个帽子,成为一名 AWS 架构师!你的任务是为一家注定(至少在分发给投资者的小册子中)成为下一个在全球拥有数十亿用户的 Facebook 的初创公司运营一个网站。您决定使用负载均衡器和 CloudFront 后面的一组 EC2 实例进行全球内容交付。

CloudFront 在上述场景中的工作方式与 Cloudflare 类似。它是一个代理,通过重新加密或以纯文本形式破坏加密并将流量发送到负载均衡器。

这种架构是端到端加密的吗?

当然,您可能会说,因为用户使用以您的架构结尾的加密连接。

ArchitectureCloudFrontLoad balancerEC2 instancesbrowserHTTPSThe connection is end-to-end encrypted

但是等等,它与 Cloudflare 案例有何不同?用户正在与您的 EC2 服务器通信,并且有一个可以读取流量的盒子!

browserCloudFrontLoad balancerEC2 instancesHTTPSThe connection is not end-to-end encrypted

端到端加密的问题在于,根据您选择端点的方式,可以将相同的架构视为端到端加密与否。

通常,在一对一或群发消息的情况下,两端是参与者。您通过 WhatsApp 向朋友发送消息。如果 WhatsApp 可以读取该消息,那么它就不是端到端加密的。但是,当您将相同的消息发布到私人群组的 Facebook 墙时,结果是什么?在这种情况下,端到端意味着与 Facebook通信,即使您仍然在向多个人发送消息。

飞行中加密

很容易将完整的动态加密与端到端加密混淆。关于与 TLS 终止代理的连接是否仍算作端到端加密,存在许多 问题。它不是。

如果仔细观察,在这些情况下,文档通常不会提及端到端加密。在 CloudFront 开发人员文档中

例如,您可以将 CloudFront 配置为使用 HTTPS SSL/TLS 加密帮助实施安全的端到端连接。(强调我的)

它并不是说连接是端到端加密的。它表示该连接对所有端到端通信使用 TLS 加密。这不一样,因为 CloudFront 仍然可以读取请求和响应。

同样,Cloudflare 的文档

Cloudflare 建议对站点访问者与 Cloudflare 网络之间以及 Cloudflare 网络与您的源站 Web 服务器之间的流量进行端到端加密。(强调我的)

一个终端到端到端加密连接CloudFlare的不会使终端到端到端加密整个连接。同样,Cloudflare 可以读取请求和响应。

密钥管理

更复杂的是,端到端加密还依赖于密钥管理。当使用 HTTPS 时,它是由协议本身完成的,所以我们倾向于较少考虑谁生成和知道密钥。但它也是端到端加密定义的重要组成部分。重要的是只有两端知道密钥,其他人都不知道

Zoom 是一个特别令人讨厌的密钥管理损坏案例。他们说会议参与者之间的连接是端到端加密的,因为一端加密数据,只有另一端解密。但是在他们的博客中他们说

为确保整个过程满足我们全天候和全球客户的需求,Zoom 目前在云中维护这些系统的密钥管理系统。(强调我的)

这意味着 Zoom 可以读取和修改从一个参与者发送到另一个参与者的数据,即使它是加密的。这不是端到端加密。经过一番争论,联邦贸易委员会调查并强制他们实施适当的端到端加密。

数据加密

通常,传输级加密等同于 HTTPS,因为它对两个通信方之间的流量进行加密,并且在任何使用未加密的 HTTP 的地方都被视为不安全的。但这也取决于数据是否加密。

例如,PGP 加密的消息无论以何种方式传送都是端到端加密的。你可以把它写到广告牌上,它仍然是安全的,因为只有收件人有解密它的密钥。

结论

端到端加密意味着只有通信的两端才能读取消息。它提供了强有力的隐私保证,因此比动态或静态加密更可取。

但是决定一个方案是否是端到端加密的可能很棘手。这取决于终端的选择、飞行中加密的终止位置以及管理密钥的一方。