【问题标题】:How To Store RSA private,public keys如何存储 RSA 私钥、公钥
【发布时间】:2017-12-23 03:50:22
【问题描述】:

我正在开发一个安卓消息应用程序。用户注册时生成 rsa 私钥和公钥,并使用这些密钥和 aes 对消息进行加密和解密。

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

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

【问题讨论】:

    标签: android encryption rsa private-key


    【解决方案1】:

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

    Android 密钥库

    使用 Android Keystore 无法恢复密钥,因为它们只能由创建它们的应用程序使用,并且在发生重大更改时会被丢弃。

    我猜您正在使用 RSA 密钥来协商 AES 对称加密密钥。因此,您需要备份 AES 加密密钥(例如在服务器中......),并建立一种机制来恢复密钥,如常见的“记住密码”实用程序

    自定义密钥存储

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

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

    【讨论】:

    • 消息使用随机生成的 aes 密钥加密,该密钥对于发送的每条消息都是唯一的,并且 aes 密钥使用 rsa 加密并与消息一起发送。消息传递后,它从服务器中删除。问题当消息等待在服务器中传递并且用户重置应用程序时发生,它还会重置用于加密的公钥和私钥
    • 那么您需要备份未附加到应用程序的 RSA 私钥,以便在应用程序重新启动时可用。正如我上面评论的那样,用密码加密 RSA 密钥。并将密钥存储到服务器或设备本身的持久文件中。缺点是您需要向用户请求密码,这对用户不友好
    【解决方案2】:

    有多种方法可以在 Android 中保存数据。数据库、SavedInstanceState、SharePreferences 和文件。只有在用户卸载您的应用程序后文件才会保留。将其保存在文件中是您唯一的选择。

    【讨论】:

    • 现在它被存储在数据库和 sharedprefernce.does keystore 在应用程序卸载后保留数据。
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2013-12-04
    • 2019-08-15
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多