我正在按照官方 Android 文档中的说明在我的应用中实施备份。我正在备份的信息可能很敏感,因此我想根据上述文档中的建议对其进行加密:
在使用备份存储敏感数据(例如用户名和密码)时,您应该始终保持谨慎。
加密用户数据的推荐方法,在需要时生成随机密钥并存储它,在备份情况下没有帮助,因为如果我正在恢复备份,生成的密钥可能已经丢失(或者必须包含在备份中)。同样,我不能使用任何设备标识符(例如 IMEI)来生成确定性密钥,因为备份可能会合法地恢复到不同的设备上。
要求用户输入密码来保护密钥可以跨设备工作,但onRestore
完全在后台完成。要从用户那里获取密码,我必须将密文保存到存储中,在下次启动我的主要活动时记下,然后提示用户。除了那个 faff,我真的不相信用户会输入一次密码,在恢复发生之前永远不要再次使用它,可能在几年后,然后能够记住它。我不会!然后就没有办法恢复备份了,我还不如根本没有实施备份。
似乎唯一合理的选择是在我的 APK 中存储一个固定密钥,但我确信我不必在这里解释为什么这并不能真正提供任何额外的安全性。如果我只是将机密存储到内部存储中,我会考虑这样做,但是任何可以在设备上安装不可靠的备份传输或非法访问备份服务器的人都不会因为必须反编译或检查应用程序而感到不便。
谁能给我一个更好的选择?