我正在尝试将密钥对存储到Android的密钥库中。到目前为止,我有这个测试代码:
KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA");
keygen.initialize(2048);
KeyPair keypair = keygen.generateKeyPair();
PrivateKey priv = keypair.getPrivate();
PublicKey pub = keypair.getPublic();
String passwd = "Insert some strong password here.";
Certificate[] certChain = new Certificate[1];
certChain[0] = generateCertificate(keypair);
ks.setKeyEntry("test", priv, passwd.toCharArray(), certChain);
该generateCertificate
方法正在使用Bouncy Castle库。
当我运行此代码时,我得到一个 java.security.KeyStoreException: entries cannot be protected with passwords
这很糟糕,因为setKeyEntry
确实有password参数。我该如何摆脱呢?并且使用存储在应用程序源代码中的强字符串密码安全吗?
谢谢。
显然,尽管该方法采用了密码参数,但AndroidKeystore
实现不支持此参数,请看一下源代码中的第200行。
无论如何,存储在设备任何位置的密码(无论是强密码还是弱密码)都是不安全的。对于源代码(包括一般的非Android上下文中的源代码)尤其如此。如果可以使用应用程序的APK,则可以使用几种出色的APK分析工具之一来访问类的常量池,该池将以纯文本格式包含密码。大量的混淆都无法阻止这种情况,甚至使其变得更加困难。这也许是AndroidKeystore
实现不允许这样做的原因。
Android设备上的密钥存储服务的重点(实际上是作为单独的过程,您可以通过unix套接字与之进行对话)是通过要求用户密码对其进行解锁来保护对敏感资料的访问,因此毫无意义您的密钥对或其他机密上的密码。。在最近的手机中,这全部内置在硬件中,从而提供了非常强的安全性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句