2009-03-17 13 views
6

Ho bisogno di memorizzare il nome/password dei miei utenti da qualche parte (preferibilmente il Registro) in modo che la mia applicazione .Net possa usarli per accedere a qualche servizio remoto per conto dell'utente. So che è possibile memorizzare i valori nel registro come "segreti", il che significa che vengono crittografati utilizzando il token dell'utente del dominio Windows o qualcosa del genere. In altre parole, non voglio avere a che fare con la crittografia da solo.Mantenere le password nel registro come "segreti"

Per chiarire: non posso memorizzare hash della password o saltarli o altro. Queste credenziali sono per un sistema di terze parti e il modo solo per per poter accedere a questo sistema per conto dei miei utenti è in qualche modo mantenere le loro credenziali ed essere in grado di ripristinarle.

Quindi, in ogni caso, ricordo vagamente che c'è un posto nel registro, ma i dettagli sono oscuri. E ho bisogno di farlo in C# (anche se se è semplice accesso al registro non dovrebbe importare).

Modifica: Un'altra cosa, dovrebbe persistere tra le sessioni utente di Windows (IOW non mi aiuta se la password non è leggibile dopo che l'utente si disconnette e si riaccende).

+0

@Assaf - sì, la funzionalità di crittografia è una parte di Windows stessa e gli elementi vengono mantenuti tra le sessioni utente. – overslacked

risposta

10

Probabilmente stai pensando all'API di protezione dati. Cerca MSDN o read some blogs e vedi se funzionerà per te.

+0

Sì, buona cattura! DPAPI sembra essere ciò di cui parla l'OP. – Cerebrus

+0

La crittografia sarebbe persistente rispetto alle sessioni utente? (Ad esempio, se l'utente si disconnette e si riaccende o se passa abbastanza tempo, i dati potrebbero essere ancora leggibili)? –

5

Si può provare a utilizzare System.Security.Cryptography.ProtectedData, che può crittografarli utilizzando una chiave per utente. http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx.

Non è completamente sicuro, poiché il codice viene eseguito in quanto l'utente può decrittografare i dati.

+0

La crittografia sarebbe persistente rispetto alle sessioni utente? (Ad esempio, se l'utente si disconnette e si riaccende o se passa abbastanza tempo, i dati potrebbero essere ancora leggibili) –

+0

Sì, è una chiave di crittografia per utente. – Michael

0
  • Non memorizzare mai le credenziali come testo normale. Utilizzare un codice chiave simmetrico. Rimuovere la password in fase di esecuzione. Vedi lo MSDN reference sulle funzioni di Crittografia.
+0

Cosa intendi con la rimozione della password in fase di runtime? Se uso una chiave simmetrica di chiunque altro che esamina il file binario, può estrarla. –

+0

Fudge il file binario. Usa più hash. Prendendo la password fuori significa decrittazione. Questo è molto, molto meglio della password in chiaro in un dato giorno. – dirkgently

+0

@dirkgently È grandioso, ma dove memorizzi la chiave simmetrica? Nel registro? In un file? Come è più sicuro? – Dan

1

Ricordare che non è possibile memorizzare in modo sicuro nulla se è possibile recuperare automaticamente la password (senza input dell'utente). L'uso di RSA, simmetrica o altra crittografia non fa differenza se si memorizza la chiave di decodifica all'interno dell'applicazione. Una volta che qualcuno ottiene la chiave, il segreto è fuori.

Tuttavia, l'API di protezione dei dati sopra menzionata dovrebbe proteggere le password di altri utenti sullo stesso computer. (È sounds like DPAPI utilizza le credenziali di accesso per la crittografia.)

Per alcune altre opzioni, controllare la pagina msdn per Threat Mitigation.

Problemi correlati