Memorizza le passphrase di crittografia in memoria in Dalvik?

1

Dato KeePassDroid , sto prendendo in considerazione alcune delle implicazioni sulla sicurezza dell'accesso ai database KeePass su un dispositivo Android.

Nelle applicazioni native per Windows, OSX e Linux, ogni volta che il database viene bloccato o chiuso, la password viene cancellata dalla memoria riempiendo la sua posizione con zero.

Poiché Java stesso esegue la garbage collection in modo diverso, c'è una preoccupazione reale e tangibile rispetto alla memorizzazione delle passphrase in memoria nella JVM? Che ne dici di Dalvik per Android?

Oltre all'impostazione di this.password = null; , cosa si può fare per garantire che la passphrase sia stata cancellata in modo sicuro dalla memoria?

    
posta Naftuli Kay 30.05.2014 - 01:14
fonte

1 risposta

1

In Java la gestione della memoria è completamente sotto il controllo della VM. Non puoi mai essere sicuro al 100% di ciò che fa la VM con la sua memoria, perché è completamente in fase di implementazione. Tuttavia, ci sono cose che puoi fare per scoraggiare la VM dalla cache.

Nullare semplicemente un riferimento non è un buon modo per convincere la VM a rimuovere qualcosa dalla memoria. Ci vorrà almeno fino a quando il prossimo spazzino non spazzerà via finché i dati non saranno raccolti. Con la classe String si ha anche il problema che le specifiche Java impongono il pooling di stringhe (più stringhe con contenuto identico sono obbligate ad usare la stessa memoria). Questo potrebbe essere un motivo per cui la VM memorizza nella cache una stringa in memoria anche quando non ci sono riferimenti.

Quello che potresti fare è andare sul modo C di basso livello e memorizzare la tua password in char[] . Non c'è molta ragione per la JVM di fare molta astrazione su matrici di primitivi. Quando si sovrascrive ogni voce di un array di caratteri con caratteri nul, è improbabile che JVM conservi una copia del contenuto originale.

    
risposta data 30.05.2014 - 03:02
fonte

Leggi altre domande sui tag