文件安全 - 如何找到谁泄露了机密文件?

信息安全 身体的 pdf
2021-09-04 06:01:16

我有法律义务向数百名收件人分发文件(可能通过电子邮件,可能保存为 MS Word 或 PDF)。

收件人在法律上有义务对其保密。但是,根据过去的经验,我很确定它最终会很快被公开泄露。(过去它是逐字免费分发的)

这种情况以前发生过,这是一个严重的问题,会给我们造成经济损失,我真的很想制止这种情况并找出不法分子。

我知道 John Le Carre 的技术使每个文档都略有不同(这里缺少句号,那里有轻微的错字等),但是有数百个收件人制作数百个相同基本文档的唯一可识别副本将是一个非-琐碎的任务。

有没有办法自动化这个?还是有更好的方法来找出谁在泄漏?

更新 - 文件每年发布 2 或 3 次。过去,整个 pdf 已在公共或半公共论坛上逐字发布,通常在分发后的几天(有时是几小时)内。在其他情况下,文件已通过电子邮件从“burner”帐户(通常为 gmail)重新分发

  • 发布该文件是为了履行各种法律义务,因此信息必须准确。它还必须发送给各个接收者。因此,更改任何数据都不是一种选择,但没有禁止犯拼写/语法错误的法律
4个回答

有很多方法可以修改文档,使它们没有明显的不同,但仍然能够唯一地标识每个文档。这里有一些想法。

整个文件的泄漏

元数据的变化
您可以在每个文档的元数据中放置一个唯一的散列。

文本颜色的轻微变化
您可以在文档颜色中使用稍微不同的文本颜色,这些颜色看起来都一样,但仍然能够通过计算机发现差异。

假设只有 2 种颜色看起来仍然相同,您可以为 doc 1 将第一个字母着色为颜色 1,将其余字母着色为颜色 2,第二个将有 2 个颜色为 1 的字母,其余为颜色 2,等等。

不可见字符
您可以在每个文档的末尾放置一定数量的空格并用于识别。

通过复制和粘贴泄漏

使用单词之间的空格编码唯一的 id
在特定单词之间放置不同数量的空格并使用它来识别文档。例如,第一个文档在单词 1 和 2 之间有两个空格,并且在每个其他单词之间有一个空格。对于文档 2,单词 2 和 3 之间将有 2 个空格。

自动化

我强烈建议使用库 FPDF 使用 python 脚本生成文档。

可以在此处找到文档和示例。

谨慎的泄密者可能很容易发现一些技术,例如标点符号或拼写错误的变化,泄密者熟悉发件人写作水平时的特殊性,或者根本不希望在已发布的文档中出现此类错误。

您仍然可以利用“微小变化”,但使用更谨慎的方法,即使用“同义词”
例如,在一个副本中,您有单词“Changes”,在第二个副本中,您将其中一次替换为“Modifications”,在第三个副本中,您将其替换为两次或更多次。

另一个例子是选择替换一个文档中的三个不同的词和第二个文档中的五个不同的词,依此类推。

正如您可以想象的那样,您有各种方案,您也可以在它们之间进行组合。

有没有办法自动化这个?还是有更好的方法来找出谁在泄漏?

这种方法可以使用任何现有脚本语言自动化,您可以将最常见(英语)单词的同义词词典作为脚本程序的入口。

最初,您可以编写一个程序脚本:

  • 生成文档的不同副本。
  • 创建一个将不同副本映射到单个收件人的列表。
  • 将每个副本发送给其收件人。

您可以通过多种方式为每个收件人单独指定 pdf,但我听说过使用几次的技巧之一是使用非打印字符在发送给每个收件人的每个文档中单独编码签名,例如零宽度空格。如果有人逐字复制和粘贴材料,这些将被复制。这将不允许您跟踪内容是否被重新输入或打印/扫描。我记得的最后一个例子是在这里描述的:谷歌从 Genius 窃取歌词

有多种我不太熟悉的水印技术可以通过打印/扫描来跟踪文档。但是 21 世纪的大多数分发将通过复制粘贴或按原样发送文档进行,任何一种方式都可以使用上述方法进行跟踪。

独特的水印是识别泄密者的最可靠方法。如果每个收件人都获得了相同的文档副本,则您不能使用副本作为确定泄漏源的证据。

我最近阅读了一篇关于使用字体为文档添加水印的论文。通过使用从不同 Unicode 字符集中提取的几乎相同的字形,作者能够在发送的每个副本中编码一个几乎不可见的唯一代码。Unicode 字符在复制/粘贴中幸存下来。如果仔细选择字形(几乎相同但不完全相同),它们也可能在照相复制过程中幸存下来。

您还可以使用大而明显的水印,例如在每页的页眉和页脚中打印收件人的姓名。但如果你这样做,你会鼓励他们复制/粘贴内容,这可能会损坏任何隐藏​​的水印。