sememtac/mememage-provenance
GitHub: sememtac/mememage-provenance
可自托管的图像溯源工具包,通过防篡改条形码将图像与可验证的哈希记录绑定,使其来源和完整性可在任意副本中被独立检验。
Stars: 0 | Forks: 0
# Mememage — 来源
一个可自托管的**图像来源**工具包 —— 为任何图像添加一个防篡改标记,并将其与你保留的记录绑定,这样任何人都可以在任何副本中确认其来源以及它是否被篡改过。它建立在 [mememage](https://github.com/sememtac/mememage) 之上:一个 2 像素的条形码将图像与 JSON 记录链接起来,仅通过哈希值进行验证。本仓库在这个核心基础上整合了完整的全栈架构 —— 一个用于为图像加盖印记并发布的 **mint server**,以及一个用于读取和验证它们的 Web **解码器** 和 **验证器**。
除了标识符和哈希之外,包含的参考链还可以捕获图像发布瞬间的丰富快照:
- **星空出生证** —— 太阳、月亮和行星的位置,根据 Meeus 的天文算法计算得出。
- **机器读数** —— 发布机器的跨平台(macOS/Linux)硬件和实时状态快照:核心数、内存、负载、内核熵。
- **稀有度** —— 来自天体状态、机器关键信息和原始熵的评分。
- **时间锁定的 GPS** —— 坐标隐藏在 RSA 时间锁谜题背后(连续平方,约需 10 年解锁)。
- **谱系** —— 一个 `parent_id` 链表,将每张图像追溯至创世图像。
除了快照之外,记录还携带由创建者定义的字段 —— 说明、署名、许可 —— 这些可以在 mint 编辑器中输入,或者从图像的 EXIF(相机、镜头、日期)中预先填充。
## 目录结构
- **`mememage/`** —— 库:包含 `encode` / `decode` / `verify` API 和条形编解码器,以及规范链的实现(星空出生证、稀有度、Ed25519 签名、分发渠道、mint server)。
- **`docs/`** —— Web **解码器**(浅色主题)和 **验证器**(深色主题)。拖入图像,读取条形码,获取记录,通过哈希进行验证。采用原生 HTML/CSS/JS,无需构建步骤。
- **`tools/`** —— 在全新的服务器上搭建公共 mint server(`bootstrap.sh`、`vps-setup.sh`)以及构建桌面应用。
## 安装
**桌面应用** —— 从 [Releases](https://github.com/sememtac/mememage-provenance/releases) 下载适用于您平台的构建版本。每个版本都内置了 mint server 和完整的 Web UI;无需 Python。
- **macOS** —— `Mememage.app`(在 Finder 中双击)
- **Windows** —— `Mememage.exe`
- **Linux** —— `Mememage` 二进制文件
**通过源码安装** —— 任何支持 Python 3.10+ 的平台:
```
git clone https://github.com/sememtac/mememage-provenance
cd mememage-provenance
pip install ".[mint]" # the full mememage + Pillow, numpy, qrcode
mememage serve # HTTPS mint server + dashboard
```
这里的 `mememage` 包是完整的库 —— 包含核心 API 和规范链 —— 因此没有单独的 `pip install mememage`。mint server 本身就可以提供解码器和验证器的服务,或者你也可以将 `docs/` 托管在任何静态站点上。如果要在全新的 Ubuntu/Debian 服务器上搭建公共服务器,`tools/bootstrap.sh` 可以通过一条命令设置 TLS 和 nginx。
## 构建基础
- **mememage** —— 一切底层的基础条形/记录/哈希技术。
- **Python 标准库** —— mint server、链、RSA 时间锁以及星历数学运算仅依赖标准库运行。
- **Pillow**(图像/条形码)、**cryptography**(Ed25519 + AES)、**numpy**(可选的水印) —— 延迟加载的扩展模块。
- **原生 HTML/CSS/JS** —— 解码器和验证器是静态页面。
## Payload
一条链会将其文件分布在自身的记录中。`chain.json` 中的每一层都定义了一个源和一个发布周期 —— 即源在循环重复之前所分布的记录数量。在封存时,源会被分割成相应数量的数据块,每条记录承载一块。重组过程会遍历谱系,收集一个周期的数据块,根据记录中每个数据块的哈希值进行验证,并重建文件。当解码器和验证器包含在被分发的文件中时,无需外部托管即可读取链。
各层及其源在 `chain.json` 中定义,并指向 `payload/` 目录;`ChainConfig.default()` 是一个配置示例。本仓库提供的是机制,而不是一个已配置好的链。
## 许可证
MIT。
标签:哈希校验, 图像溯源, 密码学, 手动系统调用, 数字水印, 自托管, 逆向工具, 防篡改