PDF 加密讲解:AES-128 究竟保护了什么
给 PDF 加密意味着什么,AES-128 如何工作,打开密码与权限之间的区别,以及密码保护覆盖了什么、又没覆盖什么。
你给一份 PDF 加上了密码,文件现在感觉安全了。但那个密码究竟做了什么?PDF 加密这个词被像咒语一样到处乱用,而大多数人从来没弄清它覆盖了什么、又在哪里失效。这里是大白话版本。
「给 PDF 加密」是什么意思
一份 PDF 是一个装着各种对象的容器:文字、图像、字体、页面布局。当你给它加密时,那些内容的字节会被一个密码算法打乱,而要把它们读回来的唯一办法,就是用正确的密钥。在加密之前用文本编辑器打开这个文件,你能认出一串串可读的内容。加密它,同一片区域就变成了噪声。
你敲进去的密码本身并不是密钥。PDF 格式会把你的密码送过一个密钥派生步骤,由此产生真正的加密密钥。这就是为什么一个更长、更不显眼的密码很要紧:文件的破解难度,顶多和喂给密钥的那个密码一样高。
AES-128 是引擎——而这就是那个诚实的数字
reader.me 的保护 PDF工具用 AES-128 加密。不是 AES-256。我们宁愿告诉你真实的数字,也不愿在横幅上印一个更大的。
AES 是 Advanced Encryption Standard(高级加密标准)的缩写,是各国政府和银行多年前就定下来用的那个密码算法。那个 128 是以比特计的密钥长度。一个 128 位的密钥有 2^128 种可能的取值,这个数字大到用现存的任何硬件去暴力破解都不是一个现实的攻击。AES-256 用一个更长的密钥,人们常常以为那会让它「安全一倍」。它不是那样运作的。AES-128 没有可行的破解办法。一份密码保护的 PDF 里的薄弱点,几乎从来都不是密码算法,而是密码本身。
如果你想要更深入的机理,AES 加密词条会带你走一遍密钥长度和加密轮数,没有那些营销光环。
所以当有人递给你一份用一个六字母的字典单词锁住的 PDF 时,AES-256 也救不了它。攻击者不会去攻击那套数学。他们会去猜密码。在 AES-128 上用一句长口令,每一次都胜过在 AES-256 上用一个弱密码。
打开密码 vs 权限
PDF 安全有两种口味,把它们搞混会带来一种虚假的安全感。
打开密码(有时叫用户密码)才是真正的锁。没有它,文件根本打不开。内容在磁盘上保持加密,在密码被输入之前没人能读到一个字。这才是值得在意的那种保护。
权限密码(所有者密码)则不同。文件对任何人都能打开,但它带着一些标志位,请求查看器去阻止打印、复制或编辑。问题在于:那些标志位是请求,不是墙。文档在技术上是可读的,而且不少软件干脆完全无视这些限制。权限是一层礼貌。它能拦住一个诚实的用户去打印,却拦不住一个铁了心要把文字抠出来的人。
所以如果你的目标是让一份文档保持私密,你要的是打开密码。那才是给内容加密的东西。单凭权限,会让文件对任何选择不去遵守它们的程序都保持可读。
它保护什么,又不保护什么
用 AES-128 做的密码保护,把一件具体的事做得很好。它让文件对任何拿到副本却没有密码的人都变得毫无用处。邮件被转发给了错误的人,一个 U 盘丢了,一个共享盘开放得太宽。在所有这些情形里,一份加密的 PDF 都是一个锁住的盒子。对一张发票、一份合同、一份病历或一张证件扫描件来说,这是实实在在的保护。
它不做的事:
- 它不保护一个已经被打开的文件。 一旦有人输入了密码,内容就在内存里和屏幕上被解密了。他们可以截图、复制,或存下一份不设防的副本。
- 它不隐藏文件的存在,在某些情况下也不隐藏它的名字、大小或元数据。
- 它修不好一个弱密码。 短的或常见的密码可以离线被猜出来,没有任何密码算法能挽救一个糟糕的密码。
- 它扛不住和密码一起被分享。 如果你把两者放在同一个邮件线程里发出去,你就等于锁了门,又把钥匙粘在了门上。通过一个单独的渠道发送密码,比如打个电话。
而如果一个文件落到你桌上时已经锁着,又恰好密码在你手里,你可以用解锁 PDF在本地把它去掉,好让文档更方便处理,全程不涉及上传。
它发生在你的机器上
这里是对一个隐私优先的工具来说最要紧的部分。所有这些加密都在你的浏览器里运行。你的 PDF 被读进内存,就在你的设备上用 AES-128 加密,再作为一个你下载的、新的锁住的文件写出来。它从不会被送往服务器。密码也从不离开你的机器,因为它没有任何地方可去。
这就是全部要点。给一份文档加密最私密的办法,就是一开始就根本不让它跑出去。在它所在之处把它锁上,然后按你自己的方式去分享那份锁好的副本。