Autenticazione basata su token: cos'è una buona lunghezza di token?

1

Qual è una buona lunghezza del carattere token per un accesso basato su token? Attualmente sto usando il seguente codice:

<?php        
$token = bin2hex(openssl_random_pseudo_bytes(16));

È 16 sufficiente o dovrei cambiarlo con un numero più adeguato? Dovrebbe essere utile generare a caso la lunghezza? E se sì, quale dovrebbe essere l'intervallo (lunghezza minima e massima)?

    
posta user5115459 22.07.2015 - 12:39
fonte

3 risposte

1

Stai generando 16 byte che sono 128 bit. I moderni codici a blocchi e stream (ad esempio AES) hanno un margine di sicurezza di 128 bit, quindi è ragionevole dire che 16 byte siano sufficienti.

Ciò che non posso dire con certezza è se openssl_random_pseudo_bytes() sia abbastanza sano di cui contare .

    
risposta data 22.07.2015 - 17:40
fonte
0

Penso che tu possa usare un valore casuale a 64 bit che è codificato come Base64. La possibilità di indovinare il token corretto è 1/2 ^ 64 ciò che è uguale a 1 / 18446744073709551616. Questo è un numero piuttosto impressionante e sarebbe quasi impossibile per un utente malintenzionato trovare il token corretto con le richieste http.

    
risposta data 22.07.2015 - 12:52
fonte
0

Un aggiornamento per coloro che trovano questa domanda poiché si posiziona molto su Google.

Se appare dalla documentazione PHP corrente che openssl_random_pseudo_bytes può generare una stringa crittograficamente strong, ma questo dipende dal sistema. Devi passare un secondo parametro, quindi controlla la risposta in questo modo:

openssl_random_pseudo_bytes( 32, $cstrong );
if ( !$cstrong ) echo 'weak!';

Se $ cstrong è falso, la stringa non è crittograficamente strong.

link

Se usi PHP 7+ dovresti usare random_bytes invece.

link

Personalmente ho generato token come segue:

$token = bin2hex( random_bytes(32) );

Questo genera una stringa a 256 bit, che è un po 'di prova futura.

    
risposta data 01.10.2018 - 19:40
fonte

Leggi altre domande sui tag