9

背景

这个想法是这样的:

  • 个人提供在线购书的联系信息
  • 书籍,作为 PDF,标有唯一的哈希
  • 人下载书
  • PDF 密码易于绕过或共享

理想的过程是这样的:

  1. 根据联系信息生成哈希
  2. 在数据库中存储联系信息和哈希
  3. 获得书锁
  4. 使用散列文本更新“包含”文件
  5. 将书籍生成为 PDF(使用pdflatex
  6. 将哈希应用于预订
  7. 释放书锁
  8. 发送带有图书下载链接的电子邮件

技术

可以使用以下技术(也可以使用其他编程语言,但库可能仅限于主机提供的那些):

  • C、Java、PHP
  • 乳胶文件
  • PDF 文件
  • Linux

问题

我应该调查哪些编程技术(或开源软件):

  • 将唯一的哈希(或其他标记)嵌入到 PDF
  • 创建防串通攻击标记
  • 开发一个不易碎(例如,PDF -> EPS -> PDF仍然包含标记)的解决方案

研究

我研究了以下可能性:

  • 隐写术
  • 自然语言处理 (NLP)
  • 将 PDF 中的空白页转换为图像;标记这些图像;重新组装 PDF
  • LaTeX 水印包
  • ImageMagick

问题

我研究过的可能解决方案有以下问题:

  • 隐写术。(a) 需要图像的主副本,将其转换为 EPS,这是 CPU 密集型和耗时的;(b) 水印能否保留PDF -> EPS -> PDF,或其他类型的转换;(c) 大多数图像是图纸或屏幕截图,而不是 PNG 格式的照片。
  • 乳胶。创建图像缓存;任何隐写解决方案都必须以某种方式拦截该过程。
  • 自然语言处理。引入语法错误;可以改变技术词的含义。
  • 空白页。立即怀疑;替换可疑的空白页很容易。
  • 水印包。绘制可见标记。
  • 图像魔术。绘制可见标记。

还有哪些可能的解决方案?

相关链接

谢谢!

4

1 回答 1

2

我已经使用PDFlib为另一个项目完成了此操作。我们需要对生成的 PDF 进行追溯,以防文件泄露。基本上:

  1. 创建了包含内容的源模板 PDF,使用所需选项(无编辑、无打印、无屏幕阅读器等)设置文档主密码
  2. 在运行时,我们应用了一些水印(强加的页脚说“此文档已签出给用户 #12345”,设置一些带有用户 ID、下载 IP、下载日期/时间的元数据字段,添加了“此文档版权所有...”封面等...)
  3. 可以选择附加用户密码以在打开文档时强制 PW 提示。

由于最新的 PDF 版本使用 AES-128 进行加密,我们只需设置一个合适的随机生成的 128 字符高熵密码 - 没有人会手动输入,因此难以输入对我们来说无关紧要,实际上更可取。主密码阻止最终用户对文档进行任何更改。各种无打印/无屏幕阅读选项实际上是由 PDF 阅读器强制执行的,因此可以绕过,但无论如何设置它们也无妨。

这样做的缺点是 PDFlib 的许可相当昂贵。我不知道是否有任何免费的 php PDF 库支持最新的 PDF 加密方案,尤其是主密码的东西,但如果您的预算可以支持它,PDFlib 是安全文档制作的最佳选择。

于 2010-12-27T15:29:31.373 回答