Al momento sto cercando il modo più sicuro per memorizzare una chiave RSA privata su Windows.
Rendendolo il più possibile utilizzabile dall'utente finale, mantenendo la sicurezza al massimo. Poiché questo è praticamente impossibile, non sono sicuro di dove andare esattamente con un compromesso. Forse mi sto dimenticando di un'altra possibilità e vorrei chiedere aiuto al consiglio per la sicurezza delle informazioni.
Scenario: un utente genera una coppia di chiavi RSA. Viene spesso utilizzato per crittografare / decrittografare le chiavi AES per accedere ai dati effettivi. Diciamo che è un'applicazione di chat o un'applicazione come dropbox per i file. Lo scopo non ha molta importanza poiché l'attenzione si concentra sul modo in cui la chiave privata RSA è memorizzata e accessibile.
Il flusso di lavoro dell'utente: Accedi a Windows - > Avvia app - > Accedi tramite API al server web - > login riuscito - > accedi a chiave privata localmente - > esegui attività x (chat, file, ecc ...)
Le possibilità:
-
Database SQLite in cui la chiave privata non è crittografata in formato PEM. Il DB è "crittografato" e la password viene salvata nell'applicazione .net come stringa Veloce e sporco. Direi cattive pratiche. Tuttavia, altre applicazioni non possono accedere al database SQLite poiché non conoscono la chiave.
-
CryptoAPI .NET che utilizza il contenitore chiave utente RSA. Con DenyExport e altri flag attivi, qualsiasi app può accedere alla chiave mentre l'utente è connesso. Con mimikatz e software simile è facile esportare la chiave privata anche se non è esportabile.
-
.NET DAPI non è in realtà per proteggere RSA Keypair e più interessante per le informazioni sensibili in memoria. Nessun punto
-
Esportare semplicemente la chiave PEM come chiave protetta da password. L'usabilità diminuisce in quanto l'utente avrebbe bisogno di una seconda password per accedere alla chiave.
-
Dati .NET isolati - fuori questione.
C'è un altro modo per memorizzare una chiave privata in modo sicuro ma pratico su un sistema Windows?