2011-11-14 3 views
5

Ho un progetto e apparentemente i progettisti del software non hanno messo in sicurezza la sicurezza.Crittografia AES T-SQL vs Hashing/Salting per l'accesso degli utenti al sito web

Le password vengono memorizzate in testo normale e trasmesse in testo normale. Quindi mi rimane il compito di sistemarlo.

Sono un po 'arrugginito sulla sicurezza, quindi la mia domanda è: per l'autenticazione della password utente online è meglio usare le tecniche di hashing/salting o è meglio usare la crittografia AES? Potrei avere i pro e i contro.

Sarebbe meglio utilizzare in qualche modo il provider di appartenenze ASP.NET? Sarebbe facile da fare? L'ho usato prima, ma il software chiama le sue tabelle, quindi non sono sicuro che ci siano più problemi lì.

Se questo è stato risolto, qualcuno potrebbe indirizzarmi lì, perché non ho trovato un confronto.

risposta

8

Non si deve MAI memorizzare le password utilizzando la crittografia simmetrica.

Sale casuale per ogni utente, ha cancellato la password, memorizza sia il sale che l'hash nel database. Quindi, durante le richieste di accesso si ottiene l'utente tramite e-mail/nome utente/id ecc., Quindi utilizzare il sale associato a tale utente e cancellarne la password fornita e quindi confrontarlo con l'hash memorizzato. Se partite, accedi, altrimenti password errata.

Se si utilizza il provider di appartenenze ASP.NET integrato, è necessario farlo per conto dell'utente.

+0

La risposta di cui avevo bisogno, grazie. Sulla nota dell'appartenenza a asp.net: il software non lo ha usato (il che spiega il mal di testa). Stavo solo rivedendo le tabelle e penso che la soluzione migliore sarebbe semplicemente aggiungere una nuova colonna per l'ID utente aspmembership. – pqsk

+0

Si noti che l'aggiunta di una nuova colonna per l'utenteid di aspmembership non evita la cattiveria che ho menzionato in [la mia risposta] (http://stackoverflow.com/questions/8123382/t-sql-aes-encryption-vs-hashing-salting-for -logging-in-users-to-website/8123808 # 8123808), anche se ti dà delle scelte su esattamente quale tipo di brutto cambiamento introdurrà i nomi utente. – Brian

1

Ti suggerisco di multipe hash una password salata. Più di 10 volte o qualcosa. Allora perché? Perché per te hashing una password salata non prenderà riconoscibilmente più a lungo. Ma per un uomo malvagio che cerca combinazioni diverse di brutefocre una password, ci vuole 10 volte di più ogni volta. E non può essere sicuro se lo hai fatto 10 o 1000 volte.

Io uso questo personalmente come un aumento di sicurezza economico.

vedere qui: Stackoverflow Salting Your Password: Best Practices?

o ci Secure hash and salt for PHP passwords

Buona fortuna :)

Harry

-2

Dipende se si desidera o meno essere in grado di recuperare una password utente per qualche operazione. Se vai con hashing/salting, significa che ogni volta che un utente dimentica la propria password, dovrai fare in modo che l'applicazione generi una nuova password sicura. Se si utilizza la crittografia simmetrica, si offre almeno all'utente la possibilità di ripristinare la password esistente e di modificarla in seguito a loro piacimento.

Non riesco a rispondere se c'è una maggiore sicurezza in entrambi i casi. Qualcuno con una conoscenza maggiore di quella che dovrò rispondere indipendentemente dal fatto che sia più o meno fattibile per decifrare un algoritmo di hashing/salting in contrasto con un algoritmo di crittografia simmetrica. In superficie, l'hashing/salatura sembra essere più sicuro perché l'hacker deve capire l'algoritmo prima che possa iniziare a scansionare le password. Ma lo stesso si potrebbe dire se si decidesse di utilizzare un algoritmo di crittografia simmetrico diverso. Potresti anche combinare algoritmi a chiave simmetrica nel caso in cui pensi che AES non sia abbastanza sicuro da solo.

+1

Hashing/salting è più sicuro perché non stai memorizzando la password. Chiunque entri nel tuo server non sarà in grado di eseguire una funzione magica per estrarre tutte le password degli utenti (e quindi usarle su altri server) ... anche se saranno in grado di decifrare le password "comuni" (certo, lì ci sono più password che condividono un hash con "Password1", ma è probabile che l'utente stia usando "Password1"). – Brian

+2

-1 per chiedere l'accesso alle password. Questa è una violazione estrema della sicurezza, se mi dai un paio di centinaia di email e password da un sistema di accesso al mondo reale (forse un paio di migliaia) troverò almeno 1 account di lavoro paypal con quelle informazioni. Hashing ha lo scopo di proteggere le password che sono state compromesse sia da un utente malintenzionato che ha accesso al sistema E da un amministratore di sistema malintenzionato che ha già accesso. –

+0

@Brian Si consiglia di utilizzare gli hash in questo senso. Tuttavia, ciò significa che la password esistente non potrà mai essere ripristinata. So che in alcuni sistemi crittografano ulteriormente le informazioni in base al sale utilizzato nella password dell'utente, rendendo così impossibile accedere alle informazioni sull'utente se l'utente ha dimenticato la password. Ma non è né qui né là. Immagino che dipenda solo dall'applicazione. – villecoder

1

L'utilizzo dell'appartenenza non dovrebbe aggiungere tanta difficoltà a fare tutto da solo, ed è probabile che sia più sicuro.Usa semplicemente il nome utente esistente come nome utente di appartenenza, costringi gli utenti a reimpostare le loro password (la risoluzione del sistema di sicurezza richiederà di eliminare le vecchie password indipendentemente) e cambia tutti i tuoi hook che controllano chi deve usare Membership.GetUser() o simile.

Ci sarà un po 'di cattiveria se si supporta la possibilità di cambiare i nomi utente. La modifica di un nome utente può introdurre un buco di sicurezza se non viene eseguita attentamente poiché l'appartenenza si basa su nomi utente e useridi in modi che potrebbero causare buchi (sebbene ciò richieda a un utente non malintenzionato di cambiare il proprio nome, quindi non è un buco enorme).

+0

Potresti approfondire i problemi di sicurezza con il provider di appartenenza se gli utenti possono cambiare il loro nome utente? –

+0

@ChrisMarisic: il provider di appartenenze non fornisce supoort integrato per la modifica del nome utente. Qualcun altro che in qualche modo sa che stai cambiando il tuo nome utente può quindi modificare il proprio nome utente con il tuo vecchio nome utente.Quindi, quando tentano di accedere alle informazioni, il sistema potrebbe restituire le informazioni in modo errato. Fondamentalmente, una volta che si uniscono due pezzi di informazioni identificative, è necessario assicurarsi che rimangano completamente sincronizzati, non solo all'interno del database ma anche all'interno di eventuali cache (e possibilmente devono reimpostare i dati della sessione). AspNet non lo farà per te. – Brian

+0

@ChrisMarisic: Inoltre, ci sono potenzialmente 3 pezzi di dati da sincronizzare, poiché l'OP deve utilizzare il proprio controllo di accesso o mantenere il nome utente degli utenti all'interno del proprio sistema di account esistente sincronizzato con il loro nome utente all'interno dell'appartenenza. – Brian

Problemi correlati