Ho letto tutto il giorno sull'assegnazione password e sull'autenticazione sicura e sebbene legga molto spesso che quasi tutti i nostri algoritmi rendono i metodi di hashing provati solo meno sicuri, ho appena avuto un'idea riguardo l'hashing della password, ad es. con scrypt, salando la password e usando un pepe:
-
La modifica dell'hash della password originale prima potrebbe probabilmente migliorare la sicurezza se si utilizza una stringa casuale ogni volta e la si utilizza per oscurare la password. Obfuscare con lo schema specifico one da solo non migliorerebbe la sicurezza ma usando sempre una nuova stringa casuale (che deve essere il più casuale possibile) renderebbe impossibile per un hacker ottenere la password tanto a lungo poiché non ha quella stringa casuale.
-
Come avresti bisogno di una stringa casuale per verificare la password, devi archiviarla e leggerla in qualche modo, il che rende ovviamente vulnerabili agli attacchi degli hacker. Vorrei salvare queste stringhe casuali con l'uuid dell'utente come chiave e crittografare il contenuto effettivo con una password usando openssl_encrypt (una funzione PHP) su un server diverso.
-
Ora il problema sarebbe la password con cui vengono crittografate le password di offuscamento. Così sono arrivato all'idea di mostrare all'utente inizialmente dopo la registrazione una sequenza casuale di parole del dizionario che non sono state memorizzate e all'utente verrà richiesto di scriverlo. Come protezione aggiuntiva userei qui anche un pepe per rafforzare la passphrase del dizionario insicuro. Ora l'utente deve rispondere ad ogni login una risposta di sicurezza, che viene poi utilizzata per decodificare la stringa casuale dall'altro server necessario per verificare la normale password. Se perde questa passphrase di risposta di sicurezza, può reimpostare la sua password usando la sua email.
-
Al momento della registrazione è possibile inserire solo password sicure e ogni password è memorizzata con hashing scrypt, sale e pepe (che si trova su un terzo server). Prima di sminuirlo, viene offuscato. Ora non userei un pepe statico che è di nuovo vulnerabile, ma dato che c'è un terzo server, comunque, genererei quel pepe in modo dinamico.
Che cosa pensi che questo metodo aumenterebbe la sicurezza o sarebbe anche meno sicuro? Non si tratta assolutamente di utilizzarlo nell'ambiente di produzione, ma di approfondire il mio interesse per l'argomento stesso e comprenderlo meglio.