跳转到内容
HexaTransfer
返回博客
加密与安全

端到端加密详解:初学者指南

什么是端到端加密,为什么它对文件共享很重要?了解E2EE如何保护您的文件。

端到端加密(E2EE)的意思是:你的文件在自己的设备上用一个只有收件方才能重建的密钥加密,传输服务传送的是密文,从来不持有解密密钥,因此服务商的员工、黑客乃至法院传票都无法读取文件内容。具体实现上,浏览器生成一个随机的 256 位 AES 密钥,在本地加密文件,上传密文,并将密钥放在分享链接 # 之后的片段中——浏览器永远不会将该片段发送给服务器。这就是全部技巧,也是真正隐私与营销话术之间的分水岭。

"端到端"究竟指什么

所谓两个"端",就是你和收件方。两端之间的所有节点——ISP 路由器、CDN 边缘节点、传输公司的服务器、收件方的 ISP——都处于中间位置。有了 E2EE,这些中间节点看到的只是加密字节。对比单纯的传输层加密(TLS):TLS 保护浏览器到服务器的数据,然后服务器解密、存储明文、收件方下载时再重新加密。WeTransfer 的标准档就是这种方式,该公司在法律要求下可以(有时必须)提交文件明文。

有了 E2EE,即使检察官持令状找到服务商,服务商也只能提交一堆看起来随机的字节。这一特性正是记者、律师和医生越来越坚持使用 E2EE 的原因。

为什么单靠 TLS 不够

TLS 1.3 在它的职责范围内表现出色:防止咖啡馆里的攻击者或流氓 ISP 窃听连接。但 TLS 在服务器处终止。加密隧道结束后,服务器处理的是原始文件明文。如果服务器被攻破——就像 Dropbox 2022 年部分源代码和用户数据泄露那样——TLS 对存储中的文件毫无保护。

E2EE 增加了第二层保护,即便服务器被攻陷也能生效。文件在触网之前就已加密,并保持加密状态,直到收件方的浏览器解密。即使数据库被整体导出,攻击者看到的也只有密文和元数据。

密钥传递难题的解法

E2EE 的难点在于在服务器不知情的情况下把密钥传递给收件方。现代基于浏览器的服务用 URL 片段技巧解决了这个问题。分享链接的形式如下:

https://hexatransfer.com/download/abc123#k=base64编码的256位密钥

浏览器将 # 之后的所有内容视为客户端片段。当你点击链接时,服务器在 HTTP 请求中只收到 /download/abc123——片段从不离开浏览器。JavaScript 随后通过 window.location.hash 读取密钥,获取密文,并使用 Web Crypto API 的 crypto.subtle.decrypt() 在本地解密。

这比 RSA 密钥交换或 Diffie-Hellman 更简单,任何有浏览器的人都能使用。代价是:任何持有链接的人都能访问文件,因此仍需通过安全渠道分享链接(Signal、当面告知、加密邮件)。

服务器能看到什么,看不到什么

正确实施 E2EE 后,服务器日志通常包含:随机文件 ID、密文大小、上传 IP、上传时间戳,以及用于去重的密文 SHA-256 哈希。它看不到:文件名、文件内容、收件方身份或解密密钥。文件名通常随内容一起加密,作为密文头的一部分存储。

一个实用的测试:询问服务商在收到传票时会提交什么。诚实的 E2EE 服务会回答"加密二进制块和 IP 日志"。如果他们能提供明文文件,那加密就不是端到端的。

底层使用的算法

真正的 E2EE 技术栈通常汇聚在一组经过充分审计的基础原语上:

  • AES-256-GCM 用于批量文件加密。GCM 同时提供机密性和认证性,被篡改的密文解密失败而非产生乱码。
  • PBKDF2(至少 10 万次迭代)或 Argon2id,用于在启用密码保护时从用户密码派生密钥。
  • SHA-256 用于完整性哈希。
  • TLS 1.3 作为外层传输,双重保险成本低廉。

应避免使用仍在用 AES-CBC 而没有 HMAC 的服务(容易受到 padding oracle 攻击)、使用 MD5 或 SHA-1 的服务(已被攻破),或 PBKDF2 迭代次数低于 1 万的服务(在现代 GPU 上可被暴力破解)。

文件传输 E2EE 与即时通讯 E2EE 的区别

Signal 通过 Double Ratchet 协议在即时通讯中普及了 E2EE,该协议在每条消息后轮换密钥以实现前向保密。文件传输不需要这种复杂性,因为它是一次性操作——你不需要维护持续的对话。每个文件一个对称密钥,每次上传时新鲜生成,既简单又便于审计。

文件传输比即时通讯额外需要的是:可恢复的分块上传(文件可达 10 GB)、跨分块的完整性验证,以及无需收件方注册账号即可使用的链接。Tresorit、Proton Drive、SwissTransfer 和 HexaTransfer 都采用这一思路,只在细节上略有差异。

如何验证一个服务是否真正端到端加密

在信任任何服务商之前,做四个实际测试:

  1. 上传小文件时打开 DevTools → Network。如果请求体中能看到明文,就不是客户端加密。
  2. 查看分享链接中 # 之后是否有密钥。没有片段密钥通常意味着服务器持有密钥。
  3. 阅读隐私政策,寻找"我们无法访问您的文件"的表述,并配有技术说明。
  4. 检查客户端代码是否可审计——开源或至少有文档说明。宣称 E2EE 但代码不透明是黄色预警。

能通过全部四项测试的服务:SwissTransfer(客户端加密档位)、Tresorit Send、Proton Drive 分享链接,以及 HexaTransfer。

E2EE 保护不了什么

E2EE 不是万能药。它无法保护你免受以下情况影响:

  • 终端被攻陷。如果你的电脑有恶意软件,攻击者在加密前就能读取文件。
  • 分享链接泄露。任何持有链接的人都可以下载和解密。
  • 密码保护传输中的弱密码。PBKDF2 会减慢暴力破解,但"summer2024"仍然转瞬即破。
  • 元数据关联。时间戳、文件大小和 IP 地址依然能拼出一个故事。

E2EE 应与限时链接(24 小时是合理的默认值)、下载次数限制(通常为 1 到 10 次)以及对敏感传输设置强密码配合使用。

快速自测方法

上传一个 5 MB 的测试文件,在隐私窗口中打开分享链接但去掉 # 之后的部分,尝试下载。真正的 E2EE 服务将无法解密。如果文件仍能打开,说明服务器自始至终持有密钥。

在 hexatransfer.com 上试试 — 免费、无需注册、最多 10 GB。

通过端到端加密安全发送大文件

通过端到端加密免费传输最大10GB的文件。无需注册账户。文件在上传前在浏览器中加密,其他人无法读取。

发送文件