抗量子资产托管系统是一个结合了后量子密码学(格密码)、秘密共享和图像隐写技术的综合性安全系统。该系统利用格密码的抗量子特性、秘密共享的门限恢复特性和图像隐写的隐蔽性,实现了高安全性、高可靠性的资产托管方案。
- 身份铸造:基于 Module-LWE 问题生成抗量子密钥对,确保身份的安全性和唯一性
- 资产锁定:将秘密图像通过 CRT 分割为多个份额,使用格密码加密份额数据,锚定权益到公钥持有者,并通过隐写技术分发
- 授权恢复:通过签名授权机制,实现 t 个用户协作恢复资产,确保资产的安全性和可控性
- 分布式模式:支持离线签名和签名文件导入,实现跨设备的安全授权流程
- 碎片加解密:实现用户收到碎片后的提取和解密功能,确保数据的安全性
QSP/
├── GUI/ # 用户界面模块
├── data/ # 数据目录
│ ├── keys/ # 密钥文件
│ └── shares/ # 份额文件
├── dataset/ # 测试数据集
├── dist/ # 打包分发目录
├── src/ # 核心源代码
│ ├── crypto_lattice/ # 格密码模块
│ ├── dealer/ # 资产锁定模块
│ ├── image_stego/ # 图像隐写模块
│ ├── secret_sharing/ # 秘密共享模块
│ └── utils/ # 工具函数
├── text/ # 测试代码目录
├── venv/ # 虚拟环境
├── main.py # 主程序入口
├── lock_asset.py # 资产锁定工具
├── unlock_asset.py # 资产恢复工具
└── requirements.txt # 依赖包列表
- keygen.py:实现密钥生成功能,基于 Module-LWE 问题
- signer.py:实现签名生成和验证功能,包含 LatticeSigner 类
- ntt.py:实现多项式乘法,使用 Schoolbook 算法确保正确性
- utils.py:提供格密码相关的数学工具函数
- locker.py:实现资产锁定和分发功能,包含 AssetLocker 类
- 支持 CRT 分割秘密图像为 n 个份额
- 使用格密码加密份额数据,确保只有对应私钥持有者能解密
- 实现自检验证功能,确保数据嵌入的正确性
- 生成用户专属文件夹,严格分发含密图像
- 生成资产清单,记录份额的所有权和指纹
- dct_embed.py:实现 DCT 域信息嵌入,包含溢出预处理和中频系数锁定
- dct_extract.py:实现 DCT 域信息提取,与嵌入过程对应
- img_process.py:提供图像预处理和后处理功能
- orchestrator.py:协调嵌入和提取流程
- splitter.py:实现秘密分割功能,基于 CRT 算法
- reconstructor.py:实现秘密重构功能,基于 CRT 算法,包含 ImageCRTReconstructor 类
- scrambler.py:实现秘密信息的混淆和去混淆
- math_utils.py:提供数学工具函数
- 身份验证:基于格密码的数字签名,确保身份的真实性和不可伪造性
- 授权机制:基于门限签名的授权机制,确保只有授权用户才能恢复资产
- 会话隔离:每个恢复会话生成唯一的会话 ID,防止重放攻击
- 权益绑定:将每个资产份额的所有权绑定到特定公钥的持有者
- 指纹计算:计算每个份额的哈希值,确保数据的完整性
- 资产清单:生成公开的资产清单,记录份额的所有权和指纹
- 格密码算法:使用基于 Module-LWE 问题的格密码算法,抗量子计算攻击
- 显式承诺:在签名中包含显式承诺,解决噪声进位导致的验证失败问题
- 松弛验证:允许签名验证过程中存在一定误差范围,提高验证成功率
- DCT 变换:将图像从空间域转换到频率域,便于频域数据嵌入
- 中频系数锁定:使用 ZigZag 扫描顺序选择中频系数,平衡隐蔽性和鲁棒性
- 溢出预处理:在嵌入前对载体图像进行预处理,防止 DCT 逆变换后产生噪声
- CRT 算法:基于中国剩余定理实现秘密分割和重构
- 门限方案:支持 (t, n) 门限恢复,只需 t 个份额即可恢复原始秘密
- 动态模数:支持动态生成模数,提高系统的灵活性和安全性
- Python 3.9+
- NumPy
- OpenCV
- Pillow
- Matplotlib
- pycryptodome
pip install -r requirements.txtpython GUI/app_modern.py- 运行
python GUI/app_modern.py启动系统 - 系统会初始化所有模块,包括格密码参数、图像隐写参数和秘密共享参数
- 启动完成后,会显示现代化主界面,包含三个核心功能模块:身份铸造、资产锁定和授权恢复
- 选择 "身份铸造" 选项卡
- 输入身份别名(例如:"alice")
- 选择密钥保存路径(默认为 "my_identities" 目录)
- 点击 "开始铸造身份" 按钮
- 系统会执行以下操作:
- 基于 Module-LWE 问题生成抗量子密钥对
- 将私钥保存为
{alias}.sk文件 - 将公钥保存为
{alias}.pk文件
- 身份铸造完成后,系统会显示成功信息,并提示用户将公钥发送给 Dealer
- 选择 "资产锁定" 选项卡
- 选择秘密图像(需要托管的资产)
- 选择载体目录(用于生成含密图像的载体图像)
- 选择公钥目录(包含参与者的公钥文件)
- 选择输出目录(用于保存含密图像和资产清单)
- 设置份额数量 n(默认为 5,范围 3-10)
- 设置恢复门限 t(默认为 3,范围 2-5,必须小于 n)
- 点击 "执行锁定 (Lock)" 按钮
- 系统会执行以下操作:
- CRT 分割:将秘密图像分割为 n 个份额
- 指纹计算:计算每个份额的哈希值
- 格密码加密:使用对应公钥加密份额数据
- 权益锚定:生成资产清单,记录份额的所有权和指纹
- 隐写分发:将加密后的份额嵌入载体图像生成含密图像
- 自检验证:验证数据嵌入的正确性,确保生成有效资产
- 资产锁定完成后,系统会显示成功信息,并提示用户分发含密图像给对应的参与者
系统支持两种授权恢复模式:
- 选择 "授权与恢复 (User)" 选项卡
- 配置资产位置(包含含密图像和资产清单的目录)
- 配置私钥库(包含参与者的私钥文件)
- 加载资产清单(点击 "📂 加载资产清单 (Manifest)" 按钮)
- 切换到 "身份管理" 选项卡,选择并设置当前活跃身份
- 切换回 "授权与恢复 (User)" 选项卡
- 执行签名授权:点击归属人为当前活跃身份的碎片对应的 "✍️ 签名授权" 按钮
- 确认授权:在弹出的安全确认对话框中点击 "是" 确认授权
- 重复步骤 5-8,使用不同的身份授权其他碎片,直到收集到 t 个授权份额
- 启动重构:当授权份额达到门限 t 时,点击 "🚀 启动重构 (Reconstruct)" 按钮
- 系统会执行以下操作:
- 扫描资产:扫描目录中的含密图像和资产清单
- 提取份额:从含密图像中提取加密的份额数据
- 格密码解密:使用对应私钥解密份额数据
- 验证指纹:验证份额数据的完整性
- 签名授权:验证份额所有者的签名
- CRT 重构:当收集到 t 个有效份额后,重构原始秘密图像
- 授权恢复完成后,系统会显示成功信息,并在右侧预览区域显示重构的图像
-
Alice 导出授权签名文件:
- 在 Alice 的离线电脑上,打开 GUI 应用
- 进入 "授权与恢复 (User)" 选项卡
- 配置资产位置和私钥库
- 加载资产清单
asset_manifest.json - 切换到 "身份管理" 选项卡,将 Alice 的身份设为活跃
- 切换回 "授权与恢复 (User)" 选项卡
- 点击 "📤 导出签名文件" 按钮
- 在弹出的安全确认对话框中点击 "是" 确认授权
- 选择保存位置,系统会生成签名文件(例如:
alice_signature.sig) - Alice 将生成的签名文件发送给恢复者
-
恢复者导入签名文件:
- 在恢复者的电脑上,打开 GUI 应用
- 进入 "授权与恢复 (User)" 选项卡
- 配置资产位置(包含含密图像和资产清单)
- 加载资产清单
asset_manifest.json - 点击 "📥 导入签名文件" 按钮
- 在文件选择对话框中选择收到的签名文件(例如:
alice_signature.sig) - 系统会验证签名文件的有效性
- 验证成功后,会显示 "签名文件已导入,所有者: alice.sk"
- 底部进度条会更新,显示已收集的授权份额数量
-
收集足够的签名文件:
- 重复步骤 1-2,收集至少 t 个不同用户的签名文件
- 每个用户都需要在自己的离线电脑上导出签名文件并发送给恢复者
- 恢复者需要导入所有收到的签名文件
-
启动重构:
- 当授权份额达到门限 t 时,点击 "🚀 启动重构 (Reconstruct)" 按钮
- 系统会执行 CRT 重构算法,使用已授权的 t 个份额恢复原始秘密图像
- 重构完成后,会弹出结果预览窗口,显示恢复的秘密图像
- 点击 "打开文件所在位置" 按钮,可以查看保存的恢复图像
系统实现了完整的安全审计日志,记录所有关键操作和安全检查结果,包括:
- 密钥生成过程
- 资产锁定过程
- 授权恢复过程
- 签名验证过程
- 数据完整性检查过程
系统提供了完整的测试套件,位于 text/ 目录下,包括:
- text/test_lattice.py:测试格密码模块的功能
- text/test_stego.py:测试图像隐写模块的功能
- text/test_crt.py:测试秘密共享模块的功能
- text/test_ntt.py:测试多项式运算模块的功能
- text/test_lattice_system.py:测试格密码系统的签名验证功能
- 多项式乘法:后续可考虑使用 NTT 变换优化多项式乘法性能
- 并行计算:签名生成和验证过程可考虑使用并行计算加速
- 内存优化:大型图像处理时可考虑分块处理,减少内存占用
- 参数选择:系统使用安全的格密码参数,提供高安全级别
- 私钥保护:私钥仅保存在本地,丢失即丧失资产所有权
- 数据完整性:通过哈希校验确保数据的完整性
- 防重放攻击:每个恢复会话生成唯一的会话 ID,防止重放攻击
- 门限控制:只有 t 个授权用户才能恢复资产,确保资产的安全性和可控性
- 硬件加速:探索使用 GPU 加速格密码运算和图像处理
- 多模态资产:支持音频、视频等其他类型的资产
- 区块链集成:将资产清单上链,提高系统的透明度和可信度
- 量子安全增强:研究和集成最新的后量子密码算法
- numpy>=1.23.5
- opencv-python>=4.7.0.72
- pillow>=9.5.0
- scipy>=1.10.1
- pycryptodome>=3.18.0
- matplotlib>=3.7.1
MIT License
如有问题或建议,请联系项目维护者。
抗量子资产托管系统 - 保护资产安全,抵御量子威胁