【发布时间】:2017-12-23 03:50:22
【问题描述】:
我正在开发一个安卓消息应用程序。用户注册时生成 rsa 私钥和公钥,并使用这些密钥和 aes 对消息进行加密和解密。
私钥存储在手机中,公钥存储在服务器中。如果用户重置或卸载应用程序,所有密钥都将丢失,因此无法解密旧消息。
当用户卸载应用程序时,如何检索旧的私钥而不将其存储在服务器中?
【问题讨论】:
标签: android encryption rsa private-key
我正在开发一个安卓消息应用程序。用户注册时生成 rsa 私钥和公钥,并使用这些密钥和 aes 对消息进行加密和解密。
私钥存储在手机中,公钥存储在服务器中。如果用户重置或卸载应用程序,所有密钥都将丢失,因此无法解密旧消息。
当用户卸载应用程序时,如何检索旧的私钥而不将其存储在服务器中?
【问题讨论】:
标签: android encryption rsa private-key
您是使用 Android Keystore 来存储密钥还是使用自己的文件存储?
Android 密钥库
使用 Android Keystore 无法恢复密钥,因为它们只能由创建它们的应用程序使用,并且在发生重大更改时会被丢弃。
我猜您正在使用 RSA 密钥来协商 AES 对称加密密钥。因此,您需要备份 AES 加密密钥(例如在服务器中......),并建立一种机制来恢复密钥,如常见的“记住密码”实用程序
自定义密钥存储
如果您将密钥存储到没有 AndroidKeystore 的设备中,您可以定义自己的机制来恢复密钥。例如,使用密码加密密钥并将密钥存储到设备的公共目录中。然后可以恢复密钥,提示用户输入密码
注意:考虑每种情况下的安全风险。例如,一个未加密的 AES 密钥进入服务器意味着恶意服务器可以解密消息。或者弱恢复密钥机制会降低系统的整体安全级别
【讨论】:
有多种方法可以在 Android 中保存数据。数据库、SavedInstanceState、SharePreferences 和文件。只有在用户卸载您的应用程序后文件才会保留。将其保存在文件中是您唯一的选择。
【讨论】: