Domanda

Stavo pensando di creare un piccolo strumento. Non è importante ciò che lo strumento farà. La cosa importante è che lo strumento dovrà archiviare alcune informazioni sensibili sul disco fisso dell'utente. MODIFICA: le informazioni che verranno archiviate sono quelle dell'UTENTE - non sto cercando di proteggere i miei contenuti, che distribuisco con l'app.

Comprendo di dover crittografare queste informazioni. Ma poi, dove posso conservare in modo sicuro la password di crittografia? È una sorta di ricorsione infinita ...

Quindi, c'è un modo per crittografare le informazioni su Windows e far sì che Windows gestisca in modo sicuro le password? Quando dico Windows intendo Windows XP SP2 o successivo.

Dovrei anche notare che gli utenti sullo stesso sistema non devono avere accesso alle informazioni di altri utenti (anche quando entrambi eseguono la mia applicazione).

Sto cercando entrambe le soluzioni - .NET 2.0 (C #) e native (C / C ++) a questo problema.

È stato utile?

Soluzione

  

esiste un modo per crittografare le informazioni su Windows e far sì che Windows gestisca in modo sicuro le password?

CryptProtectData: http: / /msdn.microsoft.com/en-us/library/windows/desktop/aa380261(v=vs.85).aspx

Utilizzo da .NET: http://msdn.microsoft.com/en -us / library / aa302402.aspx

Storicamente, archiviazione protetta (disponibile in XP, sola lettura in vista +): http://msdn.microsoft.com/en-us/library/bb432403%28VS.85%29.aspx

Altri suggerimenti

Dovresti considerare l'utilizzo di DPAPI per questo scopo. Cifrerà i tuoi dati con una chiave simmetrica (interna) speciale che è su base per utente. Non è nemmeno necessario richiedere le password in questo caso, poiché a diversi utenti del sistema verranno assegnate chiavi diverse.

Il rovescio della medaglia potrebbe essere che non è possibile ripristinare i dati se l'utente viene eliminato / reinstallato Windows (credo che sia così, non del tutto sicuro). In tal caso, crittografa i dati con un "auto-generato" chiave derivata dalla password e memorizza la password nel registro / file crittografato tramite DPAPI.

È possibile utilizzare la funzione di crittografia nativa. Imposta l'attributo encrypt sulla tua cartella o file (dalla pagina delle proprietà, fai clic sul pulsante " avanzato "). Quindi puoi impostare gli utenti che possono accedere al file (per impostazione predefinita questo include solo il creatore del file). Il grande vantaggio di questa soluzione è che è totalmente trasparente dal punto di vista dell'applicazione e degli utenti.

Per farlo a livello di codice: usando l'API Win32, chiama EncryptFile () nella directory in cui si desidera archiviare i dati sensibili per utente. D'ora in poi tutti i file appena creati all'interno di questa directory saranno crittografati e leggibili solo dal loro creatore (che sarebbe l'utente corrente della tua app). In alternativa puoi usare il flag FILE_ATTRIBUTE_ENCRYPTED su singoli file al momento della creazione. Puoi controllare le informazioni di crittografia da Explorer nella pagina delle proprietà del file e vedere che i file creati con l'app sono crittografati correttamente e riservati ai rispettivi utenti. Non esiste una password da archiviare o utilizzare, tutto è trasparente.

Se si desidera nascondere i dati a tutti gli utenti, è possibile creare un utente speciale specifico per l'app e rappresentarlo dalla propria app. Questa, insieme agli ACL, è la tecnica benedetta su Windows per i servizi di sistema.

Potresti voler esaminare l'archiviazione isolata, che è un modo per memorizzare automaticamente le impostazioni e altri dati su dati per applicazione. Guarda un esempio e MSDN .

Questa è un'alternativa all'archiviazione delle impostazioni normali nel registro, una migliore in molti casi ... Non sono sicuro di come i dati siano archiviati nel file, quindi dovresti controllare, non voglio che sia accessibile, anche crittografato, ad altri utenti. Dalla memoria solo l'app. che ha creato lo spazio di archiviazione può aprirlo, ma deve essere verificato.

Modifica:

Dalla memoria dell'ultimo utilizzo, un buon approccio è quello di scrivere un'impostazione " classe che gestisce tutte le impostazioni ecc. nella tua app. Questa classe ha quindi l'equivalente dei metodi Serialize e DeSerialize che le consentono di scrivere tutti i suoi dati in un file IsolatedStorage o di caricarli di nuovo.

Il vantaggio aggiuntivo di implementarlo in questo modo è che puoi utilizzare gli attributi per contrassegnare i bit del sorgente e quindi utilizzare una griglia di proprietà per darti rapidamente il controllo delle impostazioni da parte dell'utente (la griglia di proprietà manipola le proprietà della classe in fase di runtime usando la riflessione).

Ti consiglio di consultare Enterprise Library Cryptography Application Block. Controlla questo post di blog . Windows ha un'API di protezione dei dati incorporata per la crittografia dei dati, ma Crypto Application Block lo rende più semplice.

Uhm, quello che stai cercando di ottenere è esattamente ciò che DRM ha cercato di ottenere. Crittografa qualcosa, quindi dai all'utente le chiavi (per quanto offuscate) e la crittografia. Lo hanno fatto con i DVD. Lo hanno fatto con Blu-Ray. Lo hanno fatto con iTunes.

Quello che stai proponendo di fare non sarà mai sicuro. Il tuo laico medio probabilmente non lo capirà, ma qualsiasi attaccante sufficientemente motivato lo risolverà e scoprirà le chiavi, l'algoritmo e decifrerà i dati.

Se tutto ciò che stai facendo è crittografare i dati utente, chiedi all'utente la password. Se stai cercando di proteggere i tuoi dati interni dall'utente che esegue l'applicazione, sei S.O.L.

Ehm hash la password? Non è necessario archiviare il vero affare da nessuna parte sulla macchina solo una password con hash (eventualmente anche salata). Quindi, quando l'utente immette la password, esegui la stessa operazione su quella e la confronti con quella con l'hash che hai memorizzato sul disco.

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