在应用启动时将密钥库密钥加载到内存中,还是在每次加密/解密时从密钥库中检索密钥库?

时间:2019-04-11 14:02:13

标签: android security

在我的应用中-我具有加密的首选项,并且使用Android Keystore密钥对其进行加密和解密。

在某些较旧的设备(Android 5.x)上,我看到了很多此类logcat消息:

  

03-10 14:35:37.601 2573-2573 /? W / keystore:无法读取   CACERT_KEY_ALIAS

在执行特定操作时-该应用可能会在很短的时间内解密15-20个值,并且我认为可能是密钥库上的这种负载。

一种解决方案,可以在应用启动过程中检索密钥,并在整个操作甚至整个应用执行过程中保持对它的引用。

仅供参考-我使用的SecretKey对象不会公开实际的密钥(调试时无法获取密钥,因为SecretKey.getEncoded()方法返回null)。加密/解密时,我将SecretKey对象传递给安全提供者的密码对象(密钥以某种方式在幕后传递)。

这对安全性有影响吗?有人可以通过检查应用程序的内存堆或转储来检索密钥吗?有什么想法吗?建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

更新:在广泛搜索有关天气的答案之后,可以从任何其他进程快照的内存转储中检索到内存中保留的内存,但找不到该快照-我们决定不将密钥库密钥保留在内存中。每当我们解密一个值时,都必须检索它。