# ops-vault **Repository Path**: Adnois/ops-vault ## Basic Information - **Project Name**: ops-vault - **Description**: 一个安全的跨平台桌面应用,用于管理服务器信息和账号密码,所有数据都加密存储在本地。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-28 - **Last Updated**: 2026-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpsVault - 运维信息安全管理工具 (Electron 版本) 一个安全的跨平台桌面应用,用于管理服务器信息和账号密码,所有数据都加密存储在本地。 ## 功能特性 - 🔐 **安全存储** - 所有数据使用 AES 加密存储 - 💾 **本地存储** - 数据存储在本地,不上云 - 🔑 **主密码保护** - 使用主密码解锁应用 - 🏷️ **标签系统** - 使用标签分类管理服务器和账号 - 🔍 **搜索功能** - 快速搜索服务器和账号 - 🖥️ **跨平台** - 支持 Windows、macOS、Linux - 🎲 **密码生成器** - 内置安全随机密码生成与强度评估,一键填入表单 ## 技术栈 - **Electron** - 桌面应用框架 - **TypeScript** - 类型安全 - **React 18** - UI 框架 - **Vite** - 构建工具 - **Tailwind CSS** - 样式框架 - **electron-store** - 本地数据存储 - **Node Crypto / Web Crypto** - AES-256-GCM 与 PBKDF2 加密 ## 快速开始 ### 安装依赖 ```bash npm install ``` ### 开发模式 ```bash npm run dev ``` 这会同时启动 Vite 开发服务器和 Electron 主进程。 ### 构建生产版本 ```bash npm run build npm run dist ``` ## 项目结构 ``` ops-vault/ ├── src/ │ ├── main/ # 主进程代码 │ │ ├── index.ts # 应用入口 │ │ ├── preload.ts # 预加载脚本 │ │ ├── store.ts # 数据存储服务 │ │ ├── auth.ts # 认证服务 │ │ └── data.ts # 数据服务 │ ├── renderer/ # 渲染进程代码 │ │ ├── index.html # HTML 模板 │ │ ├── index.tsx # React 入口 │ │ ├── index.css # 样式 │ │ ├── App.tsx # 主应用组件 │ │ └── components/ # React 组件 │ │ ├── SetupPassword.tsx │ │ ├── Login.tsx │ │ ├── MainApp.tsx │ │ ├── ServerList.tsx │ │ └── ServerForm.tsx │ ├── types/ # 类型定义 │ │ └── index.ts │ └── renderer/utils/ # 渲染端工具 │ └── passwordGenerator.ts # 密码生成与强度评估 ├── package.json ├── tsconfig.json ├── tsconfig.main.json ├── vite.config.ts ├── tailwind.config.js └── postcss.config.js ``` ## 安全设计 ### 加密方案(已实现) - **主密码绝不落盘**:本地只保存「用主密码派生的密钥加密后的数据密钥」,不保存明文主密码,也不保存其哈希。 - **主密码派生 KEK**:使用 PBKDF2(SHA-256, 100,000 次迭代)从主密码派生密钥加密密钥(KEK)。 - **独立随机数据密钥**:首次设置时生成 256-bit 随机数据密钥(仅驻留内存),所有业务数据用它加密。 - **业务数据 AES-256-GCM 加密**:`appData`(服务器/应用账号及其密码)在写入本地存储前用数据密钥做 AES-256-GCM 加密,具备完整性认证。 - **备份文件同样加密**:`.ovb` 备份使用独立的 AES-256-GCM + PBKDF2 方案,口令错误会被 GCM 认证标签直接拒绝。 - **备份恢复语义明确**:备份口令**仅用于解密** `.ovb` 文件,**不会更改**您的登录主密码;恢复后数据使用您**当前登录主密码**对应的数据密钥重新加密保存。备份文件不携带主密码/keychain,因此换设备后只要先设置主密码即可恢复。恢复的 `settings` 中「定时备份口令」字段保持不变(与当前数据密钥绑定,避免旧密钥加密值覆盖损坏);历史记录与现有记录合并而非覆盖。 - **定时备份路径可配置**:默认定时备份目录为「应用数据目录/auto-backups」(`~/Library/Application Support/ops-vault/auto-backups` 等),可在设置中自定义为任意本地目录;留空即回退默认。自动备份保留最近 10 个,避免占满磁盘。 - **剪贴板定时清空**:复制到剪贴板的密码在 30 秒后自动清空(若期间未被其他内容覆盖)。 - **富文本消毒**:备注等富文本在渲染前经 DOMPurify 消毒,防止存储的 HTML 夹带脚本。 - **统一密码强度策略**:主密码(设置/修改)与备份口令最低长度统一为 **8 位**,前后端共用同一常量(`src/main/constants.ts`),主进程侧兜底强制,避免阈值不一致;设置/修改主密码与创建备份口令时实时显示基于熵估计的强度(弱/中等/强/很强)。 > 历史版本曾把主密码明文写入本地配置,当前版本已修复;旧数据会在首次登录时静默重新加密。 ### 数据流程 1. 用户设置主密码 2. 生成随机 256-bit 数据密钥(dataKey) 3. 用 PBKDF2(主密码) 派生 KEK,加密 dataKey 后保存(仅此密文落盘) 4. 所有业务数据用 dataKey 做 AES-256-GCM 加密后存储 5. 登录时:用主密码派生 KEK 解密 dataKey 装入内存;失败(GCM 认证不通过)即密码错误 6. 修改主密码:仅用新主密码重新加密同一个 dataKey,业务数据无需重新加密 ## 使用说明 ### 首次使用 1. 启动应用后,设置主密码 2. 主密码用于解锁应用,请妥善保管 3. 设置成功后进入主界面 ### 管理服务器 1. 点击"添加"按钮添加新服务器 2. 填写服务器名称、主机、端口、用户名等信息 3. 可以创建并选择标签进行分类 4. 支持搜索和快速筛选 ### 标签管理 1. 在添加/编辑服务器时可以创建新标签 2. 支持自定义标签颜色 3. 点击标签可快速筛选 ## 开发状态 ### 已实现 - ✅ 安全加密和存储(AES-256-GCM + PBKDF2,主密码不落盘) - ✅ 主密码认证系统 - ✅ 服务器管理功能 - ✅ 账号密码管理(服务器账号 / 服务凭据 / 应用账号) - ✅ 密码生成器(内置安全随机生成 + 强度评估) - ✅ 标签系统 - ✅ 搜索功能 - ✅ 自动锁定(基于不活动超时,主进程侧另设权威空闲计时兜底,前端计时器失效时仍会清空内存 dataKey 并触发锁屏) - ✅ 设置界面(自动锁定、剪贴板清除时长等) - ✅ 富文本消毒(DOMPurify) - ✅ 剪贴板定时清空 - ✅ 定时备份(设置中可启用,按间隔自动加密备份到本地,口令经 dataKey 加密存储;支持自定义备份目录) ### 待实现 / 可增强 - ⏳ 加密导入/导出(业务数据互导,区别于 `.ovb` 备份) - ⏳ 生物识别解锁(Touch ID / 系统密钥库) - ⏳ 二次密钥文件(keyfile) ## License MIT