¿Cuántos bytes debe tener un token de autorización? [duplicar]

5

Suponiendo que genere bytes aleatorios con un PRNG seguro, ¿cuántos bytes necesito para que los tokens de autorización sean seguros?

Específicamente, cuando los usuarios inician sesión en un sitio web, se generará un token y se almacenará en una cookie para autorizar futuras solicitudes. En el lado del servidor, el token se almacenará en una base de datos y se consultará cuando se reciba una solicitud.

    
pregunta josh3736 04.09.2013 - 03:19
fuente

2 respuestas

4

Dado que los tokens de autorización son aleatorios, su principal vector de ataque es la adivinación de fuerza bruta.

En un ataque en línea, su estrategia de defensa puede limitar la tasa de conjeturas o el total de conjeturas permitidas y, por lo tanto, limitar la longitud de bits necesaria.

Un ataque sin conexión es más interesante, si tal ataque es posible en su entorno. Con la tecnología actual, 64 bits (entre 10 y 11 caracteres alfanuméricos) están al borde de lo que se puede suponer, dada una buena cantidad de tiempo y una cantidad tonta de dinero. Por otro lado, 128 bits (entre 21 y 22 caracteres alfanuméricos) están fuera del alcance de los ataques de fuerza bruta, casi indefinidamente, a menos que nuestra comprensión de la termodinámica del tiempo cambie drásticamente.

    
respondido por el tylerl 04.09.2013 - 07:09
fuente
1

¿Seguro contra qué?

Aunque en realidad no tiene que preocuparse por responder eso, como para cualquier posible problema, la respuesta de 16 bytes de @terry-chia será suficiente.

Si necesita defenderse contra una colisión accidental (a dos usuarios se les emite el mismo token), debe observar cuántos usuarios distintos podría tener y hacer un poco de matemáticas. Entonces, si sus tokens se usan para identificación (como un nombre de usuario) así como para autenticación, entonces debe preocuparse por este tipo de colisiones.

Aún así, supongo que no hay posibilidad de que su número de usuarios supere los billones de dólares, por lo que incluso si usa estos tokens para la identificación, 16 bytes serán suficientes.

Con aproximadamente 8 * 10 ^ 14 usuarios, tendrá aproximadamente 1 en mil millones, 10 ^ {- 9}, posibilidad de que haya al menos un par de usuarios que terminen con el mismo token. Si ese es un riesgo demasiado grande, entonces vaya con 20 bytes. Las matemáticas para esto se pueden encontrar en las descripciones del Birthday Problem

    
respondido por el Jeffrey Goldberg 04.09.2013 - 07:18
fuente

Lea otras preguntas en las etiquetas