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

Hut*_*ut8 8 java security swap jvm

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

是否有任何措施可以降低这些风险? 这个问题是POSIX特定的,但是给了我这些平台的答案.我有一个非平台特定的想法,包括设置UncaughtExceptionHandler(像这样)一个将覆盖敏感数据的类.但是,如果换掉内存怎么办?如果由于JVM/JNI错误导致JVM崩溃(例如分段错误)怎么办?我知道Linux可以阻止数据交换到磁盘,但是有一个Java代码可以跨平台吗?大多数情况下,我担心磁存储设备上的数据恢复的可能性,所以任何帮助都是值得赞赏的.

jta*_*orn 2

如果您想阻止临时用户,那么您实际上不需要做任何事情。如果您试图阻止知识渊博/坚定的用户,并且您正在他们的计算机上运行代码,那么您无能为力。

如果您唯一担心的是程序“意外”地将内容写入磁盘,那么您也无能为力。java 程序不会生成堆转储,除非您明确告诉它们。从未捕获的异常获取输出的任何堆栈跟踪都不太可能包含任何敏感内容。当 jvm 以受控方式出现段错误时写入的文件中也不可能包含任何敏感内容。唯一可能有问题的事情是 unix 系统某些变体上的核心转储。而且,不幸的是,我不相信您可以在程序级别控制它,只能在系统/用户配置级别(在您链接的第一个问题中提到)。