Qualsiasi cosa memorizzi localmente può essere compromessa. Ma ci sono dei passi da fare per renderlo più difficile. C'è un documento su Handling Passwords che potresti considerare guardando oltre. Considerate la vostra chiave Entropia una password specifica per la vostra applicazione.
Mi riferisco al tuo entropia come chiave , poiché è funzionalmente una chiave aggiuntiva.
Quello che non si vuole fare è archiviare la chiave localmente in un formato non criptato. Invece vuoi criptare la tua chiave o ricavarla da un'altra fonte in-evidente. Ovviamente, se si cripta la chiave, è necessario memorizzare la chiave utilizzata per crittografarla, ma spesso questo singolo livello di riferimento indiretto è sufficiente a scoraggiare la maggior parte degli sfidanti.
Questo sarebbe il vantaggio di derivare la chiave. Potresti derivarlo come un hash di qualche altro pezzo di dati costanti (deve essere qualcosa che non cambia con le revisioni della tua applicazione). Un trucco per ottenere un hash è combinare l'hash con qualche altro valore costante (come un GUID o un grande numero casuale) in modo che qualcun altro non possa semplicemente combinare un algoritmo di hash noto e ottenere la chiave. Questa è un'alternativa molto migliore alla creazione del proprio algoritmo di hash (che non dovresti mai fare, a meno che tu non abbia un PHD in Matematica).
A un certo punto, è necessario un codice chiave nell'applicazione. Questa chiave è combinata con altri dati in un hash per creare la tua chiave Entropy, o usata per decodificare la chiave entropia. In realtà puoi avere il cambio di chiave con una nuova revisione della tua applicazione, purché tu mantenga la vecchia chiave per decodificare la chiave esistente. Quindi puoi re-crittografarlo con la nuova chiave o metodo.
Se si desidera la massima sicurezza, è possibile memorizzare la chiave Entropy dal computer. Ciò richiederebbe una connessione Internet e un certificato SSL, ma la chiave non verrà mai persa localmente per essere scoperta. Per fare ciò è possibile impostare un sistema di risposta alle sfide più affidabile in modo che l'autenticazione della richiesta sia diversa ogni volta e che la chiave sia consegnata tramite crittografia SSL in modo che non possa essere intercettata. Una volta usata la chiave, questa viene scartata. Ovviamente questo tipo di sconfigge lo scopo di molti scenari in cui si utilizza DPAPI per l'archiviazione sicura locale.
Qualunque cosa tu faccia, tieni presente che sarà compromessa - ciò accade sempre quando qualcuno ha accesso completo al computer locale e ai dati memorizzati su di esso. La soluzione è quella di continuare a rilasciare gli aggiornamenti che cambiano il metodo in modo che il vecchio crack non funzioni più. Ciò renderà la distribuzione di una crepa meno preziosa in quanto sarà difficile trovarne una per la versione giusta.
fonte
2010-04-09 22:57:49
Sarebbe utile se tu descrivessi la tua domanda in modo più dettagliato. Che tipo di applicazione è questa: servizio Windows, app interattiva (Windows Form/WPF), ecc.? Inoltre, come si memorizza e si recupera la chiave simmetrica? Voglio dire, se usi DPAPI con l'archivio utente e memorizzi la chiave tu stesso, solo tu (o qualcuno che può accedere con le tue credenziali) puoi recuperare il valore, nel qual caso, non sono sicuro di quale minaccia stai provando attenuare proteggendo l'entropia secondaria (dovresti preoccuparti di proteggere le tue credenziali). –
Quando lo si protegge con LocalUser, qualsiasi applicazione in esecuzione con l'utente locale può accedere all'archivio chiavi. È un'applicazione di Windows Form. A differenza di LocalMachine, qualsiasi applicazione in esecuzione sulla macchina può accedere allo store per ottenere la chiave che è sostanzialmente priva di crittografia. –
La tua affermazione non è precisa al 100%. Solo le app in esecuzione con l'account utente SAME con il profilo caricato (può essere un utente di dominio, non necessariamente un utente locale) possono accedere all'archivio delle chiavi SAME. Quindi, se l'utente X lancia il tuo Win Form e crittografa un segreto con la chiave DPAPI di X dell'utente, solo le app lanciate dallo stesso utente X saranno in grado di decodificarlo. Essenzialmente, questo segreto è protetto dalle credenziali dell'utente X, quindi fintanto che l'utente X non condivide la password, non riesco a pensare a una minaccia che stai mitigando. Potresti descrivere un caso d'uso (scenario) che stai cercando di evitare? –