En10-Pvt-Ltd/fingerprint-desk
GitHub: En10-Pvt-Ltd/fingerprint-desk
通过对打印文档嵌入不可见的字间距偏移图案,实现对泄露文档照片的盲解码溯源与统计归因。
Stars: 0 | Forks: 0
# Fingerprint Desk
**追踪泄露的文档照片,精确溯源至其原始副本。**
每一份打印副本都包含相同的可见文本,但带有不可见的亚毫米级字间距与行间距偏移图案。即使是用手机拍摄并通过 WhatsApp 发送的泄露页面照片,也可以进行盲解码,从而识别出是哪一份副本发生了泄露,并提供明确的诬告概率。
专为考试试卷设计,也适用于任何分发给特定接收者的机密文档:法律证据开示、董事会文件、出版前手稿、内部备忘录。
```
Upload a document -> Generate N named copies -> Print and distribute
|
Which copy leaked? <- Decode <- Someone photographs a page
```
## 它有何不同
大多数文档水印要么是可见的(因此可以被裁剪),要么仅限于数字形式(因此会被打印破坏),或者仅提供简单的匹配/不匹配结果,而没有错误率。
- **读取普通手机照片。** 无需扫描仪,无需紫外线灯,无需特殊墨水。
- **在真实传输通道中存活。** 经历打印、倾斜拍摄、WhatsApp 重新压缩。
- **提供误报边界,而非猜测。** 归因需要经过 Bonferroni 校正的二项式 p 值小于等于 1e-3、最低符号数量,并且需领先第二名一定的幅度。否则,结果将明确显示“无法归因”,这被视为正确结果,而非失败。
- **可验证的指控。** 真实数据在分发前被锁定在 SHA-256 commitment 中,因此指控可以由第三方进行验证,而不仅仅是基于信任。
- **保留您的文档。** 对于扫描和矢量 PDF,发生行偏移之外的所有内容保持像素一致或字节精确。表格、印章、插图和信头都会保留。
## 它不能做什么
明确声明,因为夸大其词的取证工具比无用更糟糕。
- **它不能防止泄露。** 它只是追踪并起到威慑作用。
- **重新输入会使其失效。** 任何手动重新输入或通过 AI 转录文档的人都不会携带标记。请参阅 [docs/threat-model.md](docs/threat-model.md)。
- **在差异化处理前的泄露是不可见的。** 如果文档在生成针对性副本之前就发生了泄露,则无从追踪。
- **小片段只是线索,而不是证据。** 单独裁剪出来的问题可以指向某个来源,但无法揪出串通泄密的群体。
## 验证状态
对于任何不告诉你这张表的水印项目,都要保持怀疑态度。
| 载体类型 | 处理对象 | 是否测试过真实打印 -> 拍照 -> 即时通讯? |
|---|---|---|
| 渲染型(行偏移 + 字偏移) | 粘贴文本、提取的 PDF 文本 | 是,有限制:在真实拍摄中恢复了 14/15 位数据 |
| 保留型(文本 PDF) | 文本 PDF,保持排版 | 尚未,仅限模拟通道 |
| 光栅型(扫描 PDF) | 仅图像 PDF | 尚未,仅限模拟通道 |
| 矢量型(轮廓文本 PDF) | 作为路径的字形 | 尚未,仅限模拟通道 |
**模拟通道永远不会作为最终结果上报。** 目前正在跨多种打印机和手机进行语料库采集活动,以收集真实的打印-拍照-即时通讯照片。测试结果及原始语料库将在此处发布。
## 快速开始
```
git clone https://github.com/En10-Pvt-Ltd/fingerprint-desk
cd fingerprint-desk
cp .env.example .env # set SECRET_KEY (openssl rand -hex 32) and BASE_URL
docker compose up -d
```
打开 http://localhost —— 内置的 Caddy 反向代理将提供应用程序服务,并针对公共 `DOMAIN` 自动处理 HTTPS。(如果不使用 Docker 而是直接运行服务器,`python app/serve.py` 将在 http://localhost:8765 上提供服务。)
不是开发者?请参阅 [docs/for-schools.md](docs/for-schools.md) 获取无需使用命令行的指南。
## 工作原理
1. **编码。** 文本行被分为三组;中间行的基线在 300 dpi 下偏移约 2 px。交替的内部词间距会加宽或缩窄约 3 px。读者对此均不可见。每一份副本都会获得不同的图案。
2. **Commit。** 在分发任何内容之前,关于真实数据和生成文件的 SHA-256 commitment 就已被锁定,因此在发生泄露后无法更改映射关系。
3. **解码。** 对泄露的图像进行纠偏,分割文本行,测量基线和词间距,并且只读取每次差异的*符号*,这使得解码在不同的拍摄分辨率下与缩放比例无关。不需要原始文档和基准标记。
4. **归因,或者拒绝归因。** 只有当最匹配的副本通过了全部三道关卡时,才会对其进行指控。否则,工具将报告无法归因。
完整的方法和统计保证:[docs/method.md](docs/method.md)。促成本项目启动的简易单载体冒烟测试:[docs/smoke-test.md](docs/smoke-test.md)。
## 负责任地使用
这是一个生成用于指控个人的证据的取证工具。有三个要求:
- **永远不要根据微弱的单一读数进行指控。** 请使用工具提供的分级裁定结果。
- **始终通过同一流水线运行未标记的对照副本。** 如果对照副本产生了归因结果,请停止操作并提交 issue,这是一个 bug,我们会将其视为阻碍发布的严重问题。
- **在法律或基本道德要求的情况下,告知人们他们的文档已被添加指纹。** 可追踪性是一种威慑,只有当人们知晓这一点时,威慑才起作用。
安全问题:请参阅 [SECURITY.md](SECURITY.md)。请不要针对归因逻辑中的漏洞提交公开 issue。
## 引用
如果您在研究中使用本项目:
```
@software{fingerprint_desk,
title = {Fingerprint Desk: Forensic fingerprinting for printed documents},
author = {Niraj Vijay Kasar},
year = {2026},
url = {https://github.com/En10-Pvt-Ltd/fingerprint-desk}
}
```
## 许可证
Apache License 2.0。请参阅 [LICENSE](LICENSE)。
特意选择 Apache 2.0 而非 MIT:它包含明确的专利授权,因此采用者可以免受贡献者(包括维护者)提出的专利索赔。
标签:信息泄露溯源, 密码学, 手动系统调用, 数字水印, 文档取证, 文档追踪, 请求拦截, 逆向工具