我想存储我的RSA私钥,该应用程序用于在发送到服务器之前对其数据进行安全签名,以便窃取密钥比仅从app文件夹中复制更难。
我知道Java KeyStore
可以用来存储密钥并通过运行时加载它们,但是如何在没有密码的情况下从KeyStore
加载密钥?
例如,我已经加载了一个密钥" mykey"进入KeyStore,我签了App.jar。我想自动从KeyStore
加载运行时的密钥,而不指定KeyStore
的密码,如果请求它的应用程序已签名。
也许,我不能正确理解KeyStore
的原则。但任务是签署发送到服务器的数据并安全地存储密钥。 (该应用程序是一个POS应用程序,所以它应该自动加载,没有启动时给出的任何密码。)
答案 0 :(得分:0)
正如其他人所指出的那样,你无法真正阻止拥有应用程序(因此拥有私钥)的人提取私钥。您可以对密钥进行模糊处理,这可能是合理的,具体取决于您要完成的任务。在这种情况下,您可以在代码中的各个位置隐藏密钥密码,并使用您提到的KeyStore。这不是很安全,但它可能对你的目的来说“足够好”。
分发给最终用户的任何密钥都不能被视为秘密。
更重要的是,如果您的服务器信任任何客户端代码(无论是否已签名),您的服务器可能存在安全问题。您必须找到一种不同的方式来强制执行安全属性,而不是信任客户端。