如果Adobe在其文档安全性中实施了适当的加密技术,那么就很难轻易破解PDF系统,而且看起来在PDF加密中存在一些重大实施错误允许通过少量工作即可解锁文档的方案。
此类锁定的PDF文件使用的安全方案是什么?为什么这些PDF密码删除器花这么少的时间来破解它?
#1 楼
PDF保护有两种类型:基于密码的加密和用户界面限制。您正在描述第二种保护类型,即缺少复制和粘贴,打印等权限。如果PDF文件上有用户界面限制,查看器仍然需要解密内容才能在屏幕上显示它,因此您不会处于“基于密码的加密”方案中,在该方案中缺少用于解密文件的密钥。文档,但在“ DRM”方案中,您可以信任能够解密文件的应用程序(基于诸如主密钥的静态知识)仅执行作者希望他们执行的操作。没有什么可以阻止计算机专家对合法应用程序解密数据的方式进行逆向工程(不需要密码),然后自行执行解密。在文档解密之后,可以将权限“调整”为例如。包括打印许可或解密应用程序本身可以做事(例如复制所有位图图像)。
Adobe尝试阻止“流氓应用程序”,这些流氓应用程序允许您通过其对PDF规范的许可来规避使用限制:对于不遵守使用限制的应用,他们撤销了使用该规范中的(要求的)知识产权的许可。 AFAIK一些开源工具具有或具有构建开关,用于确定是否应遵守使用限制。对于销售“ PDF deprotector”软件的人来说,这是一个完美的起点。
在上述情况下,“用户密码”为空字符串。如果打开了受保护的PDF文件,则PDF阅读器需要尝试输入空用户密码。只有在密码有效性检查失败的情况下,用户才要求输入密码。 begueradj在他的答案中描述了密钥派生,如您所见,“ DRM权限”(/ P条目)输入了密钥派生,因此,如果您仅在受保护的PDF文件中“修复权限”,则符合要求的阅读器将派生密钥错误,无法打开文档。另一方面,如果PDF文件受到密码的完全保护(甚至禁止打开),则用户密码将不再为空,并且这种类型的PDF保护是相当安全的。
评论
KDE pdf阅读器在其设置中曾经有一个复选框“服从DRM限制”,如果没有其他选择的话,它可能是我遇到过的最著名的设置。
–user16214
15年8月3日在15:53
Okular仍然具有此选项(“设置”->“配置Okular”->“常规”->“ Obey DRM限制”),并且我认为默认情况下未启用:)
–dom0
17-12-28 17:09
#2 楼
Adobe的PDF锁定功能通过模糊处理来遵守安全规则。如果第三方软件能够解锁PDF文件,那是因为如果如果文件被加密,则它必然包含解密文件所需的信息。
生成PDF文件的加密密钥的方式如下:
1. Pad the user password out to 32 bytes, using a hardcoded
32-byte string:
28 BF 4E 5E 4E 75 8A 41 64 00 4E 56 FF FA 01 08
2E 2E 00 B6 D0 68 3E 80 2F 0C A9 FE 64 53 69 7A
If the user password is null, just use the entire padding
string. (I.e., concatenate the user password and the padding
string and take the first 32 bytes.)
2. Append the hashed owner password (the /O entry above).
3. Append the permissions (the /P entry), treated as a four-byte
integer, LSB first.
4. Append the file identifier (the /ID entry from the trailer
dictionary). This is an arbitrary string of bytes; Adobe
recommends that it be generated by MD5 hashing various pieces
of information about the document.
5. MD5 hash this string; the first 5 bytes of output are the
encryption key. (This is a 40-bit key, presumably to meet US
export regulations.)
此算法将用户的密码和其他一些数据作为输入。在这些数据中,您可以找到:
/Size 95 % number of objects in the file
/Root 93 0 R % the page tree is object ID (93,0)
/Encrypt 94 0 R % the encryption dict is object ID (94,0)
/ID [<1cf5...>] % an arbitrary file identifier
/Filter /Standard % use the standard security handler
/V 1 % algorithm 1
/R 2 % revision 2
/U (xxx...xxx) % hashed user password (32 bytes)
/O (xxx...xxx) % hashed owner password (32 bytes)
/P 65472 % flags specifying the allowed operations
软件将该算法用作解密过程:
1. Take the 5-byte file key (from above).
2. Append the 3 low-order bytes (LSB first) of the object number
for the stream/string object being decrypted.
3. Append the 2 low-order bytes (LSB first) of the generation
number.
4. MD5 hash that 10-byte string.
5. Use the first 10 bytes of the output as an RC4 key to decrypt
the stream or string. (This apparently still meets the US
export regulations because it's a 40-bit key with an additional
40-bit "salt".)
当然,这是加密/解密的一般方案,但是各种Adobe PDF版本之间或多或少存在差异。
进一步阅读
评论
此答案仅适用于旧的PDF版本,但解密程序也适用于较新的PDF版本。
–何三月
15年8月3日,12:33
@MarchHo正如我在答案结尾所说的那样,这是通用方案,不同Adobe PDF版本之间的差异更少。您无法了解所有有关它的内容,因为它遵循模糊的安全性原则
–user45139
15年8月3日,12:36
我们知道他们为什么使用如此薄弱的系统吗?这是“只是为了保护好管闲的同事Bob而不是让黑客Mallory离开而已”的情况之一吗?
–大卫说恢复莫妮卡
2015年8月3日14:04
简单-使其无法正常工作。您能想象一本可以阅读但不能复制的书吗?除非您完全锁定硬件,否则所有DRM系统都是易碎的。
–user158037
15年8月3日在15:16
#3 楼
用密码对PDF文件进行密码保护的主要问题是,您将安全性建立在密码的基础上,密码是人类某处想到的一些数据,这些数据足以傲慢地认为“不合情理”。事实证明,大多数密码都是可以猜测的。通过使密码到密钥的转换昂贵(这称为密码哈希),可以稍微改善这种情况,但是弱密码仍然很弱。第二个问题是,没有一种格式可用于PDF加密,但有几种。 PDF加密具有很长的自定义方案历史,当美国对密码识别软件制定了严格的,严格的出口规则时,第一个便已扎根。简而言之,为了允许软件导出而没有任何管理上的麻烦,加密货币必须要弱一点。因此,@ begueradj在他的回答中描述了加密格式:密码被散列,并且结果的前40位仅作为整个文件的“主密钥”。 40位密钥非常适合当今计算机的详尽搜索,这使整个加密过程成为一个笑话。现在可以制作高度加密的PDF文件,现代版本的Adobe Reader可以处理该文件(我亲自编写了一些代码来制作只能用智能卡解密的PDF文件),但是您必须明确地做到这一点。 br />
PDF的内部结构使情况更加复杂。 PDF是一组“对象”,其中一些是其他对象的流或原始数据。整个想法是该文档应适用于多种访问方式,例如跳到文档中的任何页面(可能在完全下载之前),或提取目录。由于加密是按流进行的,因此通常的结论是,可以在不破坏加密的情况下获得很多文档结构(例如,页面数,每个段落的长度,图片的数量,大小和位置... )。这是否是一个严重的问题,取决于上下文,尤其是为什么要加密。真正的问题在于,加密内容和不加密内容的决定是由某些通用软件决定的,根据定义,这些通用软件无法了解上下文。
实际上,密码的要点-保护PDF文件并不是要使窃听者真正了解它;应以清晰和不可避免的方式证明文件内容敏感,并且应谨慎处理文件。它等效于红色的“最高机密”邮票。
评论
(根据您的描述,听起来像这样的保护比破解密码要容易得多。)您必须将两种情况分开:1.真正加密的PDF,在您提供密码之前根本无法打开-这可能真的是很好的加密,而且不太容易破解。 AND 2.一个PDF,您无需密码即可打开/阅读,但不能打印/复制文本。这是一个大问题,因为如果您可以阅读文档,则无法对其进行加密:您的PC必须将所有字符打印到屏幕上,这与打印相同。因此,在这种情况下,密码只是一些人为障碍,而没有真正的加密/屏障
@Falco甚至具有封闭的规格并且不违反制图常规情况2也会很容易被击败:例如,在薄雾用户的能力范围内的Printscreen + OCR。这是一个典型的示例,它使许多合法用户的工作变得更加困难,而几乎没有降低预期的恶意用户的速度。
@ChrisH就是这样!读取PDF但需要打印密码才是当今PDF工作中无法真正确保的功能(通过HDCP将PDF内容流式传输到屏幕上可能有很多方法,但是不要去那里...)-所以最终,这仅仅是一种混淆,不能让依赖于此功能的“硬”可怜的用户-_
可以通过使用例如将已“保护用于打印”的PDF文件转换为“未保护”的文档。使用Ghostscript从渲染的文档中制作新的PDF。实际上,这很容易做到(单行shell命令),与加密无关。 Ghostscript知道如何呈现和编写PDF,因此将受保护的文档呈现给不受保护的对象没有困难。