Sto scrivendo un'applicazione T1 che sta usando il database SQLite per memorizzare alcuni dati sensibili e sto provando a crittografarli in modo sicuro. Il problema che sto affrontando è che non voglio che la mia chiave simmetrica sia memorizzata in memoria, in quel caso qualsiasi altro processo può fare uno snapshot di memoria e accedere alle mie chiavi. Ho esaminato molte possibili domande simili:
CryptProtectMemory / CryptProtectdata
Ma il problema con questo è che ha due diverse opzioni -
CRYPTPROTECTMEMORY_SAME_PROCESS or CRYPTPROTECTMEMORY_CROSS_PROCESS
Il problema con CRYPTPROTECTMEMORY_SAME_PROCESS è che limita l'accesso a un particolare processo (e la mia app ha un processo UI separato che potrebbe anche accedere al database) e il problema con CRYPTPROTECTMEMORY_CROSS_PROCESS è che consente tutti i processi dell'utente connesso per accedere a questi dati che tipo di sconfigge lo scopo
Quindi quello che voglio è un'API in cui posso specificare solo un pool di processi che possono accedere ai miei dati / chiave
Ho visto opzioni simili, ma nel mio caso non è applicabile nulla:
- Uso di DPAPI - Questo collega la chiave di crittografia al login di amministratore ma il problema è che non mi fido dell'utente attualmente registrato. In realtà, voglio nasconderlo a chiunque tranne T1 e il mio processo di interfaccia utente. Capisco che posso aggiungere entropia secondaria, per limitare l'accesso dell'utente ai dati attualmente registrati. Tuttavia, ho bisogno di memorizzare questi dati segreti sulla macchina. Come posso proteggerlo ... Sembra essere un problema ricorsivo.
- Hardware esterno o memorizzazione della chiave su un server remoto - Poiché l'app verrà distribuita su molti endpoint commerciali (che potrebbero non disporre dell'hardware specifico) e deve funzionare anche in modalità offline (il server potrebbe non essere accessibile) .
- Memorizza la chiave nel database - Devo proteggere il database, che è di nuovo ricorsivo nel mio caso.