¿Guardar frases de cifrado en memoria en Dalvik?

1

Dado KeePassDroid , estoy considerando algunas de las implicaciones de seguridad de acceder a las bases de datos KeePass en un dispositivo Android.

En las aplicaciones nativas para Windows, OSX y Linux, siempre que la base de datos esté bloqueada o salga, la contraseña se borrará de la memoria al completar su ubicación con ceros.

Dado que Java en sí hace la recolección de basura de una manera diferente, ¿existe una preocupación real y tangible sobre el almacenamiento de frases de contraseña en la memoria en la JVM? ¿Qué tal en Dalvik para Android?

Además de configurar this.password = null; , ¿qué se puede hacer para garantizar que la frase de paso se haya borrado de la memoria de forma segura?

    
pregunta Naftuli Kay 30.05.2014 - 01:14
fuente

1 respuesta

1

En Java, la gestión de la memoria está completamente bajo el control de la VM. Nunca puede estar 100% seguro de lo que hace la VM con su memoria, porque eso depende completamente de la implementación. Sin embargo, hay cosas que puede hacer para disuadir a la VM de almacenar en caché.

El mero hecho de anular una referencia no es una buena manera de persuadir a la máquina virtual para que elimine algo de la memoria. Tomará al menos hasta el próximo barrido del recolector de basura hasta que se recopilen los datos. Con la clase Cadena también tiene el problema de que la especificación de Java exige la agrupación de cadenas (varias cadenas con contenido idéntico tienen el mandato de usar la misma memoria). Esta podría ser una razón para que la VM almacene en caché una cadena en la memoria incluso cuando no haya referencias a ella.

Lo que podrías hacer en cambio es ir por el camino de bajo nivel de C y almacenar tu contraseña en un char[] . No hay muchas razones para que la JVM haga mucha abstracción en matrices de primitivas. Cuando sobrescribe cada entrada de una matriz de caracteres con nul caracteres, es bastante improbable que la JVM guarde una copia del contenido original.

    
respondido por el Philipp 30.05.2014 - 03:02
fuente

Lea otras preguntas en las etiquetas