我编写的软件可处理各种敏感信息,如电子邮件地址,密码和信用卡号。
当我们遇到内存问题时,让应用程序编写堆转储会很好。问题是如果一个线程恰好在该区域中工作,那么堆转储可能包含纯文本的敏感信息...当我们在其他地方加密它时,我们真的不希望写入磁盘。
是否有处理此问题的方法,例如导致JVM写入加密转储?
答案 0 :(得分:3)
我一直在考虑在VM外面处理这个问题。一种天真的方法可能是让jvm将转储写入加密的环回设备。当然,这并不是完全安全的,因为任何具有root访问权限的人都可以访问挂载点,但这是我期望的那种解决方案。我可能会看到我是否可以设置jvm最终写入的FIFO。我知道vm将使用的文件名,所以这可能会起作用,这取决于vm如何处理(稍后:这不起作用.JVM抱怨“文件存在”)
使用char数组只能缓解问题,但仍有可能数组在转储时会包含一些纯文本。
答案 1 :(得分:1)
简短的回答并不完全。在某些时候,您必须使用明文中的数据来使用它,并且在垃圾收集的VM中,您无法控制何时从内存中物理移除对象。将风险降至最低的唯一真正策略是尽快删除对未加密机密数据的所有引用。它不能保证不会在内存转储中写入任何机密数据,但如果有人能够这样做,那么他们就可以获得关键信息。