zavetsec/ZavetSec-Vault
GitHub: zavetsec/ZavetSec-Vault
一款零依赖、零安装、完全离线的单文件密码管理器,数据仅存本地浏览器,规避云端泄露风险。
Stars: 1 | Forks: 0
# ZavetSec Vault
    
**下载 → 在浏览器中打开 → 即可使用。** 无需安装。无需账户。除了可选的 favicon 外,无任何网络请求。
## ⚠️ 开始前请务必阅读
**数据存储在浏览器中** (`localStorage`) —— 而非磁盘或云端。
| 操作 | 结果 |
|---|---|
| 关闭并重新打开浏览器 | ✅ 数据保留 |
| 重新加载页面 (F5) | ✅ 数据保留 |
| 在 **无痕 / 隐私模式** 下打开 | ❌ 无数据 —— 存储空间隔离 |
| 在 **不同的浏览器** 中打开 | ❌ 无数据 —— 每个浏览器都有独立的 localStorage |
| 清除浏览器历史记录 / 站点数据 | ❌ **数据永久删除** |
| 重新安装浏览器 | ❌ **数据永久删除** |
| 更换电脑 | ❌ 没有备份则无数据 |
### 如何避免丢失密码
使用工具栏中的 💾 按钮导出 `.vault` 文件 —— 这是一个仅能用主密码打开的 AES 加密备份。应用会每 7 天提醒您一次。请将其存储在加密的 USB 驱动器或 VeraCrypt / BitLocker 容器中。
## 功能对比
| | ZavetSec Vault | KeePass | Bitwarden | 1Password |
|---|---|---|---|---|
| 安装 | **无需** | 需要 | 需要 | 需要 |
| 依赖 | **零** | .NET / Mono | Electron | Electron |
| 云端 | **从不** | 可选 | 默认开启 | 默认开启 |
| 网络活动 | **无** | 更新检查 | 同步到云端 | 同步到云端 |
| 开源 | ✓ | ✓ | ✓ | ✗ |
| 完全离线工作 | ✓ | ✓ | 部分 | 部分 |
| KeePass XML 导入/导出 | ✓ | — | ✓ | ✓ |
| 代码库大小 | **约 1,400 行,1 个文件** | 大型生态系统 | 大型生态系统 | 闭源 |
| 界面语言 | RU + EN | 多语言 | 多语言 | 多语言 |
| 已知泄露 | 无 | 无 (见注) | 无 | 无 |
ZavetSec Vault 并非 KeePass 或 Bitwarden 的替代品 —— 它占据了一个不同的定位:**极致简约且零安装阻力**,代价是受限于浏览器。请根据您的威胁模型选择合适的工具。
### 为什么“无云”比听起来更重要
**基于云的密码管理器是高价值目标。** 2022 年,LastPass —— 全球最受欢迎的密码管理器之一 —— 遭遇泄露,攻击者窃取了数百万用户的加密保险库备份。到 2025 年,区块链调查人员追踪到超过 **1.5 亿美元的加密货币被盗** 直接源于那些被盗的保险库,由于弱主密码继续被离线破解,攻击至今仍在持续。此次泄露导致 LastPass 被英国 ICO 罚款 160 万英镑。
任何基于云的密码管理器的结构性风险在于 **您的加密保险库存储在他人的服务器上**。提供商的一次泄露就会给攻击者无限的离线时间来暴力破解您的主密码 —— 无论加密有多好。
**安装型桌面应用也有其自身的风险。** KeePass 本身是值得信赖的开源软件 —— 它已经过两次审计,包括欧盟的 FOSSA 项目。然而,一项记录在案的 2024 年攻击活动显示,攻击者通过合法广告网络推广的假冒网站分发植入木马的 KeePass 版本。恶意安装程序使用有效证书签名,绕过了 Windows 警告。发现了五种不同的木马化变种,均悄无声息地将密码窃取到攻击者服务器。这本身不是 KeePass 的缺陷,也不限于 KeePass —— 它反映了适用于任何您下载并执行的二进制文件的通用软件分发风险。无论原始项目多么值得信赖,攻击面都存在。
使用强主密码、硬件 2FA 和经过审计的实现,基于云的密码管理器仍然是一个合理的选择。这种风险是结构性的,而非绝对的 —— 但它是真实存在的,并随着您存储内容的价值而增加。
ZavetSec Vault 消除了这两种风险。没有可被入侵的服务器。没有可被植入木马的二进制文件。整个代码库是一个单一的人类可读 HTML 文件 —— 在信任之前,用文本编辑器打开并逐行阅读。小体积使人工审查变得可行,但仅靠可读性并不能保证安全。目前尚未进行正式审计。
## 威胁模型
### 防护对象
- 磁盘被盗(数据使用 AES-256-GCM 静态加密)
- 有权访问您文件系统的离线攻击者
- 云端入侵(不涉及云端)
- 服务器端泄露(无服务器)
### 无法防护对象
- 恶意或受损的浏览器扩展(扩展可以读取 `sessionStorage`)
- 有权访问您正在运行的浏览器进程的实时内存攻击者
- 捕获您主密码的键盘记录器
- 对已解锁、处于活动状态会话的物理访问
- 浏览器 localStorage 被擦除(→ 始终保留 `.vault` 备份)
## 安全性
### 加密参数
| 参数 | 值 |
|---|---|
| 加密 | AES-256-GCM |
| 密钥派生 | PBKDF2 |
| KDF 迭代次数 | 310,000 |
| KDF 哈希 | SHA-256 |
| 盐值 (Salt) | 256 位,每个保险库随机生成 |
| IV / nonce | 96 位,每次加密随机生成 |
| 主密码存储 | 从不 |
| 密钥存储 | 仅 RAM(当前标签页) |
### 存储位置详解
| 存储位置 | 内容 | 清除时机 |
|---|---|---|
| `localStorage` | 加密数据块 + 盐值 | 浏览器数据被清除 |
| `sessionStorage` | 派生密钥引用 (F5 恢复) | 标签页关闭 |
| RAM | 解密后的数据 | 保险库锁定 / 标签页关闭 |
| 无 | 主密码 | 从不存储 |
### 自动锁定
**15 分钟不活动后锁定**,状态栏中有可见的倒计时。最后 60 秒变为黄色。
### Favicon 隐私说明
当条目包含 URL 时,应用会从 Google 的公共图标服务 (`https://www.google.com/s2/favicons`) 请求其 favicon。这会将域名透露给 Google。如果您对此有顾虑,请将 URL 字段留空 —— 应用在没有它的情况下也能完全正常运行。
### 安全免责声明
## 快速开始
1. 下载 `zavetsec-vault.html` (EN) 或 `zavetsec-vault-ru.html` (RU)
2. 在任意现代浏览器(Chrome, Firefox, Edge, Safari)中打开
3. 选择 **“创建保险库 (create vault)”** 并设置主密码(建议 12+ 个字符)
4. 通过 **+ entry** 或 `Ctrl+Shift+A` 添加条目
5. **立即导出** —— 点击 💾 并将 `.vault` 文件存储在安全的地方
## 功能特性
- **分组** —— 个人、工作、财务、VPN/OPSEC、邮箱、开发 + 自定义分组
- **图标选择器** —— 40 个 emoji,根据标题和 URL 自动检测(GitHub, Gmail, Telegram, Docker 等)
- **密码生成器** —— 长度 8–64(默认:16),可配置字符集,排除易混淆字符 (0/O/1/l/I)
- **密码强度计** —— 基于长度、熵和字符多样性
- **密码年限指示器** —— 绿色 → 黄色 (>6 个月) → 红色 (>1 年)
- **自动锁定** —— 15 分钟不活动,状态栏倒计时
- **备份提醒** —— 若 7 天未导出则显示横幅
- **标签** —— 用于筛选的自定义标签
- **搜索** —— 标题、登录名、URL、备注、标签
- **一键复制** —— 即时将登录名或密码复制到剪贴板
- **F5 恢复会话** —— 重新加载无需重新输入主密码(标签页关闭时清除)
## 导出格式
### 💾 `.vault` —— 推荐
AES-256-GCM 加密的 JSON。仅能用您的主密码打开。用于备份和跨设备传输。
### KeePass XML 2.x
**未加密。** 仅用于迁移。导入后立即删除。
- ZavetSec → KeePass: 在 ZavetSec 中导出 KeePass XML → 在 KeePass 中 `File → Import → KeePass XML (2.x)`
- KeePass → ZavetSec: 在 KeePass 中 `File → Export → KeePass XML (2.x)` → 在 ZavetSec 中导入
### CSV
纯文本。迁移到第三方系统的最后手段。使用后删除。
## 键盘快捷键
| 快捷键 | 操作 |
|---|---|
| `Ctrl+Shift+A` | 新建条目 |
| `Ctrl+Shift+F` | 聚焦搜索 |
| `Ctrl+Shift+L` | 锁定保险库 |
| `Esc` | 关闭模态框 |
| `Enter` | 确认(密码字段) |
## 为什么用 localStorage 而不是 IndexedDB?
IndexedDB 提供更大的存储容量和更丰富的 API,但 `localStorage` 是经过深思熟虑的选择:在单文件语境下,它是**同步的、普遍支持的,且易于审计**。这里存储的加密数据块很小(密码压缩效果好),所以容量不是问题。其代价 —— 浏览器清除时数据丢失 —— 已明确记录,并通过 `.vault` 导出工作流加以缓解。
## 路线图
**功能**
- [ ] TOTP / 2FA 代码显示(存储 TOTP 密钥,客户端生成代码)
- [ ] 可配置的自动锁定超时
- [ ] 通过 HaveIBeenPwned k-anonymity API 检查密码泄露(选择加入)
- [ ] 深色 / 浅色主题切换
- [ ] 从 CSV 批量导入
**安全加固**
- [ ] Argon2id 作为可选 KDF(除了 PBKDF2 之外)
- [ ] 锁定时显式内存擦除例程(覆盖解密状态)
- [ ] CSP 沙箱模式以实现更严格的扩展隔离
- [ ] 专业第三方安全审计
## 项目结构
```
zavetsec-vault.html ← English interface (default)
zavetsec-vault-ru.html ← Russian interface
README.md
```
每个文件都是独立的:CSS(约 220 行)、HTML(约 280 行)、JavaScript(约 900 行)。无需构建步骤。可在任何文本编辑器中编辑。
## 许可证
MIT —— 可自由使用、修改和分发。
**ZavetSec** —— 信息安全,SOC/DFIR。
标签:AES-256-GCM, DNS枚举, HTML5, KeePass, LangChain, meg, T1566.002, 代码分析, 便携式, 信息安全, 凭证管理, 加密备份, 单文件, 后端开发, 多模态安全, 密码管理器, 开源, 数据可视化, 无云同步, 无安装, 本地存储, 浏览器端, 离线, 纯前端, 网络安全, 网络安全工具, 轻量级, 隐私保护, 零依赖