Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

抗量子去中心化资产保护系统 (QSP)

目录

  1. 项目简介
  2. 系统概述
  3. 系统架构
  4. 项目结构
  5. 核心模块详解
  6. 快速开始
  7. 测试覆盖
  8. 安全特性
  9. 技术依赖
  10. 环境准备
  11. 安装与启动
  12. 核心功能使用
  13. 常见问题

项目简介

QSP是一个基于格密码学的综合性安全系统,专注于提供抗量子计算攻击的加密通信、身份认证和资产保护功能。该系统利用格密码的抗量子特性,结合P2P网络、可靠UDP和Shamir秘密共享,项目由暨南大学杨昊文、熊逸航完成。

贡献者

姓名/昵称GitHub ID贡献内容联系方式
熊逸航ARS4EVER代码编写、测试维护、漏洞修复2568910086@qq.com
杨昊文amonadam项目架构、代码编写、测试维护3032875322@qq.com

核心特性

  1. 纯正抗量子基因 - 100% 遵守 NIST FIPS 203 (Kyber512) 和 FIPS 204 (Dilithium2) 标准
  2. 绝对安全握手 - 基于 Dilithium Sign(Kyber_Ciphertext) 混合架构,完美抵御中间人攻击 (MITM)
  3. 极简业务流 - REQ-RESP 单轮交互,配合 JSON 序列化和 AES-GCM,实现高吞吐量
  4. 无缝 Shamir 门限 - 数据容灾由业务层 Splitter/Reconstructor 接管,密码层与业务层完全解耦
  5. 本地金库加密 - 基于 PBKDF2HMAC 和 AES-256-GCM 的透明加密,防范物理设备被攻破
  6. 邀请码瘦身 - 采用公钥指纹验证机制,大幅减少邀请码大小,提升传输效率
  7. NAT 穿透 - 支持 UDP 打洞和心跳保活,实现真正的去中心化 P2P 连接
  8. 可靠 UDP - 集成 SACK 和拥塞控制,提供接近 TCP 的可靠性和 UDP 的低延迟

系统概述

QSP提供以下核心功能:

  • 抗量子加密:使用 NIST 标准的 Kyber 和 Dilithium 算法
  • P2P 网络通信:支持 NAT 穿透和 UDP 打洞
  • Shamir 秘密共享:将文件分割成多份,需要指定数量的份额才能恢复
  • 本地金库加密:使用 AES-256-GCM 保护本地数据

系统架构

┌─────────────────────────────────────────────────────────────┐
│                      业务层                                  │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────┐  │
│  │ BackupManager│  │ RecoveryManager │  │ AppRouter      │  │
│  │              │  │              │  │                │  │
│  └──────────────┘  └──────────────┘  └────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      应用层                                  │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────┐  │
│  │ AppMessage   │  │ AppProtocol  │  │ UIBridge       │  │
│  │              │  │              │  │                │  │
│  └──────────────┘  └──────────────┘  └────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      安全通道                                │
│  ┌──────────────────────────────────────────────────────┐  │
│  │ SecureLink: SecureChannel + RUDP + Heartbeat        │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      密码学层                                │
│  ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌──────┐  │
│  │ Lattice-   │ │ KeyGen    │ │ Dilithium- │ │Kyber- │  │
│  │ Wrapper    │ │           │ │ Signer     │ │KEM    │  │
│  └────────────┘ └────────────┘ └────────────┘ └──────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      配置层                                  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │ config.py: SigParams, KEMParams, ThresholdParams    │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

项目结构

QSP1/
├── GUI/
│   └── main_window.py        # 现代化 GUI 界面
├── data/
│   ├── keys/                  # 身份密钥
│   │   └── node_identity.json
│   ├── shares/                # 资产份额和清单
│   │   ├── {哈希前8位}_manifest.json
│   │   └── {文件哈希}_share_X.dat
│   └── restored/              # 恢复的资产
│       └── recovered_{文件名}
├── src/
│   ├── app/                 # 应用层 (Phase 10)
│   │   ├── app_protocol.py     # 应用层消息协议
│   │   ├── app_router.py       # 应用层消息路由
│   │   ├── backup_manager.py   # 资产备份管理器
│   │   ├── recovery_manager.py # 资产恢复管理器
│   │   ├── ui_bridge.py         # UI 桥接器
│   │   └── vault_crypto.py     # 本地金库加密引擎
│   ├── crypto_lattice/     # 格密码模块 (Phase 1)
│   │   ├── wrapper.py         # 统一适配器 (ML-DSA + ML-KEM)
│   │   ├── keygen.py         # 密钥生成
│   │   ├── signer.py         # 标准签名器 (DilithiumSigner)
│   │   └── encryptor.py      # 密钥封装 (KyberKEM)
│   ├── network/             # 网络通信模块 (Phase 2)
│   │   ├── secure_channel.py   # 安全通道
│   │   ├── secure_link.py      # 安全链接 (含心跳)
│   │   ├── p2p_manager.py     # P2P 管理
│   │   ├── rudp.py            # 可靠 UDP
│   │   ├── protocol.py        # 通信协议
│   │   └── congestion.py      # 拥塞控制
│   ├── secret_sharing/      # 秘密共享模块
│   │   ├── splitter.py         # Shamir 分割器
│   │   └── reconstructor.py   # Shamir 重构器
│   ├── utils/               # 工具函数
│   └── config.py            # 全局配置
├── tests/                   # 测试代码目录
├── main.py                  # 主程序入口
├── requirements.txt         # 依赖包列表
└── README.md                # 本文档

