是否可以在 PDF 中添加不引人注意的“签名”以追踪其副本?

是否可以在 PDF 中添加不引人注意的“签名”以追踪其副本?

假设我想生成 100 个看似相同的 PDF 文件,并在其中隐藏某种密钥,以便将它们分发给 100 个不同的人。现在我检测到该文档的在线共享副本,我需要跟踪这 100 人中谁上传了它。

我的第一个方法是以某种方式编译它们(也许通过命令行传递参数?) 例如在其hyperrefPDF 关键字中包含一些“UserNr001”、“UserNr002”... 标签。

我想要的是一种更微妙的方式来标记.tex文件中的 PDF。

可能相关:电子签名如何创建可以数字签名的 PDF 文件?

答案1

PDF 信息条目

可以通过 设置附加条目hyperref,例如:

\hypersetup{
  pdfinfo={
    User={John Doe},
    % ...
  },
}

一些 PDF 查看器无法显示非标准条目,但其他查看器可以(据我所知较新的 AR/Win 版本)。

向 PDF 数据结构添加数据

键值对可以放入字典中,例如:

\pdfcatalog{/User (John Doe)}

甚至可以制作一个物体:

\immediate\pdfobj{(John Doe)}
\pdfcatalog{/User \the\pdflastobj\space 0 R}

重要问题包括:

  • 它应该是有效的 PDF 代码,否则 PDF 查看器可能会抱怨。该示例使用名称对象作为键“/User”,并使用 PDF 字符串 (John Doe)作为值。
  • 数据应链接到现有的使用对象。后一个示例将创建的对象链接\pdfobj到目录。否则,可以通过后期处理删除未使用的对象。

使用/修改现有数据

\pdfcreationdate 可以通过为用户分配不同的秒数来更改文档的创建日期。

改变输出

之前的方法在将 PDF 文档打印成新的 PDF 文档后无法继续使用。因此,输出可能会略有变化,例如,针对不同版本在某些地方将单词间距调大/调小。

数据保护

我不会使用上面例子中的纯代码(为了简单起见),而是使用某种 MD5/SHA/... 或数据的加密版本,并将它们安全地添加为十六进制转储。

然后,如果您找到在线副本,您可以验证嵌入的数据是否正确且未被上传者更改。否则上传者可能会恶意更改数据以声称是他人所为。

PS:示例代码针对的是 pdfTeX,如果其他驱动程序支持相同功能,则需要其他命令/特殊命令。

答案2

如果您想以一种谨慎且难以改变的方式来做到这一点,我建议在您的 PDF 中添加一张图像,在其中使用隐写术(使用图像像素中的低阶位)隐藏您想要的信息。

然后,当给定分布式版本时,您可以再次提取所述图像并查看像素值以解码隐藏的信息。

相关内容