安全架构

PDF Pro 隐私声明的实际工作方式。

本页面上的所有内容均可在你的浏览器开发者工具中验证。核心原则:即使我们想访问你的文件,也不应该能做到。以下是该原则如何在加密、存储和请求层面得以执行的说明。

memory客户端 WebAssembly 与 JS lockAES-256-GCM verifiedECDSA P-256 cloud_off客户端加密存储

四大架构支柱

四项技术选择决定了安全态势。它们由在你浏览器中运行的代码来执行,而非依赖政策文件。

memory
1. 本地优先处理
PDF 查看、注释、表单填写、压缩、合并、转换和签名完全在你的浏览器中通过 WebAssembly 和 JavaScript 运行。对于这些工具,文件数据永远不会离开你的设备——可在网络面板中验证。
key
2. 密钥在客户端生成
当你需要共享文件时,加密密钥由你标签页内的 Web Crypto API 生成。它存在于内存中、URL 片段中,或者(在密码短语模式下)在接收方设备上通过 PBKDF2 派生。服务器永远看不到它。
cloud_off
3. 客户端加密存储
存储的仅有 AES-256-GCM 密文加上初始化向量(在密码短语模式下还有 PBKDF2 盐值)。没有密钥,这些数据在密码学上与随机字节无异。即使获得根数据库访问权限,也无法帮助我们解密它。
policy
4. 诚实的 AI 边界
AI 工具(对话、摘要、翻译)需要可读文本才能工作。我们在客户端提取文本,仅将文本发送给模型提供商——从不发送 PDF 文件本身、图片或嵌入的附件。详情请参阅下方的 AI 章节。

加密流程(安全传输)

逐字节演示:当你将 PDF 放入安全传输并共享生成的链接时,会发生什么。以下每个步骤都在浏览器中运行,密文存储除外。

发送方——浏览器内
// 1. generate a fresh 256-bit key key = crypto.subtle.generateKey({name:"AES-GCM", length:256}) // 2. random 96-bit IV per file iv = crypto.getRandomValues(new Uint8Array(12)) // 3. encrypt the PDF bytes locally ct = crypto.subtle.encrypt({name:"AES-GCM", iv}, key, pdfBytes) // 4. upload ciphertext + iv — nothing else id = await fetch("/api/transfer", {method:"PUT", body: ct, headers:{"x-iv": hex(iv)}}) // 5. build the share link with the key in the URL fragment (#) link = `https://pdfpro.tools/s/<ID>#<KEY>`
服务器——仅存储密文
ciphertext = opaque bytes // cannot be decrypted without the key iv = 12-byte nonce expiry = 24 h (free) / 30 d (Pro) // the URL fragment (#...) is NEVER sent to the server by browsers
接收方——浏览器内
// 1. browser loads the page; the "#..." fragment stays client-side rawKey = location.hash.slice(1) // 2. fetch the ciphertext ct = await fetch("/api/transfer/" + id) // 3. decrypt locally using Web Crypto pdf = crypto.subtle.decrypt({name:"AES-GCM", iv}, importKey(rawKey), ct) // 4. file ends up in the recipient's Downloads folder

安全保证的关键在于发送方第5步和接收方第1步:符合规范的浏览器不会将 # 之后的 URL 片段传输至服务器。这就是为什么链接本身就是解密凭证。

密码短语模式将发送方第1步替换为 PBKDF2-SHA256(passphrase, salt, 310_000)。盐值存储在服务器端;密码短语通过带外渠道与接收方共享。

签名流程(ECDSA P-256)

PDF 签名使用基于 NIST P-256 曲线的 ECDSA。私钥在你的浏览器中生成;文档永远不会离开你的设备。

key
私钥生成
通过浏览器中的 crypto.subtle.generateKey 生成一个 ECDSA P-256 密钥对。私钥以密码包装的 JSON Web Key(JWK)格式导出,可供你本地存储。
fingerprint
SHA-256 哈希与签名
PDF 字节在客户端以 SHA-256 进行哈希处理,该哈希值由私钥签名,签名嵌入到 PDF 的 CMS 容器中(PAdES-B-B 规范)。
verified
可离线验证
持有公钥(随文件分发或以指纹形式提供)的任何人均可离线验证签名,无需服务器往返。
gavel
本功能的局限性
我们的签名在密码学上可验证,但不属于 eIDAS 规定的合格电子签名(QES)。它们是防篡改的完整性证明,适用于内部工作流程,不具备法规级别的法律约束力。

AI 功能——我们对边界的诚实说明

AI 对话、AI 摘要和翻译功能需要可读文本。以下是确切说明:哪些数据会离开你的设备,哪些不会。

