客户端加密PDF分享,原理清晰透明。
「端对端加密」常被随意使用。以下是客户端加密PDF链接背后真实的密码学机制——AES-256-GCM、密钥处理方式、片段模式与密码短语模式,以及服务器实际上无法做到的事。注意:本页中「零知识」指服务器不持有任何可解密你文件的信息,而非正式的零知识证明(ZKP)——本产品不使用ZKP。
本页「零知识」的含义
先做一个快速说明:本系统不使用零知识证明(ZKP)。本页中「零知识」指的是一个更弱但实际有用的属性——存储你共享文件的服务器在密码学和操作层面都无法解密它。密钥从未接触服务器,因此服务器在任何情况下都无法泄露密钥。机制是纯粹的客户端加密,加上仅在URL片段中传输的密钥(或由服务器从未见过的密码短语派生)。
window.crypto.subtle完成。可在DevTools中验证。客户端加密PDF链接的构建过程
详解发送方浏览器、服务器和接收方浏览器各自的操作——附实际Web Crypto调用。
片段模式 vs 密码短语模式
两种将密钥传递给接收方的方式。密文保证相同,但易用性与泄露风险各有权衡。
密钥存于URL哈希(#)中
最简单的流程:复制链接,粘贴发送给接收方,完成。URL中#后的部分从不被任何合规浏览器发送至任何Web服务器——这正是密钥保持私密的原因。
- 接收方只需一步——点击链接。
- 操作简便,适合低至中等敏感度的分享。
- 风险:若链接通过截图或浏览器同步泄露,文件也随之泄露。
- 适用于信任传输渠道时(加密通讯软件、内部聊天)。
密钥由密码短语派生(PBKDF2)
发送方选定密码短语。浏览器通过PBKDF2-SHA256,使用随机128位盐值进行310,000次迭代,派生出256位密钥。盐值存于服务器端;密码短语通过带外方式共享(电话、Signal、面对面)。
- 双因素分享:链接和密码短语分别传递。
- 仅有链接不够——密文无法读取。
- 密码短语强度很重要:310,000次迭代可减缓暴力破解,但无法拯救6位字符的弱密码。
- 当链接可能被转发或存储在你不完全信任的地方时使用。
| 属性 | 片段模式 | 密码短语模式 |
|---|---|---|
| 密钥载体 | URL哈希(#) | 密码短语 + 盐值 |
| 服务器是否见过密钥 | 否 | 否 |
| 服务器存储内容 | 密文 + IV | 密文 + IV + 盐值 |
| 接收方操作难度 | 点击链接 | 点击链接 + 输入密码短语 |
| 可通过截图泄露 | 是(链接即密钥) | 否(仅链接无用) |
| 抗暴力破解 | 256位随机数 | 取决于密码短语 |
| 最适合 | 通过可信渠道低摩擦分享 | 较高敏感度的分享 |
服务器存储密文仍能保护你的原因
人们常问:「如果文件在你的服务器上,怎么可能是私密的?」答案是密文不是文件本身。没有密钥,它只是看起来像随机字节。以下是这在实践中意味着什么。
warning诚实的局限性
客户端加密无法解决端点安全问题。发送方或接收方设备上的恶意软件可以从内存中窃取密钥。被攻击的浏览器扩展可以读取解密后的文件。在群聊中转发链接会使所有密码学保证失效。该架构提高了遭受攻击的成本,但并不能消除所有风险。
客户端加密 vs 其他「安全」选项
常见PDF分享方式的清晰对比。大多数标榜「安全」的选项仅使用传输加密——它们保护传输中的数据,但接收方服务器仍持有明文和密钥。
| 选项 | 传输中TLS | 服务器可读取文件 | 过期 | 接收方账户 |
|---|---|---|---|---|
| 邮件附件 | 通常是 | 是——每个节点都可以 | 永久 | 不需要 |
| 通用云分享链接 | 是 | 是 | 可选 | 有时 |
| 密码保护的PDF | 是 | 是(若主机持有文件) | 从不 | 不需要 |
| PDF Pro(片段模式) | 是 | 否 | 24小时 / 30天 | 不需要 |
| PDF Pro(密码短语模式) | 是 | 否 | 24小时 / 30天 | 不需要 |
相关阅读
需要信任的分享 vs 零知识 实时竞赛
同一目标——分享PDF。并排观察两种信任模型的完成过程。
- 将PDF上传至服务器
- 服务器持有明文明文
- 服务器承诺删除信任
- 对方存在泄露风险风险
- 接收方下载明文已暴露
- 在浏览器中加密PDFE2E
- 服务器仅持有密文零知识
- 接收方本地解密完成
常见问题
客户端加密PDF分享究竟意味着什么?
PDF Pro的客户端加密分享使用什么加密方式?
片段模式和密码短语模式有什么区别?
#之后)中,浏览器从不将其发送至任何服务器。拥有完整链接的任何人都可以解密。密码短语模式从发送方选定的密码短语派生密钥;没有密码短语,密文保持不可读。若链接泄露,密码短语模式更安全;片段模式更适合低摩擦分享。请参阅上方对比表。URL片段作为加密密钥载体真的安全吗?
#之后的部分)传输至服务器。它仅存在于客户端,只对接收方标签页中运行的JavaScript可见。这正是分享链接本身成为解密凭据的原因——密钥随接收方传递,而非随上传传递。你可以在浏览器的网络面板中验证:请求URL在?或#处被截断。