📄 技术论文: SecureVault_Technical_Paper_v3.5.0.pdf · 在 Zenodo 上引用
面向 Windows 的本地优先文件加密,使用物理 USB 密钥而非密码进行保护。
⚠️ v3.5.0 包含一项破坏性安全修复 — 从早期版本升级前请先查看 CHANGELOG.md。
Secure Vault 使用 AES-256-GCM 加密你 Windows 机器上的单个文件(或文件夹)。加密密钥并非仅由密码保护,而是随机生成并存储在你选择的 USB 闪存盘 上。之后要解密任何内容,都必须物理插入同一个 USB 盘。
密码可能被猜测、钓鱼、键盘记录或暴力破解。物理密钥无法像密码那样被远程窃取。在依赖此方案之前,需要了解以下权衡:
SecureVaultSetup-x.x.x.exe。Program Files\SecureVault(或你选择的位置)nodemailer,仅用于可选的邮件功能)正常安装无需手动步骤,也无需命令行。
安装后第一件要做的事是 注册一个 USB 盘作为你的主密钥。在此之前无法加密或解密任何内容。
masterE:(如果失败,请参阅 故障排除)。.vault_master.key 文件。不要删除此文件,也不要丢失此盘。可选但推荐:将该 .vault_master.key 文件复制到第二个安全存放的 USB 盘作为备份,以防主盘丢失或损坏。
通过开始菜单 / 桌面快捷方式启动应用,即可看到交互式菜单:
========================================
SECURE VAULT
========================================
1. Encrypt a file
2. Decrypt a file
3. Register USB
4. View devices
5. View backups
6. Restore file
7. Configure email
8. Install right-click menu
9. Exit
选择选项 1,然后输入文件或文件夹的完整路径。你注册的 USB 盘必须已插入。输出为一个 .vault 文件;在成功加密和备份后,原始文件会被安全删除(覆写 3 次)。
选择选项 2,输入 .vault 文件的路径。你注册的 USB 盘必须已插入 — 没有它无法解密。
已在上文 首次设置 中介绍。如果你希望为第二台机器使用单独的密钥,同时保留一个总体主密钥,也可以注册 额外的按设备密钥(选择 device 而非 master)。
列出当前注册的所有 USB 密钥(主密钥和设备密钥),数据来自 config/registered-devices.json。
每次加密文件时,Secure Vault 会自动在本地保存一份加密备份副本(轮换 — 保留最近 5 个,30 天后自动过期)。选项 5 可让你列出并查看这些备份。
从这些本地备份之一恢复文件,以便在无需经过解密流程的情况下取回加密前的版本。
可选。每当发生保险库操作(加密/解密)时向你发送邮件,包括哪个文件、哪台计算机以及时间。
设置需要 Gmail 应用专用密码 — 而不是你的普通 Gmail 密码。 步骤:
Enable email alerts? (y/n) → yYour Gmail address → 你为其生成应用专用密码的账户Gmail App Password → 粘贴 16 位代码(不是你的真实 Gmail 密码)Alert recipient email → 你希望接收提醒的地址(可以是同一地址)注意事项:
smtp.gmail.com)。config/settings.json 中 — 不要分享该文件,也不要将包含真实凭据的该文件提交到公共仓库。n 即可跳过,其他一切功能照常运行。将“使用 Secure Vault 加密” / “使用 Secure Vault 解密”添加到 Windows 资源管理器右键菜单,这样无需先打开应用菜单即可加密/解密。
所有功能也可在不使用交互式菜单的情况下使用:
node secure-vault-launcher.js encrypt "C:\path\to\file"
node secure-vault-launcher.js decrypt "C:\path\to\file.vault"
node secure-vault-launcher.js register master E:
node secure-vault-launcher.js register device F:
node secure-vault-launcher.js devices
node secure-vault-launcher.js backup list
node secure-vault-launcher.js backup view <name>
node secure-vault-launcher.js backup view-latest
node secure-vault-launcher.js restore list
node secure-vault-launcher.js restore restore "C:\path\to\file"
node secure-vault-launcher.js email
node secure-vault-launcher.js rightclick
node secure-vault-launcher.js help
请从安装文件夹(例如 C:\Program Files\SecureVault)运行此命令。
| 文件 | 用途 |
|---|---|
config/settings.json | 邮件提醒设置(地址、应用专用密码、启用标志) |
config/registered-devices.json | 已注册 USB 设备列表 |
这些文件在安装时以安全的占位值创建,并随你使用应用而自动更新 — 无需手动编辑。
如果在 Windows 上本地构建,需要 Inno Setup 6:
iscc installer.iss
输出:dist/SecureVaultSetup-<version>.exe
或者让 GitHub Actions 为你构建(无需 Windows 机器)— 推送一个版本标签:
git tag v3.5.0
git push origin v3.5.0
.github/workflows/build.yml 中的工作流会在 Windows 运行器上构建安装程序,并自动将其附加到 GitHub Release。
crypto 模块:AES-256-GCM 配合 scrypt 密钥派生,每次操作使用随机盐和 IV,并使用认证标签检测篡改。execFileSync 调用,参数以数组形式传递,而非 shell 字符串 — 这消除了早期版本中存在的命令注入风险,当时恶意构造的文件/文件夹名可能突破 shell 引号。Buffer 中(而非 JS 字符串),并在每次使用完成后立即显式清零(.fill(0))— 自 v3.5.0 起,这现在还包括解密后的明文文件内容本身,而不仅仅是密钥材料。这是一项真正的改进,但并非绝对保证 — Node.js/V8 可能在内部保留其他副本(例如在垃圾回收期间,或内存被操作系统分页到磁盘时),应用程序代码无法触及或控制这些副本。.exe 之前,你可以自行在此仓库中验证源代码。“Enter drive” — 我应该使用什么格式?
E、e、E: 或 E:\ 中的任何一种都可以 — Secure Vault 会自动规范化,并在写入任何内容之前验证该盘是否存在。
ENOENT 错误,提及安装目录内类似 e\.vault_master.key 的文件夹
这是旧版本中的一个 bug,当时输入的盘符没有冒号(例如仅 e)会被误读为相对文件夹名,而不是真实盘符。此版本已修复 — 如果你仍看到此问题,请更新到最新版本。
邮件提醒未发送