Ho una domanda totalmente teorica su di te oggi - qual è la pratica "migliore" per memorizzare le password? [Il migliore in termini di sicurezza e prestazioni]
Solitamente, in particolare gli sviluppatori PHP tendono a memorizzare le credenziali dell'utente sia in testo normale sia come hash, usando MD5 o SHA1 e i loro successori. Gli sviluppatori web e i cuochi di software più intelligenti aggiungono addirittura un po 'di sale alla password prima dell'hashing.
Gli sviluppatori Android di solito sembrano memorizzare in testo normale, per quanto ho visto fino ad ora, facendo affidamento ingenuamente sul concetto di diritti utente di Android, anche sostenendo che il rooting dei dispositivi è colpa dell'utente.
Ci sono molte pratiche diverse là fuori. Testo semplice per quelle applicazioni, in cui gli sviluppatori si affidano alla sicurezza della piattaforma o vogliono che l'utente recuperi la propria password. Hashing in cui gli sviluppatori fanno affidamento sull'integrità dell'algoritmo di hashing, ignorando gli attacchi di collisione e così via. Salted Hashings dove gli sviluppatori leggono che l'hashing semplice è una cosa negativa a causa delle tabelle arcobaleno. Ci sono anche alcuni sviluppatori là fuori che usano la crittografia reale, ma di solito la chiave è da qualche parte recuperabile.
La mia idea era di usare AES (o crittografia simmetrica [ancora non spezzata] in generale, come blowfish e così via), criptando la password imbottita (per nascondere la lunghezza della password) con un prefisso salt. La chiave sarebbe la password dell'utente, che dovrebbe rendere impossibile il recupero e la verifica della password senza la password.
Mi chiedo perché la pratica abituale differisca da quell'idea - quindi dov'è la colpa? La complessità non dovrebbe essere così alta, perché ci sono buone implementazioni di AES là fuori, anche implementazioni hardware. Non ci sono conflitti di hash su questo.
Quindi ho ragione che nessuno potrebbe usare un dump di dati con quelle password per qualcosa di diverso da bruteforcing? [Ovviamente ci sono altri attacchi, che sono a prescindere dalla memorizzazione della password di back-end, quelli non sono argomenti di questa domanda]
Può essere che questa idea sia abbastanza simile e correlata a bcrypt, ma senza più iterazioni?