You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
p9x5lkiwf 6c1e928f8c
ADD file via upload
2 weeks ago
core ADD file via upload 2 weeks ago
ui ADD file via upload 2 weeks ago
.gitignore ADD file via upload 2 weeks ago
README.md ADD file via upload 2 weeks ago
init_keygen.py ADD file via upload 2 weeks ago
main.py ADD file via upload 2 weeks ago
main_window.py ADD file via upload 2 weeks ago
requirements.txt ADD file via upload 2 weeks ago
signaling_server.py ADD file via upload 2 weeks ago
utils.py ADD file via upload 2 weeks ago

README.md

基于网络的文件安全传输工具

项目简介

一个基于“数字信封 + 数字签名Encrypt-then-Sign”的文件安全传输工具提供 GUI 和 P2P 直连传输,适合教学与小型场景演示。

功能特性

  • 支持 AESCBC/GCM/CTR对称加密
  • 数字信封 v2.0:强制数字签名(先加密后签名),保证完整性与来源认证
  • RSA 封装 AES 密钥,信封中不携带公钥,基于本地受信任公钥验证签名
  • 从 .enc 加密文件一键生成数字信封
  • 文件摘要校验SHA-256
  • P2P 点对点传输(文件不经中转服务器)

安全设计与假设v2.0

本项目面向教学/演示,安全模型做出适度简化:

  • 公钥分发:假设通过线下可信渠道交换公钥;信封中不携带公钥,验证一律使用“本地预置受信任公钥”。
  • 数字签名v2.0 强制“先加密后签名Encrypt-then-Sign签名对象为密文的哈希拒绝无签名的信封。
  • 信令服务器:仅用于交换对端地址,不承载文件内容;假定在可控环境中运行。
  • 传输信道P2P 直连;公网环境建议再叠加 TLS。
  • 未覆盖CA 证书体系、证书链与吊销检查、防重放、NAT 穿透等高级特性。

生产环境加固建议:

能力 当前 建议
身份认证 数字签名 结合 CA 体系与证书链校验
公钥分发 线下分发 引入 PKI/CA、指纹比对或 TOFU
传输安全 P2P 明文信道 叠加 TLS 或 QUIC+TLS
防重放 未实现 加入 Nonce/时间戳/序列号
NAT 穿透 未实现 STUN/TURN/ICE 或中继

目录结构

SecureFileProject/
├── keys/                    # 存放 .pem 证书和私钥
├── core/
│   ├── __init__.py
│   ├── crypto.py           # 核心加密逻辑AES/RSA
│   ├── protocol.py         # 数字信封封装与解析
│   ├── transfer.py         # P2P 传输模块
│   └── signaling_client.py # 信令客户端
├── ui/
│   ├── __init__.py
│   ├── main_window.py      # Tkinter 主窗口与上下文
│   ├── context.py          # 共享 GUI 上下文与工具
│   ├── keys_tab.py         # 证书/密钥页
│   ├── crypto_tab.py       # 加密/解密页
│   ├── envelope_tab.py     # 数字信封页
│   ├── p2p_tab.py          # P2P 传输页
│   └── about_tab.py        # 说明页
├── signaling_server.py     # 信令服务器(独立运行)
├── main.py                 # 客户端程序入口
└── utils.py                # 文件读写等辅助工具

安装依赖

推荐使用虚拟环境,并按 requirements.txt 安装:

# Windows PowerShell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

若仅想快速运行核心功能,也可直接:

pip install -r requirements.txt

使用方法

1. 启动信令服务器(需要一台电脑作为服务器)

python signaling_server.py

2. 启动客户端(发送方和接收方都需要启动)

支持启动时指定信令地址/端口、用户名和本地监听端口,方便同机多实例测试。

# 示例:发送方 alice监听 8001信令端口 9999
python main.py --user alice --listen-port 8001 --sig-port 9999

# 示例:接收方 bob监听 8002信令端口 9999
python main.py --user bob   --listen-port 8002 --sig-port 9999

