文件传输

威胁模型

端到端加密的文件传输,全程不上传

大多数网盘说的「加密」是指传输加密加存储加密 —— 两把钥匙都在服务商手里。这里的密钥由两个浏览器当场协商、且从不离开浏览器,这是另一句话:就算我们想看,也读不出你的文件。

一句话回答

什么样才算端到端加密的文件传输?

判断标准只有一条:两端协商出的密钥,中间任何一方都不曾持有。这里双方浏览器用 ECDH P-256 推导出共享密钥,每个数据块再用 AES-256-GCM 单独封装;服务器只负责牵线,手上没有密钥、没有密文,也没有文件可以交出去。

传一份不方便上传的东西

将连接码提供给对方,对方输入后即可建立连接

密钥在连接时于浏览器内生成,关掉页面即销毁。

怎么用

  1. 1

    密钥在文件所在的地方生成

    两端各自在本地生成 ECDH P-256 密钥对,只交换公钥部分;共享密钥通过 HKDF 在两边各自推导出来,本身从不上网。

  2. 2

    由你来确认中间没有人

    连上之后,两边屏幕会显示同一组安全校验词,它由共享密钥推导而来。念给对方听,一致就说明没有第三方分别和你们各协商了一把钥匙。

  3. 3

    每一块都单独封装

    文件的每个数据块在离开你的机器前就用 AES-256-GCM 加密。被篡改或被截断的块通不过认证,传输会中止,而不是把坏数据写到硬盘上。

「加密」其实是三种不同的承诺

说法谁能读到文件常见于
传输加密(TLS / HTTPS)服务商 —— 文件到了它那儿就是明文几乎所有网站
存储加密服务商 —— 钥匙在它手里网盘、上传型快传
端到端加密只有两端本站
一个能给你生成预览缩略图、能扫描违规内容、能在你丢了链接之后帮你找回文件的服务,按定义就是能读到你的文件。

差别在有人来要数据的时候才显形:一次调证、一份泄露的备份、一个权限过大的内部工具、三年后改掉的一版隐私政策。手上有明文的服务商,就有东西可以交出去;这里既没有副本,也没有能拿出来的密钥。

我们的服务器到底能看到什么

两个互不知道对方地址的浏览器,仍然需要一个信令服务来互相介绍。把经过它的东西列清楚,比任何一枚安全徽章都有意义:

  • 6 位连接码:短时保存在内存里,好让第二个浏览器找到第一个。
  • 连接协商信息(SDP 与 ICE 候选):里面是网络地址,不是文件数据。
  • 任何 Web 请求都会有的那些事实:IP、时间戳、限流计数。
  • 看不到文件名、大小和内容 —— 这些是握手完成之后在加密通道里交换的。
  • 看不到加密密钥 —— 它在两端各自推导,从不传输。
  • 不存储你的文件 —— 因为文件根本不经过它。

加密保护不了的部分

  • 对方本人。文件到了他手里就是他的了 —— 加密管的是管道,不管管道另一头发生什么。
  • 任一端被入侵的设备。你电脑上的恶意软件在文件被加密之前就能读到它。
  • 网络层面的元数据。运营商能看到两个地址之间交换了大量加密数据,只是看不出内容是什么。
  • 跳过核对安全校验词。挡住中间人的正是这一步;两边都不念,就等于闭着眼睛信任这次握手。

常见问题

这到底是端到端加密,还是只有 HTTPS?

两者都有,而且是两层。HTTPS 保护页面和信令;在它之上,两个浏览器用 ECDH P-256 协商密钥,对文件的每个数据块做 AES-256-GCM 加密,所以中间任何环节 —— 包括我们 —— 拿到的都是读不懂的密文。

安全校验词是干什么的?

它由共享密钥推导而来,只有双方协商出同一把钥匙时才会一致。念一遍就能确认没有人挤进握手中间。五秒钟的事,而且这是软件没法替你做的那一步。

如果有人要求你们交出我的文件呢?

没有东西可以交。文件从不上传、从不存储,密钥只在连接期间存在于两个浏览器里。

你们记日志吗?

信令服务会保留它必需的房间状态,带很短的有效期,另外还有常规的限流数据。文件名和文件内容根本到不了它那里,也就无从记录。

为什么是分块加密,而不是整个文件加密一次?

因为要流式传输。每个块自带认证标签,损坏或篡改在到达时就会被发现,而不是等几十 GB 下完才报错;断点续传也能从一个干净的块边界继续。

这能满足公司的合规要求吗?

这个要问贵司负责合规的人。我们能明确说的是机制本身:服务端没有副本、服务端不持有密钥、端到端加密且算法公开。我们不做任何认证方面的声称。

传一份你本来不愿意上传的东西

合同、体检报告、证件照、还没发布的作品 —— 这类文件的「它最后去哪了」应该有个确定的答案。

开始传输