核心模块详解

1. 应用层 (src/app/)

现代化的业务逻辑实现:

  • vault_crypto.py - 本地金库加密引擎

    • VaultCrypto._derive_key() - 基于 PBKDF2HMAC 的密钥派生
    • VaultCrypto.encrypt_chunk() / decrypt_chunk() - AES-256-GCM 块级加密/解密
    • 防范物理设备被攻破导致的数据泄露
  • backup_manager.py - 资产备份管理器

    • BackupManager.execute_backup() - 执行资产备份和网络分发
    • BackupManager._save_share_locally() - 本地加密存储份额
    • 支持 P2P 网络传输和断点续传
  • recovery_manager.py - 资产恢复管理器

    • RecoveryManager.execute_recovery() - 执行资产恢复和网络寻呼
    • RecoveryManager._try_reconstruct_streaming() - 流式重构资产
    • 支持网络乱序分块接收和断点续传
  • app_protocol.py - 应用层消息协议

    • AppMessage.pack() / unpack() - 消息序列化和反序列化
    • 支持 SHARE_PUSH、PULL_REQ、PULL_RESP 等消息类型
  • app_router.py - 应用层消息路由

    • AppRouter.register_handler() - 注册消息处理器
    • AppRouter.dispatch_network_data() - 分发网络数据
    • 支持线程安全的 UI 更新
  • ui_bridge.py - UI 桥接器

    • UIBridge.run_in_main_thread() - 在主线程中运行 UI 更新
    • UIBridge.safe_update_progress() - 安全更新进度条
    • 解决多线程 UI 更新问题

2. 密码学层 (src/crypto_lattice/)

基于 NIST 标准的后量子密码学实现:

  • wrapper.py - 统一适配器

    • LatticeWrapper.generate_signing_keypair() - 生成 Dilithium 签名密钥对
    • LatticeWrapper.sign_message() / verify_signature() - 标准签名/验签
    • LatticeWrapper.kem_keygen() / encapsulate() / decapsulate() - Kyber512 密钥交换
  • keygen.py - 密钥生成工具

    • KeyGen.generate_keys() - 生成密钥对
    • KeyGen.save_keys() / load_keys() - 密钥持久化
  • signer.py - 标准签名器

    • DilithiumSigner.sign() - 使用私钥签名
    • DilithiumSigner.verify() - 使用公钥验签
  • encryptor.py - 密钥封装

    • KyberKEM.generate_keypair() - 生成 KEM 密钥对
    • KyberKEM.encapsulate() / decapsulate() - 密钥封装/解封装

3. 网络通信层 (src/network/)

端到端加密通信:

  • secure_link.py - 安全链接

    • 集成 SecureChannel、RUDP 和心跳保活
    • 支持多路复用和 NAT 穿透
    • 采用公钥指纹验证机制,提升安全性和效率
  • secure_channel.py - 安全通道

    • 集成 Kyber512 密钥交换
    • 集成 Dilithium2 身份认证
    • 使用 AES-256-GCM 加密业务数据
    • 支持中间人攻击拦截
  • p2p_manager.py - P2P 节点管理

    • P2PNode.connect_via_invite() - 通过邀请码连接
    • P2PNode.generate_invite_code() - 生成轻量化邀请码
    • 支持 UDP 打洞和 NAT 穿透
  • rudp.py - 可靠 UDP 传输

    • RUDPConnection.receive_data() - 接收数据并生成 SACK
    • RUDPConnection.handle_sack() - 处理 SACK 并触发重传
    • 支持乱序到达和快速重传
  • protocol.py - 二进制通信协议

    • QSPProtocol.pack() / unpack() - 数据包封装和解析
    • 支持 KEEPALIVE、HOLEPUNCH 等消息类型
  • congestion.py - 延迟梯度拥塞控制

    • HybridCongestionControl.on_ack() - 处理 ACK 并调整拥塞窗口
    • 基于延迟梯度和丢包率的混合拥塞控制

4. 秘密共享 (src/secret_sharing/)