description
文本在浏览器内提取
PDF 通过 pdf.js 在本地解析。只有提取出的文本(对于扫描版 PDF,为 OCR 输出)保存在内存中——原始文件留在你的设备上。
outbound
仅向提供商发送文本
我们将该文本字符串发送给 AI 提供商(Anthropic / OpenAI)。PDF 本身、嵌入图片、字体和表单数据从不上传至任何 AI 模型。
block
不使用你的内容进行训练
我们的提供商合同禁止使用客户内容进行训练。请求是无状态的——每个请求仅限于你的会话范围。
info
何时需要注意
如果你的文档包含受监管内容(受保护健康信息、机密信息、受法律特权保护的内容),即使文本提取也属于敏感操作,请跳过 AI 功能,使用本地工具(查看、注释、签名、压缩、转换)——这些工具100%在浏览器中运行。

威胁模型——我们能防御什么,不能防御什么

清晰说明威胁模型比营销宣传更有价值。以下是架构实际能阻止的内容,以及其局限所在。

shield架构能防御的攻击

  • PDF Pro 员工在我们服务器上读取你的文件(我们从不持有密钥)。
  • 传输存储的数据库级别泄露(攻击者看到的是密文,而非文件)。
  • 法院强制披露文件内容(我们只能提交密文——这也是我们所拥有的全部)。
  • 邮件服务器保留敏感附件(没有任何内容会经过你的邮件服务器)。
  • 已签名 PDF 遭到篡改(ECDSA 签名验证能检测任何字节变化)。

warning任何基于浏览器的工具都无法防御的攻击

  • 受损的终端设备(你设备上的恶意软件)——密钥存在于内存中,设备本身必须是可信的。
  • 有人在旁窥视 URL 片段——请像对待文件本身一样保护共享链接。
  • 密码短语模式下使用弱密码——PBKDF2 能减慢暴力破解速度,但不能使6位密码短语变得安全。
  • 接收方转发已解密的文件——传输安全在接收方保存 PDF 时即告终止。
  • 浏览器本身遭受攻击,或恶意扩展程序注入页面。

不做「无法被黑客攻击」的声明。端对端加密显著提高了泄露的成本——但不能消除所有风险,尤其是在终端层面。对于最敏感的情形,请将安全传输与单独的密码短语及可信渠道的密钥交换结合使用。

常见问题

PDF Pro 能解密我的文件吗?
不能。加密密钥在用户浏览器中生成并保存。对于安全传输,服务器仅存储 AES-256-GCM 密文加上初始化向量(密码短语模式下还有盐值)。密钥从不到达我们的基础设施。即使拥有完整的数据库访问权限,我们的运营人员也无法解密你的文件。
哪些操作在本地运行,哪些在服务器上运行?
查看、注释、表单填写、压缩、合并、转换和签名全部通过 WebAssembly 和 JavaScript 在你的浏览器中100%本地运行——文件数据从不离开你的设备。AI 功能(对话、摘要、翻译)在本地提取文本,仅将该文本(而非 PDF 本身)发送给模型提供商。
PDF Pro 使用哪些算法?
对称加密使用 AES-256-GCM(安全传输),密码短语派生密钥使用迭代次数为310,000次的 PBKDF2-SHA256,数字签名使用基于 NIST P-256 的 ECDSA,文档哈希使用 SHA-256。所有这些均通过浏览器原生的 Web Crypto API 运行,该 API 经过审计、符合标准,并非由我们实现。
这是具有法律约束力的电子签名吗?
PDF Pro 的签名在密码学上可验证(基于 SHA-256 哈希的 ECDSA P-256,PAdES-B-B 规范),但不属于 eIDAS 或同等法规规定的合格电子签名(QES)。要达到 QES 级别的法律约束力,需要经认证的信任服务提供商。
如果我忘记密码短语或丢失共享链接,会怎样?
文件将永久无法恢复。这是端对端加密的取舍——没有恢复路径,因为我们从来就没有持有过密钥。请将密码短语保存在密码管理器中,并将链接存放在可靠的地方。
你们是否保留文件活动的服务器端日志?
我们保留运营日志(请求时间、错误代码、用于限速的IP地址),但从不记录明文文件内容或加密密钥。日志按短期计划保留——请参阅我们的隐私政策了解当前保留期限。
法院命令能迫使你们披露我的文件吗?
我们只能提交我们所拥有的内容:密文。没有解密密钥——它保存在发送方设备上或接收方持有的 URL 片段中——该密文无法被解密。传票无法追溯恢复一个我们从未存储过的密钥。
我在哪里可以自行验证这些密码学声明?
打开浏览器开发者工具 → 网络面板,观察安全传输上传过程中离开页面的数据。你会看到密文被 PUT 到服务器,而非原始 PDF。加密代码调用的是 Web Crypto API,它内置于你的浏览器中——不是我们的代码——任何人都可以检查。

隐私是架构,而非营销。

亲自尝试安全传输,并检查网络面板。任何文件都不会以明文上传。

lock试用安全传输