Autenticación basada en token: ¿cuál es una buena longitud de token?

1

¿Cuál es la longitud de un buen token para un inicio de sesión basado en token? Actualmente estoy usando el siguiente código:

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

¿Es 16 suficiente o debería cambiarlo con un número más adecuado? ¿Debería ser útil generar aleatoriamente la longitud? Y si es así, ¿cuál debería ser el rango (longitud mínima y máxima)?

    
pregunta user5115459 22.07.2015 - 12:39
fuente

3 respuestas

1

Estás generando 16 bytes, que es de 128 bits. Los cifrados de bloque y flujo modernos (es decir, AES) tienen un margen de seguridad de 128 bits, por lo que es razonable decir que 16 bytes son suficientes.

Lo que no puedo decir con certeza es si openssl_random_pseudo_bytes() es lo suficientemente sano como para confiar en .

    
respondido por el Scott Arciszewski 22.07.2015 - 17:40
fuente
0

Creo que puedes usar un valor aleatorio de 64 bits codificado como Base64. La posibilidad de adivinar el token correcto es 1/2 ^ 64 que es igual a 1 / 18446744073709551616. Este es un número bastante impresionante y sería casi imposible para un atacante encontrar el token correcto con las solicitudes http.

    
respondido por el Portfolio Vietnam 22.07.2015 - 12:52
fuente
0

Una actualización para aquellos que encuentran esta pregunta, ya que ocupa un lugar destacado en Google.

Si aparece en la documentación de PHP actual, openssl_random_pseudo_bytes puede generar una cadena criptográficamente sólida, pero esto depende del sistema. Debe pasar un segundo parámetro y luego verifique la respuesta de la siguiente manera:

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

Si $ cstrong es falso, la cadena no es criptográficamente fuerte.

enlace

Si estás usando PHP 7+, deberías usar random_bytes en su lugar.

enlace

Personalmente genero tokens de la siguiente manera:

$token = bin2hex( random_bytes(32) );

Esto genera una cadena de 256 bits, que es un poco de pruebas futuras.

    
respondido por el Craig Jacobs 01.10.2018 - 19:40
fuente

Lea otras preguntas en las etiquetas