sememtac/mememage

GitHub: sememtac/mememage

Mememage 通过在图像底部编码标识符与内容哈希,实现图像副本与外部 JSON 记录之间的防篡改绑定验证。

Stars: 0 | Forks: 0

Mememage

# Mememage 将标识符编码到图像的像素中;根据任意副本验证 JSON 记录。 Mememage 会在图像底部写入一个 2 像素高的条带。它携带一个**标识符**(指向你存储在任意位置的 JSON 记录的短指针)和一个**内容哈希**(对该记录进行 SHA-256 计算后的前 16 位十六进制值)。`verify` 会重新计算哈希并将其与条带进行比较。修改任何字段,验证都会失败。 Core 仅通过哈希来证明记录到图像的*绑定*。它**不**校验像素(编辑图像但保留条带,它依然会验证通过),也**不**证明作者身份(那是签名的职责,不在讨论范围内)。根据设计,两个键保留在哈希之外,即 `signature` 和带有 `_` 前缀的键,并且 `encode` 会拒绝将它们作为你自己的字段名。 ``` pip install mememage # encode / decode / verify (Pillow included) # pip install "mememage[encrypt]" # adds AES-256 field encryption ``` ## 快速开始 ``` import mememage # encode: write the bar, build a record from your fields result = mememage.encode("photo.png", {"title": "Morning fog", "by": "catmemes"}) result.identifier # 'mememage-3dc5f03a747bb38e' (derived from your fields) result.save("photo.json") # a record, stored or served separately # decode: read the bar back out of any copy (PNG, JPEG, a screenshot) bar = mememage.decode("photo.jpg") bar.identifier, bar.content_hash # verify: does a record match an image? mememage.verify("photo.jpg", result.record) # truthy if intact ``` Core 不进行任何网络操作。`decode` 会为你提供一个标识符;在你保存记录的任何地方(字典、文件、DB、URL)解析出记录,然后使用 `verify`。 **哈希模型(`hash_version`)。** Core 实现了 **`open`** 模型 —— 它会对除 `content_hash`/`signature` 之外的每个字段进行哈希处理,因此无论你在记录中放入什么,都具有防篡改性。`encode` 会盖上 `hash_version: "open"` 的戳记。应用程序可以定义自己精选的 `hash_version`(固定的包含字段集),而 Core 不实现它;`verify` 会将此类记录报告为**不支持**(`Verification.supported == False`)而不是哈希不匹配 —— 它会安全失败(`bool()` 为 `False`),但这*不是*防篡改证据。请使用定义了该版本的应用程序(例如其自带的解码器)来验证这些记录。CLI 会打印 `UNSUPPORTED` 并以状态码 `3` 退出。 ## 加密私有字段 将字段标记为 `private` 即可在密码下对其进行加密(通过 PBKDF2 使用 AES-256-GCM)。它依然可以在**没有密码的情况下进行验证**(哈希涵盖了密文),而 `unlock` 会显示这些字段。密码永远不会被存储。 ``` result = mememage.encode("photo.png", {"title": "Public", "gps": "45.5,-122.6"}, password="hunter2", private=["gps"]) mememage.verify("photo.png", result.record) # matches, no password mememage.unlock(result, "hunter2")["gps"] # '45.5,-122.6' ``` ## 命令行 ``` mememage encode photo.png --field title="Morning fog" -o photo.json # write the record mememage decode photo.jpg --record photo.json # VERIFIED (0) / RECORD ALTERED (1) / UNSUPPORTED (3) mememage decode photo.jpg # read the identifier only ``` 如果不使用 `-o`,记录会作为 `.json` 存放在图像旁边。如果使用 `--record`,`decode` 在匹配时以 0 退出,在不匹配时以 1 退出;如果不使用它,退出代码 0 仅表示读取到了条带。 ## 许可证 MIT。
标签:Zenmap, 元数据绑定, 哈希校验, 图像处理, 数据完整性, 逆向工具, 防篡改