基于 Shamir's Secret Sharing 的门限容灾:

  • splitter.py - 秘密分割

    • SecretSplitter.split_secret() - 将秘密分割为 n 个份额
    • 支持 GF(256) 查表加速
  • reconstructor.py - 秘密重构

    • SecretReconstructor.reconstruct() - 使用 t 个份额重构秘密
    • 支持流式重构和大文件处理

快速开始

1. 安装依赖

pip install -r requirements.txt

2. 运行测试

# 运行所有核心测试 python -m unittest discover tests -v # 运行特定模块测试 python -m unittest tests.test_wrapper tests.test_keygen_phase2 tests.test_signer_phase2 tests.test_secure_channel_phase2 tests.test_vault_encryption_phase10 tests.test_holepunch_phase5 tests.test_large_file_streaming tests.test_integration_final -v

3. 运行系统

python main.py

测试覆盖

测试模块测试内容
test_wrapper.pyML-DSA 签名/验签、ML-KEM 封装/解封装
test_keygen_phase2.py标准密钥生成与存储
test_signer_phase2.py标准 Dilithium 签名器
test_encryptor_phase2.pyKyber KEM 密钥交换
test_config_phase2.py配置参数验证
test_secure_channel_phase2.py安全通道握手、AES-GCM 加密
test_holepunch_phase5.pyNAT 穿透和 UDP 打洞
test_p2p_multiplexing.pyP2P 多路复用
test_rudp_sack.py可靠 UDP 和 SACK 机制
test_congestion_phase4.py延迟梯度拥塞控制
test_secure_link_phase6.py安全链接和心跳保活
test_keepalive_phase8.pyNAT 保活机制
test_vault_encryption_phase10.py本地金库加密和防篡改
test_large_file_streaming.py大文件流式切分和重构
test_recovery_streaming_phase7.py网络乱序分块接收和断点续传
test_app_protocol.py应用层消息协议
test_app_router.py应用层消息路由
test_integration_final.py端到端集成测试

所有测试全部通过


安全特性

  1. 抗量子安全

    • NIST FIPS 203 ML-KEM-512 (Kyber512)
    • NIST FIPS 204 ML-DSA-44 (Dilithium2)
  2. 身份认证

    • Dilithium 标准签名
    • 公钥指纹验证
    • 中间人攻击拦截
  3. 数据加密

    • AES-256-GCM
    • 前向安全性
    • 本地金库加密
  4. 门限容灾

    • Shamir Secret Sharing
    • (t, n) 门限方案
    • 流式重构
  5. 网络安全

    • UDP 打洞和 NAT 穿透
    • 可靠 UDP 与 SACK
    • 延迟梯度拥塞控制
    • 心跳保活机制

技术依赖

  • Python 3.9+
  • dilithium-py
  • kyber-py
  • cryptography
  • numpy
  • customtkinter
  • pillow

环境准备

系统要求

  • 操作系统:Windows / macOS / Linux
  • Python 版本:3.9 或更高
  • 网络:需要互联网连接(用于 P2P 通信)

检查 Python 版本

打开终端/命令提示符,运行:

python --version

确保显示 Python 3.9+。


安装与启动

第一步:安装依赖

在项目目录下运行:

pip install -r requirements.txt

如果遇到 pip 启动器错误(如 "Fatal error in launcher"),使用:

python -m pip install -r requirements.txt

第二步:启动应用

运行主程序:

python main.py

第三步:设置本地金库密码

启动后,会弹出一个对话框,要求输入本地金库主密码

  • 这个密码用于加密本地存储的敏感数据
  • 请牢记此密码!(如果忘记,本地数据将无法恢复)
  • 如果不输入,系统会使用默认密码(不推荐)

核心功能使用

功能一:身份与网络

1.1 查看和复制本机邀请码

  1. 启动应用后,默认显示"身份与网络"标签页
  2. 顶部会显示你的本机专属邀请码
  3. 点击"复制邀请码"按钮,将邀请码复制到剪贴板
  4. 将此邀请码发送给其他需要连接的节点

邀请码的作用

  • 包含你的公钥指纹和网络坐标
  • 其他节点通过此邀请码可以安全地连接到你

1.2 连接远端节点

  1. 获取其他节点的邀请码
  2. 在"连接远端节点"输入框中粘贴邀请码
  3. 点击"发起UDP穿透与安全握手"按钮
  4. 等待连接建立(状态会显示"安全链接建立")

连接过程

  • 系统会自动执行 UDP 打洞(NAT 穿透)
  • 使用 Kyber 密钥交换建立加密通道
  • 使用 Dilithium 签名进行身份认证

功能二:资产备份

