使用RC4加密的PDF会忽略权限

时间:2019-01-25 14:14:28

标签: pdf encryption

我遇到一个我无法解释的问题。

我制作了一个PDF文件,然后决定使用旧的RC4格式对其进行加密。 完成后,我会得到一个“加密”文件。

读取该文件的内容表明该文件已加密,并且权限正确,即:

3 0 obj
<<
/Filter /Standard
/V 2
/Length 128
/R 3
/P -3904
/O <F0299DA33B3988E77ECC4A968F58C8DE50BA19D282C3E9C17E95395E8DCAC43E>
/U <A385DE2CD85CA37B5B365C99EEB05FF228BF4E5E4E758A4164004E56FFFA0108>
>>
endobj

(-3904表示完全没有权限,see this for reference)。

但是奇怪的是,如果我在各种PDF阅读器上打开它,然后通过用户密码(而非所有者密码)访问文档,我可以做我想做的:打印,复印,大部分修改,基于文档中的当前权限应予以禁止。

对于默认的Linux PDF查看器和Firefox阅读器(根据我的测试),这是正确的说法,但Chrome浏览器遵守权限

由于Chrome浏览器尊重权限,这意味着它们是正确的(或者是?),但是为什么其他读者却不尊重权限?

如何复制它?

  • 获取所需的任何PDF,然后转到https://www.sejda.com/encrypt-pdf
  • 提交文档
  • 设置密码并点击“更多选项”
  • 设置其他所有者密码(“需要密码才能更改权限”)
  • 什么都不允许(不检查任何内容)
  • 将加密设置为“中等(RC4 128位)”
  • 点击提交

打开文档,输入用户密码(而非所有者密码),然后打印文档... tada,可以! 您不应该

更新:对于任何加密方案(RC4,AES),都会发生相同的情况。以用户身份打开文档后,即使权限另有说明,您也可以进行复制和打印。

为什么有可能?

2 个答案:

答案 0 :(得分:1)

并非所有PDF软件都是一样创建的,这似乎是FireFox中的错误,而不是Chrome中关于通过限制用户访问来尊重文档创建者意图的Chrome中的错误。

我用自己的PDF查看了您的说明,当我在Acrobat DC中打开生成的加密文档时,它正确地不允许打印或导出图像。我还可以确认查看文档属性是否正确设置了权限。这告诉我,加密的PDF的创建方式没有任何问题,但这是该PDF查看器如何尊重其权限的问题。

答案 1 :(得分:1)

严格地说,pdf规范要求,符合规范的pdf阅读器必须遵守权限,但同时也清楚表明,PDF格式本身并没有强制执行

例如根据ISO 32000-1:

from the specification

因此,实现尊重他们的“功能”并不是高度优先...