2026 年 8 月 21 日,讯果完成本地存储加密加固。新版本对礼品卡数据加密采用 AES-256-GCM,卡号、兑换码、查询结果与报表全部以密文落盘;主密钥不直接保存,而是拆成三片分别存放,任意单独一片都无法还原数据。整个流程零上云,客户端不上传卡号,也不保留可还原明文的日志。此次升级已随 v5.0.8 推送,用户首次启动时完成一次密钥初始化即可。

做这件事的起因很具体。安全团队在 7 月的一次内部演练中,把一台装有旧版客户端的笔记本硬盘拆下,直接用另一台机器挂载读取,结果在数据目录里找到了可读的卡号与余额记录。虽然文件有简单混淆,但对稍有经验的人来说并不构成障碍。安全工程师苏晴在复盘会上说:“只要硬盘离开你的手,明文就等于公开,混淆只是心理安慰。”

AES-256-GCM 与密钥分片

新版使用 AES-256-GCM 对每个数据块独立加密,每个块带独立的随机 nonce 与认证标签,任何一位被篡改都会导致解密失败,客户端会拒绝加载该块并提示从备份恢复。数据库文件、报表缓存、临时文件与崩溃转储统一走同一套加密层,避免出现“主库加密了、临时文件没加密”的缝隙。

密钥管理采用三片分离:第一片由用户设置的主密码派生,通过 PBKDF2 迭代 310,000 次生成;第二片随机生成后保存在操作系统凭据区;第三片随机生成后写入用户指定的密钥文件,默认为 U 盘或另一块磁盘。启动时需要至少两片才能组合出主密钥,用户可以按自己的安全等级选择“密码 + 凭据区”或“密码 + 密钥文件”。

苏晴解释这套设计的边界:“我们不承诺数据永远不会丢,也不承诺能对抗已经拿到管理员权限的攻击者。我们要保证的是,硬盘被单独拿走、备份文件被复制、电脑送修这几种最常见的情况,别人打不开你的卡号库。”她还提醒,主密码无法找回,遗失后只能通过备份与密钥分片恢复,因此首次设置时必须妥善保存恢复码。

礼品卡数据 AES-256 加密体系中的密文与密钥分片
三片密钥分别存放,启动时需至少两片组合出主密钥

备份、迁移与擦除

备份默认每 12 小时执行一次增量备份,每 7 天做一次完整备份,备份文件本身同样加密,文件名不含批次与客户信息。备份可以放在本地磁盘、移动硬盘或用户自建的 NAS,客户端不提供云端备份选项,也不会上传任何备份分片。恢复时可以选择时间点,系统会先校验完整性再覆盖当前数据,校验失败的备份不会被加载。

迁移到新电脑的流程被压缩成三步:在旧机器导出加密迁移包,在新机器输入主密码并插入密钥介质,系统完成解密与重建索引。5,000 张规模的数据迁移实测耗时 38 秒,迁移包大小 84MB。迁移过程不上传网络,导出文件的有效期由用户设置,默认 24 小时后自动失效。

彻底清除采用三次覆写:第一次写随机数据,第二次写其补码,第三次写零,然后删除文件并清理空闲空间。客户端在卸载时会询问是否执行清除,选择“保留数据”则只卸载程序。测试组用恢复工具对覆写后的磁盘做了扫描,未能恢复出可识别的卡号记录。苏晴补充,SSD 的磨损均衡会让覆写存在理论盲区,对安全要求极高的团队建议直接启用全盘加密。

安全边界与使用建议

加密解决的是静态数据问题,使用习惯仍然重要。安全团队给出四条建议:第一,主密码不要与邮箱、后台账号复用;第二,密钥文件不要与备份放在同一块磁盘;第三,导出报表后及时删除中间文件,尤其是发给外部对账的 Excel;第四,定期在“安全中心”查看登录与解密记录,发现异常立即停用账号并更换密钥。

对于团队版,密钥由管理员统一初始化,成员使用各自的账号登录,无法直接接触主密钥;成员被停用后,其本地缓存会在下次联网校验时失效。管理员可以在审计日志中看到每次解密与导出的记录,但看不到成员的主密码。若管理员离职,需要按恢复码流程移交密钥,避免整个团队的数据被锁死。

本次加密升级不改变功能与性能表现,6,000 张任务的耗时增加约 2.1%,主要来自落盘前的加密计算。已安装用户更新后按提示完成密钥初始化即可,历史数据会在首次启动时自动加密迁移,8,000 张规模大约需要 46 秒。重视卡号安全的团队可以从下载页获取客户端,先在测试机上走一遍密钥设置与恢复流程,再推广到全员。