2017-07-18 267 views
0

我正在开发一个android消息应用程序。当用户注册rsa私钥和公钥时,并且这些密钥和aes消息被加密和解密。如何存储RSA私钥,公钥

私钥存储在服务器的手机和公钥中。如果用户重置或卸载应用程序,则所有密钥都将丢失,因此无法解密旧消息。

如何在用户卸载应用程序时检索旧私钥而不将其存储在服务器中?

回答

1

有多种方式可以在Android中保存数据。数据库,SavedInstanceState,SharePreferences和文件。用户卸载应用程序后,只有文件仍然存在。将其保存在文件中是您拥有的唯一选项。

+0

现在它已存储在数据库中,并且sharedprefernce.does密钥库在卸载应用程序后保留数据。 – cyborg

1

您是使用Android Keystore存储密钥还是使用自己的文件存储?

的Android密钥库

借助Android密钥库是没有办法恢复键,因为它们只能通过创建它们,如果有实质性的变化被丢弃的应用中使用。

我猜你正在使用RSA密钥协商AES对称加密密钥。因此,你将需要备份的AES加密密钥(例如在服务器...),以及stablish一个机制来恢复,如常见的“记住密码”事业的关键

自定义密钥存储

如果您将密钥存储在没有AndroidKeystore的设备中,则可以定义自己的机制来还原密钥。例如,使用密码加密密钥并将密钥存储到设备的公用目录中。然后密钥可以恢复提示用户输入密码

注意事项:考虑到每种情况下的安全风险。例如,一个非加密的AES密钥进入服务器意味着恶意服务器可以解密消息。或弱恢复密钥机制将降低系统的整体安全级别

+0

消息使用随机生成的aes密钥进行加密,该密钥对于发送的每条消息都是唯一的,并且使用rsa对aes密钥进行加密并与消息一起发送。消息发送后,将其从服务器中删除。当消息等待时被发送到服务器中,并且用户重置应用程序,它也重置其被加密的公共私钥。 – cyborg

+0

然后,如果重新启动应用程序,则需要对未连接到应用程序的RSA私钥进行备份。正如我上面评论的那样,使用密码加密RSA密钥。并将密钥存储到服务器或设备本身的永久文件中。缺点是你需要向用户请求一个密码,这不是用户友好的 – pedrofb