Cosa devo fare quando devo memorizzare le password per l'utilizzo in software di terze parti?

4

Ho un'applicazione WPF desktop che si autentica con Dynamics CRM 2011. Chiedo il nome utente e la password dell'utente e li uso per connettersi a Dynamics CRM 2011 utilizzando CrmConnection.parse("url={2};Username={1};Password{2}",CRMServerUrl, Username,Password) . Questa classe si collega quindi al server CRM utilizzando le credenziali fornite (autenticate con Active Directory).

L'enigma con cui sto combattendo è che parte del design dell'applicazione è che l'autenticazione in CRM è necessaria solo una volta. Qualsiasi autenticazione oltre la prima dovrebbe avvenire automaticamente utilizzando le credenziali che l'utente ha precedentemente inserito (e sì, l'utente può modificarle nell'app se necessario). Ciò significa che ho bisogno di memorizzare le password, ma non posso cancellarle.

Attualmente utilizzo i metodi suggeriti da Jon Galloway in Crittografia delle password in un file app.config .NET . Un collega lo ha consigliato. Ho letto alcune altre domande su questo argomento, ma alcuni concetti come chiavi derivate, crittografia hardware o invio di un valore derivato sono o punti ciechi totali per me o non sono possibili all'interno dei vincoli di progettazione.

Quali sono le mie opzioni?

    
posta Nzall 23.04.2014 - 17:12
fonte

2 risposte

2

Dopo aver letto la tua domanda, ma prima di leggere il post di Jon Galloway, la mia reazione iniziale fu di usare DPAPI. Quindi sono stato incoraggiato quando ho finalmente dato un'occhiata al post di Jon.

Ecco perché. Come dice Snox, la crittografia della password con una chiave master ha senso. Questo è esattamente ciò che fa DPAPI. Ma la chiave master per DPAPI cambia tra utenti e macchine. Quindi non devi capire il tuo modo di farlo. Il DPAPI è stato presumibilmente studiato dai crittografi, quindi dovrebbe essere abbastanza sicuro.

Detto questo, DPAPI non è un proiettile d'argento. Offre solo un compromesso. Quindi è importante capire i rischi coinvolti. Innanzitutto, qualcuno ha effettuato l'accesso poiché lo stesso utente può decodificare i BLOB DPAPI semplicemente chiamando la funzione corretta sul BLOB. È possibile ridurre questa minaccia utilizzando il parametro entropy opzionale. Consiglio vivamente questo. Tale valore potrebbe essere hardcoded nell'applicazione o leggere da una chiave di registro, ecc. L'hard-coding nell'applicazione potrebbe essere la via da seguire in quanto l'utente malintenzionato dovrebbe eseguire il reverse engineering dell'app per ottenere il valore (non difficile , ma sicuramente alza la barra). Gli autori di attacchi con accesso al tuo file system possono anche decodificare i blob DPAPI (supponendo che conoscano l'entropia opzionale) usando DPAPIck . Ciò richiede anche conoscere la password dell'utente.

    
risposta data 24.06.2014 - 14:04
fonte
0

Una delle ragioni per cui le password memorizzate sono di solito l'hash è perché è un'operazione non reversibile , questo significa che anche se il DB viene violato, l'unica cosa che l'hacker conoscerà è l'hash delle password e non le vere password.

Non essendo in grado di farlo, puoi sempre crittografare ogni password che memorizzi , utilizzando una chiave master, tieni presente che si tratta di un'operazione reversibile, quindi sarai vulnerabile a Attacco solo testo cifrato (modello di attacco per la crittanalisi in cui si presume che l'autore dell'attacco abbia accesso solo a una serie di testi cifrati) e la tua chiave sarà anche un punto di interesse, quindi devi mantenerlo al sicuro.

    
risposta data 24.04.2014 - 12:07
fonte

Leggi altre domande sui tag