加密备份格式
手动导出默认生成有密码保护的 .fcbak;对话框也允许明确选择不加密 ZIP,供旧版或上游版本兼容使用。 两种格式都可导入。使用步骤见备份与恢复。
密码没有复杂度规则,不保存在偏好或页面状态中,也无法找回。备份密码与局域网编辑器的六位配对码互相独立。
Android 云备份和设备迁移只包含 UiSettingsBackupAgent 从带类型的外观键白名单生成的 system_backup_ui.xml。 主偏好、剪贴板数据库、同步凭据、输入历史和 Rime 文件不在其中;完整迁移使用手动备份。
版本 1 文件头
所有整数均使用大端序,文件头共 42 字节:
| 字段 | 长度 | 值 |
|---|---|---|
| 标识 | 8 字节 | ASCII FCRIMEBK |
| 版本 | 1 字节 | 1 |
| 密钥派生算法 | 1 字节 | 1:PBKDF2-HMAC-SHA1,256 位密钥 |
| 迭代次数 | 4 字节 | 导出使用 1,300,000;读取接受 100,000–2,000,000 |
| 盐 | 16 字节 | 每次导出使用独立的 SecureRandom 字节 |
| 基础 nonce | 12 字节 | 每次导出使用独立的 SecureRandom 字节 |
分块认证
每条记录包含四字节明文长度、一字节结束标记(0/1),随后是 AES-256-GCM 密文和 16 字节认证标签。 普通数据记录承载 1–65,536 字节;末尾必须有经过认证的空结束记录,之后不允许附加字节。 明文流上限为 4 GiB;ZIP 导入器另外限制解压字节数、条目数和目标路径。
对从零开始的记录编号,将其大端 64 位编码与基础 nonce 的后八字节异或,得到本条记录的 nonce。 AAD 依次为完整文件头、八字节记录编号、四字节明文长度和一字节结束标记。 这样可发现记录重排、修改、截断和追加。独立的小 AEAD 记录也限制加密提供方的缓存,包括必须收到标签后才输出明文的实现。
导入与清理
解密先写入私有缓存文件。所有认证标签和空结束记录通过之前,不解析 ZIP,也不替换正在使用的数据。 失败或取消会删除临时文件。程序尽可能清除密码派生密钥和临时字符/字节数组;Android/JCA 内部仍可能生成副本。
认证成功后仍需经过 ZIP 校验、恢复目标选择和恢复确认。 旧 ZIP 始终为明文,需按敏感文件保存;成功解密不能替代恢复事务的目录检查。
固定提交与测试来源见备份及剩余项审计。