java - 如何禁止 Java VM 在崩溃/将敏感数据写入磁盘时创建任何转储

标签 java security jvm swap

我正在编写一个将敏感数据(密码和私钥)存储在内存中的 Java 程序。它将自由部署到任何操作系统。我知道用户几乎可以在任何系统上手动创建内存转储,但我担心操作系统或 JVM 实现创建的转储(包括但不限于 JVM 本身的某些段错误)会损害隐私敏感数据。

是否可以采取任何措施来降低这些风险? This question是 POSIX 特定的,但给了我这些平台的答案。我有一个非平台特定的想法,包括将 UncaughtExceptionHandler ( like this ) 设置为一个将覆盖敏感数据的类。但是如果内存被换出怎么办?如果 JVM 因 JVM/JNI 错误而崩溃(例如段错误)怎么办?我知道 Linux 可以阻止数据交换到磁盘,但是是否有 Java 代码可以跨平台执行此操作?大多数情况下,我担心在磁性存储设备上恢复数据的可能性,因此非常感谢您的帮助。

最佳答案

如果您无法控制操作系统,您基本上无法禁止用户访问您在内存中的内容。

因此,您需要将保留的敏感数据量保持在绝对最低限度。想象一下,知识渊博的用户附加了一个调试器,暂停您的程序并窥探您的数据结构,挑选他们需要知道的任何内容。

因此,当使用密码完成后,将所有引用设置为空。使用键完成后,将它们的引用设置为空。请注意,这对确定的知识渊博的用户没有帮助,但它至少会最大限度地减少意外发现的机会。

关于java - 如何禁止 Java VM 在崩溃/将敏感数据写入磁盘时创建任何转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6074776/

相关文章:

java - Long.parseLong 给出 java.lang.NumberFormatException

Java - Eclipse 中的多个包问题

c# - 程序在哪里保存他们的 secret 许可证?

java - Kryo序列化错误

java - 如何使用java将PDF文件转换成PPT文件?

security - 整数溢出是如何被利用的?

java - 没有证书的 TLS 安全吗?

java - Java 字节码助记符与 Jasmin 有何不同?

java - 在企业应用程序中同时使用 hibernate 和 spring 时是否会创建两个单独的 JVM 实例?

java - JVM 非内联方法优化