Voglio sapere quali sono i punti da tenere a mente durante la creazione di un token hash per i miei link per la reimpostazione della password.
In particolare, come renderlo non prevedibile per un utente malintenzionato?
Voglio sapere quali sono i punti da tenere a mente durante la creazione di un token hash per i miei link per la reimpostazione della password.
In particolare, come renderlo non prevedibile per un utente malintenzionato?
Molti generatori di numeri casuali generano solo numeri pseudocasuali. Creano una serie di numeri che appaiono casuali a prima vista, ma i numeri seguono un algoritmo esatto. Per evitare che generino la stessa serie di numeri ogni volta che vengono utilizzati, vengono inizializzati da seeding con un valore iniziale. Un buon generatore di numeri pseudocasuali dovrebbe generare una serie diversa di numeri per ogni possibile valore di seme.
In pratica, un generatore di numeri pseudocasuali viene spesso inizializzato con l'ora corrente. Poiché il tempo sarà diverso ogni volta che viene eseguito un programma, non genererà mai lo stesso flusso di numeri. Purtroppo questo è insufficiente per qualsiasi scopo di sicurezza, perché il tempo di inizializzazione è molto prevedibile. Per questo motivo è necessario combinare i valori di altre fonti di entropia che sono difficili o impossibili da prevedere per un aggressore esterno.
Quali fonti di entropia sono fattibili dipende dal tuo ambiente.
Utilizza un generatore di numeri casuali protetto da crittografia per generare una sequenza casuale. Ce ne sono molti disponibili, integrati in diverse piattaforme. Molti framework e linguaggi forniscono wrapper per accedere a questi come la funzione openssl_random_pseudo_bytes in PHP .
Potresti generare il tuo. L'articolo sopra suggerisce:
A cryptographically secure hash of a counter might also act as a good CSPRNG in some cases. In this case, it is also necessary that the initial value of this counter is random and secret. However, there has been little study of these algorithms for use in this manner, and at least some authors warn against this use.
Tuttavia, dovresti inizializzarlo con qualcosa imprevedibile . Cioè, imposta il contatore come hash come un numero generato in modo imprevedibile e semplicemente incrementalo ogni volta. Avresti bisogno di entropia adeguata sia per il valore del contatore che per l'hash dell'output (128 bit).
Dato che hai comunque bisogno di una fonte imprevedibile per questo, e c'è un avvertimento contro questo uso, sceglierei la prima opzione di generare semplicemente una sequenza crittograficamente protetta usando le funzioni del linguaggio incorporate.
Leggi altre domande sui tag password-management password-policy hash