加密相册管理系统 — 基于 Tauri + Rust 的桌面端加密图片管理工具。
将敏感图片加密存储于单个 .lva 文件中,通过密码或密码+密钥文件双重认证解锁,支持缩略图预览、安全擦除、碎片整理,以及完整的操作审计日志。
- 加密算法:AES-256-GCM(认证加密,防篡改 + 防窃听)
- 密钥派生:Argon2id (m_cost=65536, t_cost=3, p_cost=1) → HKDF-SHA512 扩展
- 认证方式:纯密码模式 / 密码 + 密钥文件双重认证
- 头部结构:1024 字节固定头部,含 magic bytes、版本号、salt、认证标签和签名
- 导入图片时自动生成 200x200 缩略图(JPEG 80%)
- 缩略图加密存储于
.lva文件内 - 浏览时解密缩略图到内存,零明文落盘
- 导入照片:支持 JPG/PNG/GIF/BMP/WebP/TIFF 格式
- 拖放导入:支持文件/文件夹拖放到窗口
- 提取照片:解密导出到本地指定目录
- 批量操作:Ctrl+多选,批量提取、批量删除
- 新建文件夹:创建子目录组织照片
- 重命名:文件/文件夹重命名
- 删除:安全删除照片(覆写密文 + 移除索引)
- 缩略图浏览:加密缩略图解密到内存显示
- 原图预览:解密原图到内存,前端用 blob URL 显示,关闭时自动回收
- DoD 5220.22-M 7-pass 擦除标准
- 支持单文件和文件夹递归擦除
- 每次写入后 fsync 确保落盘
- 二次确认后执行不可逆销毁
- 对整个
.lva文件执行 DoD 7-pass 擦除后删除
- 压缩冗余空间,整理后自动重新加载
- 记录所有关键操作(创建、打开、导入、提取、删除等)
- 链式 HMAC 防篡改
- 所有密钥材料使用
zeroize自动清零 - 关闭相册时清空所有密钥和缓存
- XSS 防护:所有动态内容 HTML 转义后渲染,审计日志/文件名/对话框均安全处理
- 密钥派生:锁定密钥使用 HKDF-SHA512(而非单次 SHA-256)
- 恒定时间比较:审计日志 HMAC 验证使用
subtle::ConstantTimeEq,防止时序侧信道 - CSP 策略:脚本仅允许自身来源,禁止内联脚本
- 最小权限:文件系统范围限定为
$APPDATA/LynAlbum/**、桌面、文档、下载 - 错误隔离:内部 panic 消息不泄露至前端,仅记录到 stderr
- 鉴权保护:安全删除命令要求相册已打开
LynAlbum/
├── Cargo.toml
├── src-tauri/
│ ├── Cargo.toml
│ ├── tauri.conf.json
│ ├── build.rs
│ ├── icons/
│ └── src/
│ ├── main.rs
│ └── commands.rs
├── crates/
│ └── album-core/
│ ├── Cargo.toml
│ └── src/
│ ├── lib.rs
│ ├── album.rs
│ ├── crypto.rs
│ ├── index.rs
│ ├── lock.rs
│ ├── audit.rs
│ ├── wipe.rs
│ └── error.rs
└── ui/
├── index.html
├── styles.css
└── app.js
| 层 | 技术 |
|---|---|
| 前端 | HTML + CSS + JavaScript (vanilla) |
| 框架 | Tauri 1.x |
| 后端 | Rust 2021 Edition |
| 加密 | aes-gcm / argon2 / hkdf / hmac / sha2 |
| 缩略图 | image crate (JPEG 编码) |
| 内存安全 | zeroize (ZeroizeOnDrop) |
| 打包 | Tauri bundler (NSIS .exe) |
cargo install tauri-cli
cargo tauri dev
cargo tauri build构建产物位于 target/release/bundle/nsis/ 目录下。