参数说明:

  • --user:客户端用户名(默认 alice
  • --listen-portP2P 本地监听端口(默认 8001
  • --sig-host:信令服务器地址(默认 127.0.0.1
  • --sig-port:信令服务器端口(默认 9999

3. 使用流程

完整的安全文件传输流程:

  1. 【密钥/证书】生成密钥对:生成 RSA 密钥对并相互交换公钥(线下可信方式)。
  2. 【两种创建信封的方式】:
    • 方式 A推荐在“数字信封”页直接选择原文件选择算法推荐 GCM使用接收方公钥封装并签名。
    • 方式 B先在“加密/解密”页用 AES 加密生成 .enc,再在“数字信封”页导入 .enc 生成信封。
  3. 【P2P 传输】:将 .envelope.json 发送给对方。
  4. 【验证与解密】:接收方加载本地受信任的发送方公钥,验证签名并解密恢复原文件。

关键说明:

  • “数字信封 v2.0”强制签名;缺失签名或签名验证失败的信封会被拒绝。
  • 信封中不包含发送方公钥;验证必须使用本地预置的受信任公钥。
  • .enc 文件仅用于演示对称加密流程,不应直接传输(对称密钥明文可见)。

4. 数字信封 v2.0 说明

结构(简化示例):

{
    "version": "2.0",
    "algorithm": "AES-256-GCM",
    "encrypted_key": "<Base64(RSA(AES_key))>",
    "iv": "<Base64(IV)>",
    "encrypted_data": "<Base64(ciphertext)>",
    "tag": "<Base64(GCM tag)>",
    "digest": "<Base64(SHA-256(original_file))>",
    "filename": "example.pdf",
    "filesize": 12345,
    "sender_id": "alice",
    "signature": "<Base64(Sign(hash(ciphertext)))>"
}

实现细节:

  • 模式支持:创建支持 CBC/GCM/CTR解析当前支持 CBC/GCMCTR 解析未启用)。
  • 签名对象:对密文做 SHA-256 后进行 RSA 签名Encrypt-then-Sign
  • 摘要字段:存储原始明文文件的 SHA-256用于完整性校验。

开发任务分配(节选)

  • 数字信封 v2.0Encrypt-then-Sign、移除信封携带公钥
  • 从 .enc 文件创建数字信封
  • P2P 直传与基本信令
  • 引入 TLS/证书链验证
  • 防重放Nonce/时间戳)与会话绑定

P2P 传输架构

三层架构

客户端 A ←→ 信令服务器 ←→ 客户端 B
    ↓                           ↓
    └─────── P2P 直接连接 ───────┘

工作流程

  1. 注册阶段双方启动客户端向信令服务器注册IP + 端口)
  2. 发现阶段:发送方查询接收方的连接信息
  3. 连接阶段:发送方主动连接接收方
  4. 传输阶段:直接传输加密的数字信封(文件)

优势与限制

优势

  • 文件不经过服务器,隐私性强
  • 传输速度快,无中转延迟
  • 服务器压力小(只传输元信息)

⚠️ 限制

  • 目前仅支持局域网环境
  • 需要双方同时在线
  • NAT 穿透需要额外配置(高级功能)

数字信封流程

参见项目需求文档中的流程图。

Git 工作流(推荐)

以功能分支为例:

# 初次克隆
git clone https://github.com/moxuun/SecureFileProject.git

# 基于 main 创建功能分支
git checkout -b feature/your-name

# 日常开发提交
git add -A
git commit -m "feat(envelope): xxx"

# 同步主分支并保持线性历史
git fetch origin
git pull --rebase origin main

# 推送功能分支
git push -u origin feature/your-name

# 出现“无法自动合并”/冲突时:
git fetch origin
git pull --rebase origin main
# 按提示解决冲突后
git add <resolved-files>
git rebase --continue
git push -f origin feature/your-name

在 GitHub 上创建 Pull RequestCI 通过且无冲突后合并即可。