L'ho già chiesto su StackOverflow ma mi è stato suggerito che sarebbe stato un posto più adatto e non ho trovato alcun modo per "spostare" la domanda, quindi devo copiarla.
Credi, lo so, ci sono centinaia di domande su questo problema. Li ho letti per trovare il modo più sicuro di memorizzare una password, ma ogni risposta fornita mi dà la sensazione pruriginosa che possiamo ancora fare molto meglio. E sto pensando di usarlo in PHP, ma penso che si applichi a qualsiasi linguaggio di programmazione.
Non sono un esperto di sicurezza ma non è solo un metodo non abbastanza sicuro?
ENCRYPT
Se ho capito bene, la password crittografata (con PHP) può essere decrittografata in chiaro se si conosce la stringa utilizzata. La maggior parte degli account di hosting che ho visto compromesso prima ottengono l'accesso ai file e quindi cercano la password del DB memorizzata in config.php o giù di lì.
Anche se uso una stringa grande e complicata per crittografare la password, se l'intruso va su create_account.php (o ovunque venga creato l'utente), troverà la stringa lì e sarà in grado di decodificare l'intera password colonna in pochi minuti (giusto?)
hashing
La cosa buona dell'hashing è che la password non può essere restituita in testo semplice, il che è ottimo ma ... Molti metodi di hashing hanno degli exploit e ho letto alcuni articoli che ottengono i possibili valori per un hashing (un stringa hash può significare più di una stringa di testo semplice). Ho letto un articolo che diceva che alcune persone erano in grado di recuperare la password dall'hash utilizzando Amazon EC2 in pochi secondi per password deboli e ore per quelle forti.
Ho persino visto le directory degli indici di hashing dove hacker e j * rks casuali memorizzano enormi quantità di valori di stringa hash > quindi se inserisci l'hash che hai ottenuto, puoi ottenere la password in un solo secondo. Questa è ancora una specie di attacco di dizionario ma piuttosto efficace.
Per un hash comune come MD5 ho persino visto un articolo in cui un hacker ha facilmente rilevato che Google indicizza in qualche modo gli hash MD5 a causa di quanto viene usato (come nei nomi dei file, gravatar.com e API simili, ecc.) dizionario HUUUGE indicizzato di hash che richiede solo un secondo per associare ai valori.
MD5 e SHA1 una volta erano considerati sicuri ma poi sono apparsi degli exploit. Cosa succede se il metodo fidato usato ora (ho letto blowfish è il migliore, è corretto?) Ottiene qualche exploit in futuro?
E infine, so che è ridicolo, ma mi sento a disagio con la possibilità che 2 password abbiano lo stesso risultato di hash. Lo so, le possibilità di qualcuno che indovina l'altro valore che ha lo stesso hash è bassa, ma HEY, siamo nel 2012 !, non dovevamo avere macchine volanti e computer che potrebbero rendere il film Avatar in un'ora già ? : P Ci dovrebbe essere qualcosa di meglio già ...
SALE
Anche se utilizzo un salt per rendere più difficile il recupero della password, se l'hacker vede la stringa salata fissa (o dove è stato memorizzato il sale casuale) non renderebbe molto più complicata la forza bruta con un attacco computazionale del cloud , vero?
NON CI SONO QUALCOSA MEGLIO?
Come ho detto, sono ben lungi dall'essere un esperto di sicurezza, ma non c'è nessuna opzione là fuori? Ho letto molte domande a riguardo qui in Stack Overflow e risultato Google (che la maggior parte sono risposte di overflow dello stack: D) e dicono praticamente sempre la stessa cosa.
Se l'hashing e la crittografia sono le uniche opzioni, è un modo per migliorarlo? C'è un modo per nascondere la password di crittografia nel caso in cui il file che crea gli utenti sia accessibile?
In tutte quelle risposte non ho mai visto qualcuno suggerire di combinare metodi come:
sha1 (cripta [blowfish.salt], sale) Questa è una cattiva idea per qualche motivo? (Posso solo pensare di consumare troppo processore in un sito con migliaia di utenti che si registrano e si collegano, ma posso gestirlo nei siti che sto pianificando di usarlo)
Non sto chiedendo "per favore codificalo per me", voglio sapere come renderlo "il più possibile impossibile" (il più difficile: P) per ottenere le password nel caso in cui il DB e il codice sorgente siano mani sbagliate
Forse ho frainteso il modo in cui funzionano questi metodi e forse c'è qualcosa come una funzione PHP per rendere una stringa non decifrabile anche con la password, o forse mi sono perso qualcosa. Trovo ancora strano che nessuno abbia suggerito una combinazione di metodi.
Grazie in anticipo e grazie ancora se stai ancora leggendo i pensieri della mia mente preoccupata