¿Cuál es la mejor manera de almacenar la contraseña en la memoria (RAM) en Java?

9

Imagina que hay un formulario de inicio de sesión en la aplicación Java. Necesitamos asignar nombre de usuario y contraseña a las variables. Momento después de que podamos Hash o la contraseña HMAC y guardarla solo para el paso de autenticación (sin almacenamiento en caché). Pero aún tenemos que asignar una variable para la contraseña sin procesar.

Q1) ¿Qué tipo de tipo de variable debemos usar para almacenar la contraseña sin formato (String, Char array o cualquier otra cosa)?

P2) ¿Qué debemos hacer con la variable de contraseña sin formato después de usarla (es decir, simplemente permitir que el recolector de basura la elimine después de que la función esté fuera de alcance)?

Q3) ¿Algo más?

Esta es una pregunta relacionada con Java. Lo publiqué aquí ya que está muy cerca de la seguridad.

Para el C / C ++ tengo poca idea. Son

  • Almacene la contraseña en una variable de bajo nivel del sistema que no depende de otras bibliotecas. Es decir. almacene la contraseña en char [] que es muy nativa que las variables de tipo QString (Qt) proporcionadas por los marcos.

  • Sobrescriba inmediatamente la contraseña char [] después de usarla. Luego destrúyelo.

  • Reduzca el tiempo de contraseña en la memoria como bajo.

pregunta Kasun 25.11.2014 - 20:38
fuente

1 respuesta

9

La guía general es usar un char [], que si bien no es infalible, le permitirá sobrescribir los caracteres en la contraseña una vez que haya terminado con ellos, algo que no es posible con cadenas, ya que son inmutables y Continuar viviendo en el montón hasta la recolección de basura.

Esto también se ha discutido en detalle en StackOverflow .

    
respondido por el Xander 25.11.2014 - 20:48
fuente

Lea otras preguntas en las etiquetas