Domanda

Devo archiviare dati crittografati (poche stringhe piccole) tra le esecuzioni dell'applicazione. Non desidero che l'utente fornisca una passphrase ogni volta che avvia l'applicazione. Cioè dopo tutto, si tratta di archiviare in modo sicuro le chiavi di crittografia.

Stavo esaminando RSACryptoServiceProvider e usando PersistentKeyInCsp, ma non sono sicuro di come funzioni. Il contenitore chiave è persistente tra le esecuzioni dell'applicazione o il riavvio della macchina? Se sì, è specifico dell'utente o specifico della macchina. Cioè se memorizzo i miei dati crittografati nel profilo di roaming dell'utente, posso decrittografare i dati se l'utente accede a un altro computer?

Se quanto sopra non funziona, quali sono le mie opzioni (devo occuparmi dei profili di roaming).

È stato utile?

Soluzione

L'API per la protezione dei dati (DPAPI) fa esattamente quello che vuoi. Fornisce la crittografia simmetrica di dati arbitrari, utilizzando le credenziali della macchina o (meglio) l'utente, come chiave di crittografia. Non devi preoccuparti di gestire le chiavi; Windows si occupa di questo per te. Se l'utente cambia la sua password, Windows crittograferà nuovamente i dati utilizzando la nuova password dell'utente.

DPAPI è esposto in .NET con la classe System.Security.Cryptography.ProtectedData:

byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);

Il secondo parametro del metodo Protect è una matrice di byte entropia opzionale, che può essere utilizzata come ulteriore "segreto" specifico dell'applicazione.

Per decrittografare, utilizzare la chiamata ProtectedData.Unprotect:

byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);

DPAPI funziona correttamente con i profili di roaming (come descritto qui ), sebbene sia necessario conservare i dati crittografati in un luogo (condivisione di rete, IsolatedStorage con IsolatedStorageScope .Roaming , ecc.) A cui possono accedere le varie macchine.

Vedere la classe ProtectedData in MSDN per ulteriori informazioni. C'è un white paper DPAPI qui , con più informazioni che mai desiderare.

Altri suggerimenti

Vorrei aggiungere l'approccio DPAPI.

Anche se non ho implementato personalmente l'approccio user-store, esiste una documentazione Microsoft per un approccio user-store che crittografa e decrittografa i dati per un utente specifico.

Ho usato DPAPI usando il negozio di macchine. Lo descriverò nel caso in cui si adatti a ciò che stai cercando di fare. Ho usato un servizio Windows per caricare un profilo utente di Windows e la password dell'utente viene utilizzata per crittografare i dati.

Come nota a margine, DPAPI utilizza Triple-DES che potrebbe essere leggermente più debole (rispetto ad AES), ma non sono sicuro del tipo di protezione che stai cercando.

Protezione dei dati di Windows http://msdn.microsoft.com/en-us/library/ms995355. aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top