关于pdf加密

Posted by mjTree on January 2, 2024

更新于:2024-03-08 16:30

一、关于加密文档

从 PDF V-1.1 版本开始,PDF 文档可以使用各种行业标准方案进行加密,这些方案多年来增加了复杂性和安全性。 此外,PDF 标准还提供了封装第三方加密和安全策略的一般机制。除少数例外情况外,加密适用于文件中的流和字符串,但不加密数字或其他PDF数据类型,也不对整个文件进行加密。因此,文档的对象结构在不需要解密的情况下对应用程序仍然可见,但是文档的实质内容得到了保护。

二、加密分类

加密分为 User Password 用户口令,Owner password 权限口令。用户口令可以理解成是读权限/读加密,权限口令可以理解成是写权限/写加密。两者共同点是设置密码之后,PDF 文件内容都会被加密,不同点则是权限口令会比用户口令多了权限校验。那么问题来了,设置权限口令加密了文件内容,那么为什么软件可以打开看到正常的内容呢?

三、加密逻辑

借用上篇文章中的 样例文件,下面通过 pdftk 工具将文件设置密码 加密文件。之后再借用 SublimeText 这类的软件工具打开转换后的 pdf 文件内容,观察前后内容发生的变化。

pdftk hello.pdf output encrypted.pdf user_pw foopass

permission

1、构建加密对象

1、基于提供的加密算法生成对象,常见的加密算法有40-bit RC4(PDF 1.1)、128-bit RC4(PDF 1.4)、128-bit AES Encryption(PDF 1.5)、256-bit AES Encryption(PDF 1.7 ExtensionLevel 3)。该对象是用于描述密钥以及权限等信息,下面截取了一部分加密文件的信息用于展示。

6 0 obj 
<<
/V 2  % PDF加密版本
/Filter /Standard  % 生成密钥的方法,这里表示使用标准的加密过滤器
/U (***)  % 用户口令的加密哈希值
/Length 128  % 密钥长度,这里是128位
/R 3  % 修订版号,这里是第3版。
/P -3904  % 权限标志,描述用户能对PDF做的操作(如打印、修改等)
/O (***)  % 权限口令的加密哈希值
>>
endobj

/U/O字段包含的是对应用户口令和权限口令的加密信息,这里是存储了密码的哈希值,基本不可逆。/P字段的值是一个标志位集合,展示文件的使用权限,这个对象是PDF文件加密机制的一部分,用于控制对文件的访问和编辑权限。

2、修改PDF对象

通过加密的对象,把文件中所有需要被加密的 PDF 对象(如文本流、图像等)都使用生成的密钥进行加密,然后把加密后的内容替换原始内容。

confuse

3、其他信息调整

trailer中会通过关键字/Encrypt引用这个加密对象的 ID,并且记录对象的 Size 增加也会因为新增一个加密对象而增加;xref会添加这个加密对象的占位信息;在%%EOF的前一行会完善文件大小信息。

4、读取加密文件

通过上面介绍可以得知,加密的对象是 pdf 文件中的流和字符串,不对整个文件进行加密。因此文档的对象结构还是完整的,即使不知道密码的情况下对应用程序仍然可见,而且文档的实质内容得到了保护。当读取文件时可以通过检查trailer字典中是否存在/Encrypt来判断文件是否加密。解密流程如下:

1、读取加密对象字典的内容,并确定加密类型。
2、用户密码经过身份验证(使用单向算法进行处理,并与加密字典中的/U条目进行比较)。
3、使用另一算法,计算加密密钥。
4、通过密钥用于解密文件中的加密信息。
5、读取权限,并在对文件执行的任何进一步操作中强制执行。
6、每个步骤使用的实际算法取决于使用的加密类型。

要使用所有者密码进行解密,请遵循类似的过程,但不需要应用权限。如果使用用户密码打开文件,稍后输入所有者密码,则可以放宽权限。

四、构建加密对象

上面用一句官方术语略过了构建 pdf 文件的加密对象,这里详细讲解一下,并且把第二节内容提到的问题解答一下。

我通过软件给一个 pdf 文件设置了权限口令,把该口令的字符串补充/截取到 32 位字节,然后计算 MD5 值,通过相关步骤(md5前几位当RC4密钥,对32位字节加密等等)生成/O字段。使用默认的32位字节,通过相同的步骤生成/U字段,这就是设置权限口令但是软件打开文件得到正确信息的原因。软件最后通过用户口令,经过一些理步骤产生全局加密密钥,使用这个全局加密密钥对 PDF 文件中正文对象内容进行加密。

五、常见解密工具

PDF 解密工具有很多,有在线网站解密,也有 github 上面开源工具。但解密的原理万变不离其宗,都是通过密码字典去暴力破解。这边给大家推荐一个比较好用的在线网站工具 ilovepdf

六、小结

本篇文章简单讲解了 PD F文件的加密逻辑,通过 PDF 文件以及文件内容给大家展示了加密逻辑是如何实现的。