
端到端加密 E2EE —— 只有端点持有密钥
一种加密属性:连位于会话中间的服务器也无法读取消息。
一种密码学属性:数据在发件人处被加密,仅由预期收件人解密,任何中间方——包括转发消息的服务器——都不持有解密密钥。这与传输加密(TLS)不同,后者在 TLS 层终结之后,接收服务器的运维者可以读取明文。Signal 协议、OpenPGP、Matrix 的 Olm/Megolm 套件以及少量其他系统都实现了这一属性。
一个托管平台能让 E2EE 成为可能,但无法直接提供 E2EE。
端到端加密是两个端点之间通信系统的一种属性——聊天应用、备份工具、邮件客户端。一个托管平台本身不是端点,因此它无法像 Signal 那样直接「就是」E2EE。托管平台能做的,是确保那些想要 E2EE 的客户工作负载拥有交付 E2EE 所需的一切,并确保平台自身不会偷偷变成一个可以读取用户数据的第三端点。
这正是我们采取的运营立场。在一台 NordBastion VPS 上自托管一台 Matrix home server、一套 Conduwuit/Synapse 技术栈或一台 XMPP 服务器,对用户可见的密码学就是客户端之间的端到端——VPS 只转发密文。自托管 Restic、Borg 或 Kopia 备份目标,数据在到达我们的磁盘之前就已在客户端加密。自托管 Mumble、Jitsi 或 SimpleX,我们永远看不到明文流。
在我们自己面向客户的服务上的推论是:我们在控制面板和 API 上使用 TLS(而非 E2EE),因为控制面板确实必须读取你的请求才能完成它们。我们在那里用以替代 E2EE 的是数据最小化——我们几乎不收集任何东西,对必须存储的内容做哈希,并仅为记账目的保留付款元数据。这是诚实的回答;它与 E2EE 不是同一种属性,我们也不假装它是。
人们真正会问的问题。
E2EE 与 HTTPS 有何不同?
HTTPS 用 TLS 加密你的浏览器与服务器之间的链路。一旦请求到达服务器,该服务器的运维者就能看到明文——这正是服务器能完成其工作的方式。端到端加密则意味着服务器永远看不到明文:消息在发件人设备上以收件人密钥加密,只有收件人能解密。HTTPS 保护线路;E2EE 同时也把内容从主机商手中保护起来。
NordBastion 自身是端到端加密的吗?
NordBastion 是一个托管平台,不是消息应用——这个概念并不直接适用于我们运营的大部分东西。客户控制面板、API 和营销网站使用的是 TLS,而非 E2EE,因为服务器必须读取你的请求才能完成它们。我们做的是尽量减少服务器以明文存储的内容:密码用 argon2id 哈希,付款详情在记账所需期限之外不保留,每客户数据存储的结构设计也力求让数据库泄露暴露尽可能少的东西。
对于 VPS 上的客户工作负载,E2EE 意味着什么?
这是你可以在平台之上自行实现的东西。你在 NordBastion VPS 上自托管的一款聊天应用完全可以是端到端加密的——VPS 只看到在用户设备之间流动的密文。一个端到端加密的备份工具(restic、borg、kopia)在客户端加密数据,并把密文推送到 NordBastion 节点上的兼容 S3 存储,密钥永远不离开运维者之手。
E2EE 能保护的东西有正式的边界吗?
有。E2EE 保护的是内容。它自身并不隐藏元数据:谁在和谁通信、何时通信、多频繁、来自哪个 IP。大多数现代 E2EE 设计(Signal、Matrix)会增加额外措施——sealed sender、填充、mixnet——以一点点削减元数据泄漏,但其中没有任何一种能给元数据带来内容那样的绝对隐私属性。一个有隐私意识的技术栈,会用 E2EE 保护内容,再用 Tor 或自托管 VPN 处理网络层元数据。