Come crittografare o archiviare i dati in modo che solo un pool di processi possa condividerlo su Windows?

1

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:

  1. 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.
  2. 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) .
  3. Memorizza la chiave nel database - Devo proteggere il database, che è di nuovo ricorsivo nel mio caso.
posta seaborg 15.06.2015 - 22:35
fonte

1 risposta

1

Se il tuo modello di minaccia significa che il codice deve essere eseguito su un computer di cui non puoi fidarti, non c'è modo di proteggere i tuoi dati: semplicemente non è possibile.

Indipendentemente da ciò che fai, la chiave di decrittografia DEVE essere presente nella memoria del sistema che esegue la decrittografia per poter accedere ai dati. Ciò significa che l'unico modo possibile per proteggere la chiave è spostare quell'elaborazione su un hardware affidabile. Si noti che questo non protegge realmente i dati: non appena raggiunge il sistema non attendibile in chiaro, può essere compromesso. Protegge solo la chiave di crittografia.

Dovrai cambiare il tuo modello di minaccia accettando la possibile perdita e semplicemente rendendolo il più difficile possibile per accedere a quei dati.

    
risposta data 16.06.2015 - 08:58
fonte

Leggi altre domande sui tag