Nota di partenza: Dopo aver esaminato alcuni articoli e risposte pubblicati su SO relativi alla memorizzazione di password protette, non sono ancora sicuro se il mio modo di pensare sia applicabile alla realtà di oggi.
Attualmente sto pensando a un modo per fornire una struttura sicura per l'archiviazione e il recupero delle password necessarie per l'autenticazione di un utente su una pagina web. Durante la navigazione in rete e scavare attraverso le pagine di risposte mi sono trovato bloccato a un certo punto. Prima di tutto, il tempo passa e non tutti gli articoli / risposte sono aggiornati. In secondo luogo, ci sono molte ambiguità su ciò che dovrebbe essere effettivamente fatto.
Sto usando il database PHP5 e Postgres. Pur essendo consapevole dell'esistenza del modulo pg_crypto mi sembra che fare quei calcoli a livello di database non sembri sicuro a causa del logging e passando semplicemente la password alla query del database.
Quindi ho deciso di portare a termine il lavoro nel codice dell'applicazione (PHP). Dal momento che PHP5 esiste un'API di hashing della password nativa che fornisce funzioni come password_hash()
e password_verify()
.
Quello che sto chiedendo è un consiglio se sono o no sulla strada giusta o su eventuali miglioramenti che potrebbero essere supportati da forti argomenti relativi alla sicurezza (si prega di astenersi dal consigliare sull'iterazione di milion volte). Inoltre, è possibile utilizzare PHP5 o mi manca anche qualche conoscenza teorica (considerando il mio modo di pensare per questo processo).
Il mio modo di pensare per questo processo è:
- Ottieni la password dall'utente
- Applicare un sale generato casualmente per ciascun utente (preferibilmente una lunghezza costante per ogni sale), ovvero indipendente da qualsiasi dato memorizzato nel database
- Memorizza quel sale nella tabella in cui gli utenti e le loro password con hash saranno
- "Hashinng"
- Hash il sale concatenato con password usando l'algoritmo SHA512
-
password_hash
con bcrypt
- Store hash in db
Quindi come puoi vedere la mia considerazione principale è se usare SHA-512 o bcrypto, ma sento che mi manca la capacità in questo campo e quindi sto chiedendo consigli generali a il mio intero processo .
In particolare, la mia attenzione su quale processo di "hashing" è stato portato dalla risposta di erickson sul confronto tra SHA e Bcrypt . Sono a conoscenza dell'esistenza di SHA3, ma ciò non dimostra che c'erano cose che dovrebbero essere migliorate rispetto alla famiglia SHA2 (questa è una domanda di tipo per ora)?
Quello che ho già letto:
Sale non casuale per gli hash delle password
Secure hash e salt per le password PHP
Archiviazione password, hash () con sha-512 o crypt () con blowfish (bcrypt)?