Estoy trabajando en alguna aplicación que funciona con datos secretos en la memoria. ¿Hay alguna manera de asegurarse de que se sobrescriba toda la memoria cuando termina la JVM? Nada de los datos secretos se debe dejar en la memoria después de la terminación de la JVM.

4
ftl 24 mar. 2017 a las 10:06

2 respuestas

La mejor respuesta

Respuesta corta: las JVM de la generación actual no pueden garantizar eso.

Sin embargo, si su aplicación requiere tal tipo de cosas, es difícil ver cómo podría implementarla en cualquier lenguaje de programación en un sistema operativo moderno típico a menos que la ejecute sin un dispositivo de intercambio. E incluso entonces, probablemente deba confiar en el sistema operativo para poner a cero la memoria física al salir del programa. (A menos que haya errores, el sistema operativo debería cero memoria antes de pasarlo a otro proceso, pero no creo que se especifique cuando eso sucede).

Pero esto es discutible. El sistema operativo debe evitar que personas / procesos no autorizados vean la memoria de otros procesos, ya sea durante la ejecución del programa o después de su salida. Si su sistema ha sido pirateado para obtener el privilegio "root" o equivalente, no puede garantizar ninguno de esos. Entonces, para cuando el programa salga, ¡ya es demasiado tarde!

6
Stephen C 24 mar. 2017 a las 14:59

No puede eliminar todos los datos secretos en la terminación de JVM. En el caso de un recopilador de compactación (es decir, todos los recopiladores modernos), puede copiar datos de una ubicación a otra. Por lo tanto, cuando sobrescribe su matriz, los datos seguirían existiendo en la ubicación anterior, pero no tendrá ninguna referencia para que no pueda sobrescribirla.

Lo mejor que puede hacer es sobrescribir la ubicación actual (si almacena los datos en matrices) y guardarlos en la memoria durante el menor tiempo posible, para minimizar la posibilidad (pero no puede evitarla al 100%) de que los datos secretos permanecer en el montón durante la compactación.

2
Svetlin Zarev 24 mar. 2017 a las 07:55