Files

3.9 KiB
Raw Permalink Blame History

7z-encrypt

端到端加密文件传输 | 零知识 + 零合并 | 服务端无密钥不解密

发行版下载 (deb 安装包, 依赖自动安装): Gitee Releases v1.3.0 · Gitea Releases v1.3.0

自托管、零知识、零合并的私有文件网盘。服务器只存密文卷——看不到内容,也看不到文件名。

本地                               服务器 (任何自有机器)               本地
文件 ──32MB 切卷──> ┌───────────────────────────┐ ──aria2 并发拉卷──> 密文卷
   │                │ 只存密文卷, 零合并不拼接   │      │
   ├─ 逐卷 7z ─────>│ 不持密钥, 不解密          │      ├─ 逐卷解密 (context=vol:N)
   ├─ 逐卷加密 ────>│ 不存明文文件名            │      ├─ 7z 解压
   └─ aria2 反向拉─>│ SQLite 元数据 + 目录管理   │      └─ 按序拼接还原
                    └───────────────────────────┘

核心设计

  • 零知识: 密钥永不出客户端。AES-256-GCMC2SP chunked 流式认证加密, 16KiB 分块)
  • 零合并: 服务端不存在解密/拼接代码路径, 密文卷原样落盘(怎么传的怎么放), 物理上无明文还原能力
  • 卷级加密: 32MB 统一切卷, 每卷 nonce 由 context=7z-encrypt:v1:vol:N 派生——加密参数零存储, 下载端按卷号重建
  • 逐卷压缩: 可压缩格式逐卷 7z mx=9; 已压缩格式(apk/zip/图片/视频黑名单)跳过二次压缩直传
  • aria2 全链路: 上传走服务端反向拉取(客户端临时 HTTP 19000-19100+ pull-status 实时进度; 下载 8 并发 × 4 连接/卷
  • 完整性: 逐卷 SHA-256 校验 + complete 总哈希双校验
  • 账户隔离: 一个账户一个空间, 跨账户 403 硬拒绝
  • 文件名加密: 元数据文件名也加密(enc: URL-safe base64

安装

# deb 安装 (postinst 自动安装 aria2/p7zip/venv 依赖)
sudo dpkg -i 7z-encrypt-client_1.0.0_all.deb        # 源码版 (手机/Termux)
sudo dpkg -i 7z-encrypt-client-bin_1.0.0_amd64.deb  # Nuitka 编译版 (PC, 免 Python)

# 源码运行
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

命令: sz-transfer (CLI) / sz-tui (终端界面) / sz-config (配置) / sz-backup (一键备份)

完整 CLI 使用文档: docs/CLI.md (上传/下载/备份/目录/账号/示例)

目录管理

sz-transfer --dir-create 相册备份     # 创建目录 (按用户隔离)
sz-transfer --dir-list               # 列表 (含每目录文件数)
sz-transfer --dir-delete 1           # 删除目录
sz-transfer --init a.init.json --manifest a_manifest.json --dir 1   # 上传到指定目录
sz-transfer --move 1 2               # 移动文件到目录 (0=根)
sz-transfer --clone 1 2              # 克隆文件 (物理复制卷 + 新记录)
sz-transfer --list                   # 文件列表 (目录 + [目录名] 归属标记)

一键备份

sz-backup photos      # 整个文件夹 = 一个文件: tar → 32MB 卷压缩 → 逐卷加密 → aria2 上传
sz-backup documents   # 同上 (不分批, 全量单文件)
sz-backup restore photos   # 下载 → 自动还原 → 解包

测试

.venv/bin/pytest -q    # 71 tests

部署

代价与适用场景

自持硬件可用性(无 SLA/异地容灾)、无 Web/移动 App(CLI + TUI)、密钥丢失不可恢复。适合对数据主权有硬性要求的场景: 备份、涉密归档、跨设备私有传输。