blazenxt/vault100
GitHub: blazenxt/vault100
一款免费开源的零知识本地文件加密工具,通过级联加密与多平台互通的保险库格式保护用户文件隐私。
Stars: 0 | Forks: 0
# 🔐 Vault100 — 最高安全级别、零知识文件加密
**将任何文件封装为 `.v100` 保险库 — 在浏览器中、通过 CLI 或在桌面上进行。文件、密码和密钥永远不会离开您的设备。**
[](https://github.com/blazenxt/vault100/releases)
[](LICENSE)
[](#installation)
[](https://vault100.blazenxt.in/)
[](#testing)
🌐 **在线零知识 Web app:** **[vault100.blazenxt.in](https://vault100.blazenxt.in/)** — 可作为离线 PWA 安装 · 也可通过一个零依赖的 Node 服务器[自托管](#self-hosting)
| 🖥 桌面 GUI | 💻 CLI 引擎 | 🌐 网页柜台 (PWA) |
|---|---|---|
| Tkinter 应用 — 拖拽文件,选择强度,封装 | `python -m vault100 encrypt …` | 5 个窗口,108 个 KDF 档位,基准测试仪器 |
三个载体,同一种机制 — **保险库在 Web、CLI 和 GUI 之间完全互通**。
- [为什么选择 Vault100](#why-vault100)
- [安全架构](#-security-architecture)
- [网页柜台](#-the-web-counter)
- [安装说明](#-install) · [命令行](#-command-line) · [自托管](#-self-hosting-zero-knowledge)
- [测试](#-testing) · [诚实的局限性](#-honest-limitations)
- [贡献](CONTRIBUTING.md) · [安全政策](SECURITY.md)
## 为什么选择 Vault100
* **设计即为零知识** — 所有加密操作均在本地运行(Web Worker / 原生)。没有账号,没有遥测,没有托管,没有上传 — 可在源码和 DevTools 中验证。
* **分层且真正的安全** — XChaCha20-Poly1305 secretstream,可选的 AES-256-GCM 级联,具有 **108 个可调档位**的 Argon2id 内存硬化 KDF,以及针对不同设备的基准测试(“计时器”)。
* **实用的便利功能** — 无需重新加密主体即可即时更改密码,256 位 keyfile,保险库内置 gzip 压缩,整文件夹封装,文件名恢复,离线 PWA。
* **开放且文档齐全** — MIT 许可证,完全规范的容器格式,55 个自动化测试,CLI↔web 字节级精确兼容性验证。
## 🌐 网页柜台
**在线访问 [vault100.blazenxt.in](https://vault100.blazenxt.in/)** — 封印局的五个窗口,端到端零知识,并可作为离线优先的 PWA 安装:
| 窗口 | 功能 |
|---|---|
| Form 100-B · 封印 | 文件 & 整个文件夹 → `.v100` · 108 个 KDF 档位 · 级联 · keyfile · gzip |
| Form 100-C · 开启 | 本地解密 · 恢复原始名称 · 窥视详情 · 检查托盘预览 |
| Form 100-R · 重组 | 即时更改密码/keyfile — 重新封装头部,主体保持不变 |
| Annex D · 仪器 | keyfile 压制 · 密码生成 · 检查镜 · **计时器**设备基准测试 · 办公室清除策略 |
| 随处按下 Esc, Esc | 应急演练 — 清除柜台并销毁记录簿 |


柜台能做的一切,CLI 和桌面应用也能做 — 并且**在所有三者之间打开保险库时,字节级完全一致**。
## 为什么选择 Vault100
* **设计即为零知识** — 所有加密操作均在本地运行(Web Worker / 原生)。没有账号,没有遥测,没有托管,没有上传 — 可在源码和 DevTools 中验证。
* **分层且真正的安全** — XChaCha20-Poly1305 secretstream,可选的 AES-256-GCM 级联,具有 **108 个可调档位**的 Argon2id 内存硬化 KDF,以及针对不同设备的基准测试(“计时器”)。
* **实用的便利功能** — 无需重新加密主体即可即时更改密码,256 位 keyfile,保险库内置 gzip 压缩,整文件夹封装,文件名恢复,离线 PWA。
* **开放且文档齐全** — MIT 许可证,完全规范的容器格式,55 个自动化测试,CLI↔web 字节级精确兼容性验证。
## 🛡️ 安全架构
```
password ──► Argon2id ──┐
├─► HKDF-SHA256 ──► KEK ─┐
keyfile ──► BLAKE2b ────┘ (optional 2nd factor) │
▼
random FEK ──────────────────────────────────── XChaCha20-Poly1305 wrap
│
▼
┌─────────────────┐ optional ┌────────────────┐
│ AES-256-GCM ────┼─────────────►│ XChaCha20- │──► .v100 vault
│ (cascade layer) │ per chunk │ Poly1305 │
└─────────────────┘ │ secretstream │
└────────────────┘
```
| 层级 | 选择 | 为您带来的优势 |
|---|---|---|
| **信封密钥 (Envelope keys)** | 随机的每文件密钥 (FEK),由您的 KEK 封装 | 即时更改密码;永远无需批量重新加密 |
| **第二因素** | `--keyfile` — 256 位随机文件(任何文件均可,VeraCrypt 风格) | 攻击者需要*同时具备*两个因素;仅靠密码猜测无效 |
| **外部加密** | XChaCha20-Poly1305 (libsodium secretstream) | AEAD,192 位 nonces,自动重新加密,防截断 |
| **级联层** | `--cascade`:AES-256-GCM 封装在 XChaCha20 *内部* | 如果其中一个算法被破解,另一个依然有效 |
| **KDF** | Argon2id · 128 MiB×3 (`standard`) · 512 MiB×4 (`paranoid`) · **根据您的机器自动调整** (`max`) | GPU/ASIC 每秒只能进行数千次猜测,而非数十亿次 |
| **Salt** | 每个保险库随机生成 32 字节 | 相同文件 + 相同密码 ⇒ 生成完全不同的保险库 |
| **完整性** | 每 1 MiB 数据块一个 AEAD 标签;将不可变的流上下文作为 AAD;通过 Poly1305 校验密钥封装 | 防止位翻转、重排、截断、头部编辑 — 全都会被明确拒绝 |
| **隐私** | 原始文件名 + 元数据在保险库内加密 | 攻击者甚至无法看到文件原来的名字 |
| **抗 DoS** | 对不受信任的头部 KDF 参数进行合理的上限限制 | 恶意文件无法强制分配 4 GiB 内存 |
| **原子写入** | 临时文件 + 重命名 | 操作中途崩溃绝不会产生损坏的文件 |
### v2 文件格式 (`.v100`)
```
0 8 magic "V100ENC2"
8 1 format version (2) ← v1 files still decrypt forever
9 1 KDF id (1 = Argon2id)
10 4 KDF memory (KiB)
14 4 KDF time cost
18 1 KDF parallelism
19 1 flags (bit0 cascade · bit1 keyfile-required)
20 32 salt (KEK derivation) ← rewritten by `passwd`
52 24 wrap nonce ← rewritten by `passwd`
76 48/80 wrapped FEK (+Poly1305 tag) ← rewritten by `passwd`
24 secretstream header ← immutable; anchors all chunk AAD
.. chunks: [uint32 len][ciphertext] … (last chunk tagged FINAL)
chunk 1 (encrypted ×2 in cascade): metadata JSON {name, size, mtime}
chunk 2..N: your data
```
## 📦 安装说明
```
cd vault100
pip install -r requirements.txt # PyNaCl + argon2-cffi + cryptography
# GUI 需要 tkinter(随 Python 提供;Debian/Ubuntu:python3-tk)
```
## 💻 命令行
```
# 经典模式 — 包含强度计
python -m vault100 encrypt secret.pdf
# 全副武装:dual cipher + auto-tuned KDF + shred originals
python -m vault100 encrypt ./vault-folder/ --cascade --security max --shred
# 双因素:创建一个 keyfile,然后用它锁定一个 vault
python -m vault100 keygen /mnt/usb/my.v100key
python -m vault100 encrypt wallet.dat --keyfile /mnt/usb/my.v100key
# 锁定 / 解锁
python -m vault100 decrypt wallet.dat.v100 --keyfile /mnt/usb/my.v100key
# 在约一秒内更改密码(仅 124-byte 的 key wrap 会被重新封装)
python -m vault100 passwd wallet.dat.v100
# 关于 vault 的非机密事实
python -m vault100 info wallet.dat.v100
# 强密码 / passphrase 生成器
python -m vault100 genpass --count 3
python -m vault100 genpass --passphrase --words 8
# 计时器 — 设备速度测试(cipher 吞吐量 + Argon2id cost)
python -m vault100 bench
# 安全删除任何内容
python -m vault100 shred old_keys.pem --passes 7
```
环境/自动化:`VAULT100_PASSWORD`,`--password-file`,`-q`。
## 🖥️ 桌面 GUI
```
python -m vault100.gui
```
**Encrypt** 标签页 — 文件夹,keyfile 选择器,级联开关,安全级别
(包含机器自动调整),实时强度计,封装后粉碎 ·
**Decrypt** 标签页 — 批量解锁,keyfile,原始文件名恢复 ·
**Shred** 标签页 — 多遍销毁器 ·
**Tools** 标签页 — keyfile 生成器,即时密码更改,保险库检查器。
## ✅ 经过测试的安全属性(55/55 通过)
```
VAULT100_FAST_KDF=1 python3 -m pytest tests/test_crypto.py -v
```
* ✔ 往返测试:空文件 / 边界 / 多数据块 / 级联 / keyfile
* ✔ 密码错误、keyfile 错误、keyfile 缺失 → 拒绝
* ✔ 封装的 FEK 篡改 → 拒绝(密钥封装上有 Poly1305)
* ✔ 任何位翻转、截断、尾部垃圾数据、头部编辑 → 拒绝
* ✔ 恶意 DoS 头部(4 GiB KDF 声明,未知标志) → 低成本拒绝
* ✔ `passwd` 会即时重新封装密钥;旧密码失效;数据字节不受影响
* ✔ 随后可通过 `passwd` 添加 keyfile — 保险库升级为双因素验证
* ✔ v1 保险库永远可解密(已测试向下兼容)
* ✔ 相同输入两次 → 生成不同的密文(随机 salt + FEK)
## ⚠️ 诚实的局限性
* **`passwd` 注意事项:** 任何持有*旧保险库文件副本*以及
旧密码的人,仍然可以解密该副本(这对于 LUKS/VeraCrypt 也是一样的)。
如果这对您很重要,请粉碎旧副本。
* **keyfile = 房屋钥匙:** 请分开存放,并保留备份 — 如果丢失,
保险库将永远被封死。密码也是如此。不存在任何后门。
* 粉碎操作在 HDD 上是可靠的;闪存/SSD 的磨损均衡可能会保留残留
副本 — 尽可能在数据写入磁盘*之前*进行加密。
* Python 无法保证密钥会从 RAM 中擦除(由 OS 管理);在面对
国家级威胁模型时,请配合使用全盘加密。
* 尚未经过专业审计。请备份所有重要数据。
## 🌐 自托管(零知识)
`web/` 是一个静态的、**零知识** Web app:所有的加密过程都在
访问者的浏览器中进行(WASM libsodium + Argon2,WebCrypto AES-GCM 级联),而
服务器仅仅是一个无状态文件托管商。保险库与**此 CLI 字节级兼容**
— 已在测试实验室中进行双向验证。有关交钥匙部署方案(Caddy/Nginx,自动 HTTPS,强化的 CSP/HSTS headers)以及
确保其保持零知识特性的运维规则,请参阅 `web/DEPLOY.md`。
```
docker build -t vault100 . && docker run -p 8080:8080 vault100
# — 或者,zero-dependency —
node web/server.mjs # serves on :8080 (honors $PORT), /health for checks
```
## 🆕 更新日志亮点
**v2.0.x 系列**(所有版本请见
[发布页面](https://github.com/blazenxt/vault100/releases)):
* **2.0.16** — 公开发版优化:SEO(robots/sitemap/OG/JSON-LD),录制了章程 + FAQ,发布文档
* **2.0.15** — 计时器设备基准测试 · 穿孔批量收据序列号 · CLI `bench` · GUI gzip
* **2.0.14** — 文件夹→tar 封装 · 保险库内置 gzip · 检查托盘预览
* **2.0.13** — 空闲清除 · Esc-Esc 应急演练 · 剪贴板熔炉 · 保险库窥视
* **2.0.12** — Form 100-R 即时密码更改 (Web)
* **2.0.11** — 主题套件:5 种柜台墨水 × 白班/夜班
* **2.0.10** — 针对内存紧张的浏览器自动调整 KDF
* **2.0.0** — 信封加密 (KEK/FEK) · keyfile 第二因素 · 级联双密码 ·
自动调整的 `max` KDF 配置文件 · 即时 `passwd` · v1 保险库兼容性 ·
零知识 Web 版本,实现字节级精确的 CLI 互操作(双向验证:
Argon2id,HKDF,BLAKE2b,AES-GCM,完整保险库)
标签:AI工具, DNS 反向解析, MITM代理, PWA, Python, 后端开发, 密码学, 手动系统调用, 文件加密, 无后门, 桌面应用, 请求拦截, 逆向工具, 零知识证明