Nel mio programma, ho un database crittografato sul file system con una password. Viene decrittografato nella RAM e i dati sensibili vengono distribuiti troppo nella RAM, in modo che l'errore possa essere verificato abbastanza facilmente. (Che escludono l'azzeramento della memoria manualmente e l'uso di SecureString dappertutto)
Quindi quello che penso di fare è generare un nuovo processo in un nuovo desktop di Windows, chiedendo all'utente di inserire la sua password qui, quindi decifrare il database, fare i miei compiti, quindi chiudere immediatamente il processo figlio.
Questo rende tutto molto facile da controllare. I dati sensibili non tralasciano mai il processo secondario e l'intervallo di tempo in cui i dati sensibili sono nella RAM è limitato a qualche milli secondi.
La domanda è: la mia soluzione funziona alla grande solo se Windows sta effettivamente azzerando la memoria dopo che il processo è stato chiuso. È una cosa sicura da assumere? (So che il sistema operativo libera la memoria, ma liberare e azzerare non è la stessa cosa)
So che il thread Zero Paging è in esecuzione per azzerare le pagine sporche, ma non so se è fatto in anticipo o pigramente, né se le pagine inutilizzate sporche vengono scambiate su disco. Ma forse sono troppo paranoico, dal momento che, se l'attaccante ha accesso alle mie pagine sporche, quindi non importa quello che sto facendo, ci sarà sempre un modo per ottenere i dati sensibili.
Vedi una soluzione migliore? (che è facile da controllare e limita la quantità di dati sensibili al tempo nella RAM)