# 溯影 **Repository Path**: Free_520/tracing-shadow ## Basic Information - **Project Name**: 溯影 - **Description**: 计算机大赛-网络技术赛项目。本项目围绕信息安全 + 计算机视觉方向展开,采用轻量化技术栈实现安全类应用。核心使用 OpenCV 完成图像采集与处理,结合密码学算法,实现像素级数据隐秘传输、内容防篡改校验等功能,不依赖重型大模型,兼顾实用性与创新性。项目可应用于敏感文件加密传输、隐私数据隐蔽存储等场景,整体结构简洁、部署轻便。 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: lyx - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-04-12 - **Last Updated**: 2026-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 溯影 Tracing-Shadow > 2026 版本说明 > 当前项目在保留原有目录结构、DLP 策略、密码学与图像嵌入壳的前提下,新增了默认启用的“双链溯源模式”: > > - `受控传播链`:记录谁通过专用软件生成、查看、导出、分享了图片 > - `公网观测链`:记录外泄样本后来出现在哪个平台、账号提示或页面提示上 > > 项目仍然保留旧版“防篡改 / 基础修复”链路,可通过 `workflow_mode=legacy_tamper` 运行。 ## 1. 项目概述 `Tracing-Shadow` 是一个面向敏感图像外发场景的数据防泄漏(DLP)与审查认证系统原型。当前版本重点从“单纯防篡改”扩展为“受控传播留痕 + 外泄责任定位 + 公网传播观测”,在保留原有防篡改基础能力的同时,强化对真实外发链路的治理与追溯。 系统将传统计算机视觉、密码学认证机制与 DLP-lite 策略结合起来,围绕图像的“敏感分级、外发审计、认证嵌入、篡改检测、区域定位、基础修复”展开设计。为了增强安全表达,项目当前采用国密混合密码体制:使用 `SM4` 作为会话密钥进行对称保护,使用 `SM2` 公私钥对会话密钥进行保护,并使用 `SM3` 提供摘要校验与事件完整性校验。 在新的双链溯源模式下,系统还会为图片写入源头锚点,并在受控查看器中生成会话级取证水印;图片外泄后,管理端可通过图内锚点、显示态水印或公网相似图匹配来回放链路、锁定最后受控节点,并补充公网观测证据。 简化理解,这个项目回答的是这样一个问题: “如何对一张图像提前写入认证能力,使它在后续传输或存储后,即使被篡改,也能被检测、定位,并在一定程度上恢复。” --- ## 2. 项目目标 当前版本面向资格审查和答辩展示,优先目标是: - 跑通完整流程,而不是只完成零散算法片段 - 体现“传统视觉 + 密码学”的组合路线 - 体现敏感图像外发场景下的 DLP 策略与审计能力 - 支持网页演示和命令行演示两种使用方式 - 支持基础级别的篡改定位和块级恢复 - 支持混合密码体制下的会话密钥保护和恢复展示 当前版本不追求的内容: - 极强的自修复效果 - 极复杂的抗攻击安全证明 - 生产级部署、权限系统、多用户管理 - 大规模图像库或高并发服务 --- ## 3. 核心能力 项目当前具备以下能力: - 原图读取、三通道数组化、保存输出图像 - 基于密钥的像素点选择、通道选择、扰动值生成和方向控制 - 认证信息嵌入与基础冗余信息生成 - 敏感等级、外发通道、接收方与用途驱动的 DLP 策略判定 - 基于 trace token 的外发追踪标识与审计日志 - 使用国密混合密码体制对 SM4 会话密钥进行保护 - 将“加密后的会话密钥 token”嵌入图像头部区域 - 对待检图像执行认证验证 - 从图像中恢复会话密钥 token 并用私钥解出会话密钥 - 生成篡改掩膜、标注图和基础修复图 - 网页端展示输入图、认证图、篡改图、检测图和修复图 --- ## 4. 技术路线 系统整体按三层组织: ### `main` 主调度层。负责参数管理、流程串联、CLI 入口和 Web 入口,不直接实现底层像素算法。 ### `CV` 图像处理层。负责: - 图像读写 - 三通道数组转换 - 差异检测与掩膜生成 - 篡改区域可视化 ### `Security` 密码学与认证层。负责: - 标准密码学工具 - DLP 策略、追踪标识与审计 - 混合密码体制 - 点位、通道、扰动、方向生成 - 认证嵌入 - 冗余与验证 - 会话密钥 token 嵌图与恢复 --- ## 5. 混合密码体制设计 项目当前的密钥保护逻辑采用“SM2 + SM4”的国密混合密码体制。 ### 为什么要混合 如果把对称密钥明文嵌入图像,即使系统功能能跑,也没有真正安全性。 因此项目采用两层方式: - SM4 会话密钥:负责数据级别的对称保护 - SM2 公私钥:负责保护 SM4 会话密钥本身 ### 当前实现方式 1. 系统生成一个 SM4 会话密钥 2. 使用甲方公钥对这个会话密钥进行加密 3. 得到一个“加密后的会话密钥 token” 4. 将这个 token 通过 LSB 方式嵌入图像头部区域 5. 在验证阶段,从图像中解析出该 token 6. 使用甲方私钥解出原始 SM4 会话密钥 ### 重要说明 图像里嵌入的不是明文对称密钥,而是: `公钥加密后的会话密钥 token` 这点是答辩和文档表述时必须强调的。 --- ## 6. 系统工作流程 整个项目可以分成“生成阶段”和“验证阶段”。 ### 6.1 生成阶段 1. 读取原始图像 2. 转换为统一的 `np.ndarray[H, W, 3]` 3. 根据敏感等级、外发通道、接收方和用途生成 DLP 决策 4. 生成 trace token 与审计记录 5. 生成 SM4 会话密钥 6. 用甲方公钥加密该会话密钥 7. 生成参与嵌入的点位、通道、扰动值和方向 8. 把认证信息与冗余信息嵌入图像 9. 把加密后的会话密钥 token 与 trace token 一并嵌入图像头部 10. 输出认证图像 ### 6.2 验证阶段 1. 输入待检图像 2. 提取嵌入认证信息 3. 提取图像头部的会话密钥 token 与 trace token 4. 使用甲方私钥恢复 SM4 会话密钥 5. 对 trace token 与 DLP 策略进行核验 6. 对认证信息做一致性校验 7. 判断图像是否被篡改 8. 输出篡改块、篡改掩膜和标注结果 9. 使用冗余信息执行基础块恢复 ### 6.3 可视化阶段 为了增强展示效果,当前系统还支持: - 认证检测为主 - 参考认证图差分作为增强可视化 也就是说,核心判断依赖认证信息;二图差分主要用于把篡改区域显示得更直观。 --- ## 7. 模块划分 ### `main/` 主模块,负责: - 统一配置 - 组织完整流程 - CLI 演示入口 - Web 演示入口 关键文件: - `main.py`:命令行入口 - `app.py`:Flask 网页演示入口 - `controller.py`:流程控制器 - `config.py`:统一配置 ### `src/CV/` CV 模块,负责: - 图像读写 - 图像数组转换 - 篡改检测 - 篡改标注 关键文件: - `ImageIO.py` - `RGBConverter.py` - `tamper_detect.py` - `visualize.py` ### `src/Security/` Security 模块,负责: - 标准 SM4 加解密 - DLP 分级策略与审计日志 - SM2 公私钥与国密混合密码体制 - 会话密钥 token 嵌图与恢复 - 点位、通道、扰动和方向控制 - 冗余与校验 - 验证报告输出 关键文件: - `Crypt.py` - `models.py` - `dlp.py` - `embedder.py` - `verifier.py` - `redundancy.py` - `point_selector.py` - `channel_selector.py` - `delta_generator.py` - `sign_generator.py` - `extractor.py` ### `src/examples/` 示例脚本和 smoke test。 ### `tests/` 单元测试与回归测试。 --- ## 8. 当前目录结构 ```text tracing-shadow/ ├── assets/ # 测试图片与演示素材 ├── docs/ # 比赛文档、参考材料 ├── main/ # 主入口、配置、网页演示 │ ├── app.py │ ├── config.py │ ├── controller.py │ ├── main.py │ ├── templates/ │ │ └── index.html │ ├── static/ │ │ └── app.css │ └── readme.md ├── src/ │ ├── __init__.py │ ├── CV/ │ │ ├── ImageIO.py │ │ ├── RGBConverter.py │ │ ├── tamper_detect.py │ │ ├── visualize.py │ │ └── readme.md │ ├── Security/ │ │ ├── Crypt.py │ │ ├── models.py │ │ ├── hash.py │ │ ├── point_selector.py │ │ ├── channel_selector.py │ │ ├── delta_generator.py │ │ ├── sign_generator.py │ │ ├── redundancy.py │ │ ├── embedder.py │ │ ├── extractor.py │ │ ├── verifier.py │ │ ├── __init__.py │ │ └── readme.md │ └── examples/ │ ├── demo.py │ ├── test.py │ └── readme.md ├── tests/ │ ├── test_encrypt.py │ ├── test_steganography.py │ └── readme.md ├── output/ # 运行后自动生成,已加入 .gitignore ├── .gitignore ├── README.md ├── README.en.md └── requirements.txt ``` --- ## 9. 运行方式 ### 9.1 安装依赖 ```bash pip install -r requirements.txt ``` ### 9.2 命令行运行 ```bash python examples/demo.py ``` 运行后会输出: - 是否检测到篡改 - 篡改块数量 - 修复一致性 - 是否启用混合密钥传输 - 图像内会话密钥是否恢复成功 ### 9.3 网页运行 ```bash python -m main.run ``` 浏览器打开: ```text http://127.0.0.1:5000 ``` 网页支持: - 本机路径输入 - 上传图片 - 选点数量设置 - 块大小设置 - 敏感等级、外发通道、接收方、业务用途配置 - 外发许可开关 - 上传待检图像并执行篡改检测 - 混合密钥传输开关 - 参考认证图增强可视化开关 --- ## 10. 输出结果说明 当前流程默认会在 `output/` 下生成: - `encoded.png`:认证图像 - `tamper_mask.png`:篡改掩膜 - `marked.png`:检测标注图 - `repaired.png`:基础修复图 - `dlp_audit_.json`:DLP 审计日志 网页演示中会额外展示: - 输入原图 - 认证图 - 待检图像检测结果 - 篡改掩膜 - 检测标注图 - 基础修复图 --- ## 11. 测试说明 项目当前测试覆盖以下能力: - SM4 文本加解密回环 - SM4 数组加解密回环 - SM2 + SM4 混合加密回环 - 图像内嵌密钥 token 的恢复 - DLP 策略决策与 trace token 校验 - 最简认证检测主流程 - SM3 摘要校验 运行测试: ```bash python -m pytest -q ``` 当前状态下测试应通过。 --- ## 12. 当前版本的边界 需要明确的是,当前版本是“比赛原型闭环版”,不是最终工业级系统。 当前已经完成: - 技术路线闭环 - 网页/CLI 双入口 - DLP-lite 分级、审计、追踪能力 - 混合密码体制接入 - 图像认证、检测、标注、修复完整流程 当前仍然是简化实现: - 自修复仍是基础块恢复 - 认证嵌入策略还可继续优化 - 页面底部仍保留部分联调用信息 - 缺少更系统的量化指标面板 - 还没有拆分成真正的“发送端 / 接收端”独立部署 --- ## 13. 后续可扩展方向 如果继续迭代,建议优先做: 1. 增强嵌入策略的鲁棒性与可解释性 2. 强化块恢复与局部恢复质量 3. 增加更多量化指标,如 PSNR、SSIM、处理耗时 4. 将生成端与验证端真正拆分成独立流程 5. 将网页中的调试信息进一步收敛为答辩面板 6. 补充更多测试样本和攻击场景 --- ## 14. 一句话总结 `Tracing-Shadow` 当前已经形成一条完整可演示的敏感图像 DLP 与防篡改原型链路: **原图输入 -> DLP 分级与外发策略 -> 认证嵌入 -> 公钥保护会话密钥并嵌图 -> 待检图验证 -> 会话密钥恢复 -> trace token 核验 -> 篡改定位 -> 基础修复 -> 网页/命令行展示** 这正是当前版本最重要的价值。 不是“某个算法片段能跑”,而是“整个项目已经闭环”。