2.1 备份流程

  1. 点击左侧边栏的"资产备份"标签
  2. 点击"选择待保护机密文件"按钮
  3. 在弹出的文件选择框中选择要保护的文件
  4. 设置参数:
    • 总节点数 (N):将文件分割成多少份(默认 5)
    • 恢复门限 (T):需要多少份才能恢复文件(默认 3)
    • ⚠️ 注意:必须满足 1 < T <= N
  5. 点击"执行核心资产分割与加密"按钮
  6. 等待进度条完成

2.2 备份完成后

  • 系统会显示成功提示,包含元数据清单文件的保存位置
  • 请妥善保管这个清单文件(.json 格式),恢复时需要用到
  • 文件份额会通过 P2P 网络分发到已连接的节点

备份原理

  1. 文件被加密(AES-256-GCM)
  2. 使用 Shamir 秘密共享算法分割成 N 份
  3. 份额加密存储并分发到网络
  4. 需要至少 T 份才能重构原文件

功能三:资产恢复

3.1 恢复流程

  1. 点击左侧边栏的"资产恢复"标签
  2. 点击"导入资产清单 (Manifest)"按钮
  3. 选择备份时生成的清单文件(.json
  4. 点击"执行身份签名验证与资产重构"按钮
  5. 等待进度条完成

3.2 恢复过程

  • 系统会向 P2P 网络广播拉取请求
  • 收集足够的份额(>= T)
  • 验证每个份额的身份签名
  • 使用 Shamir 算法重构原始文件
  • 恢复完成后会显示文件保存位置

常见问题

Q1: pip 安装依赖时出现 "Fatal error in launcher" 错误?

A: 使用 python -m pip 代替 pip,例如:

python -m pip install -r requirements.txt

如果想永久修复,可以重新安装 pip:

python -m pip install --upgrade --force-reinstall pip

Q2: 忘记本地金库密码怎么办?

A: 很遗憾,本地金库密码无法找回。你需要:

  1. 删除 data/keys/ 目录下的密钥文件
  2. 删除 data/shares/ 目录下的份额文件
  3. 重新启动应用,设置新密码
  4. ⚠️ 注意:之前本地存储的数据将无法恢复

Q3: 连接其他节点失败?

A: 请检查:

  1. 对方节点是否在线
  2. 邀请码是否正确(完整复制,不要有多余空格)
  3. 网络是否允许 UDP 通信(某些防火墙可能阻止)
  4. 双方是否都在同一版本的系统上

Q4: 恢复时收集不到足够的份额?

A: 可能原因:

  1. 存储份额的节点不在线
  2. 网络连接问题
  3. 检查清单文件是否正确
  4. 尝试等待更长时间,或联系更多节点上线

Q5: 支持哪些文件类型?

A: 系统支持任何类型的文件:

  • 文档(.docx, .pdf, .txt 等)
  • 图片(.jpg, .png, .gif 等)
  • 视频和音频文件
  • 压缩包(.zip, .rar 等)
  • 任意二进制文件

文件大小建议:虽然系统支持大文件,但建议单个文件不超过 1GB 以获得最佳性能。

Q6: 如何确保安全性?

A: 系统通过多层加密保护:

  1. 传输层:Kyber 密钥交换 + AES-256-GCM 加密
  2. 身份认证:Dilithium 数字签名
  3. 存储层:本地金库 AES-256-GCM 加密
  4. 容灾层:Shamir 秘密共享,即使部分节点丢失也能恢复

Q7: 可以在多台设备上使用同一身份吗?

A: 不建议。每个节点应该有独立的身份:

  • 身份文件存储在 data/keys/node_identity.json
  • 如果需要在多台设备使用,可以复制此文件(但存在安全风险)
  • 更好的方式是让每台设备生成独立身份,然后互相连接

技术支持

如遇到其他问题,请检查:

  1. Python 版本是否符合要求
  2. 所有依赖是否正确安装
  3. 网络连接是否正常
  4. 防火墙设置是否允许 UDP 通信

附录:配置参数说明

如需调整高级参数,可编辑 src/config.py

参数类参数说明默认值
ThresholdParamsn_participants默认总节点数5
ThresholdParamst默认恢复门限3
NetworkParamsMTU网络最大传输单元1400
NetworkParamsHANDSHAKE_TIMEOUT握手超时(秒)5.0
NetworkParamsRTO_INITIAL重传超时初始值(秒)0.2

欢迎任何形式的贡献!

  1. 提交 Bug 报告 - 发现问题请提交 Issue
  2. 提交功能建议 - 有好的想法欢迎讨论
  3. 提交代码 - 修复 Bug 或添加新功能
  4. 改进文档 - 帮助完善使用文档
  5. 推广宣传 - 分享给更多人使用

欢迎提出改进意见

关于 About

一个基于格密码学的抗量子去中心化资产保护系统

语言 Languages

Python100.0%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
85
Total Commits
峰值: 38次/周
Less
More

核心贡献者 Contributors