备份与恢复逻辑
本文档详细描述了 Flauth 备份与恢复系统的实现细节,涵盖了本地文件导出和 WebDAV 云端同步。
1. 概述
Flauth 支持两种备份方式: * 本地文件:将账号导出到设备上的文件,或从现有文件导入。 * WebDAV 同步:使用 WebDAV 协议将您的账号与私有云(如 Nextcloud、坚果云)进行同步。
两种方式共用同一套底层安全架构。
2. 安全架构
为确保 2FA 密钥的安全,Flauth 为备份文件提供了工业级标准的加密保护。
2.1 加密标准
- 算法: AES-256-CBC (高级加密标准)。
- 密钥派生: PBKDF2 (基于密码的密钥派生函数 2),配合 HMAC-SHA256。
- 迭代次数: 10,000 次(兼顾性能与安全性)。
- 加盐 (Salting): 每次备份都会生成唯一的 16 字节随机盐,以防止彩虹表攻击。
- 初始化向量 (IV): 每次加密使用 16 字节随机 IV,确保密文的唯一性。
2.2 文件格式
Flauth 统一使用 .flauth 后缀。应用在导入时会自动检测文件内容是加密 JSON 容器还是明文 URI 列表。
加密格式
加密后的备份以 JSON 容器形式存储:
{
"version": 1,
"kdf": {
"algorithm": "pbkdf2",
"iterations": 10000,
"salt": "<Base64 编码的盐>"
},
"encryption": {
"algorithm": "aes-256-cbc",
"iv": "<Base64 编码的 IV>",
"data": "<Base64 编码的密文>"
}
}
明文格式
如果用户选择跳过加密,账号将以简单的 otpauth:// URI 列表形式导出,每行一个(同样使用 .flauth 后缀保存)。
3. 工作流程
3.1 导出流程
- 收集数据:获取所有账号并转换为
otpauth://URI 字符串。 - 安全选择:提示用户输入密码(至少 6 位)或选择跳过加密。
- 加密:如果提供了密码,则派生 256 位密钥并加密内容。
- 保存/上传:
- 本地:使用系统文件选择器保存为
.flauth文件(加密或明文,应用会自动识别内容格式)。 - WebDAV: 将内容上传到配置的远程路径(默认为
backup-otpauth.flauth)。
- 本地:使用系统文件选择器保存为
3.2 导入流程
- 读取内容:从本地存储加载文件字符串,或从 WebDAV 下载内容。
- 自动检测:自动检查内容是否为包含加密密钥的 JSON 容器。
- 解密:
- 如果是加密文件,提示用户输入密码。
- 使用 JSON 中存储的盐和迭代次数重新派生密钥。
- 执行 AES 解密。
- 解析:解析生成的 URI 列表,并将新账号添加到本地安全存储中(跳过重复项)。
4. 平台适配说明 (macOS)
针对在无官方代码签名的开发环境下运行应用的 macOS 用户,Flauth 仔细配置了权限(Entitlements),以确保文件选择器在应用沙盒(App Sandbox)内正常工作。