Generando contraseñas / tokens temporales usando RNG

5

En mi aplicación web, genero tokens / contraseñas temporales para acceder a archivos utilizando este método:

ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"
ALPHABET_LENGTH = 64

def generate_token(str_len = 22)
   res = ""
   str_len.times{res << ALPHABET[rand(ALPHABET_LENGTH)]}
   res
end

¿Existe alguna vulnerabilidad en la generación de tokens / contraseñas de esta manera?

Si importa, un token generado tiene una duración de 7 días.

    
pregunta Ramito 11.01.2018 - 16:06
fuente

2 respuestas

7

Como parece que está usando el RNG predeterminado de Ruby, el Mersenne Twister, es posible que un atacante obtenga la semilla del RNG, y por lo tanto comprometa todos los números pasados, presentes y futuros generados por el algoritmo usando algo como mt_derand . Probablemente sea una mejor idea utilizar SecureRandom en su lugar.

    
respondido por el LamerZ 11.01.2018 - 19:49
fuente
4

Depende de la calidad de la función rand .

Si no es un generador seguro de números aleatorios (y en particular si es una función estándar de un marco conocido), entonces sí: un atacante podría analizar una cantidad de tokens generados secuencialmente y tener una buena posibilidad de averiguar el estado interno del RNG, lo que le permite extrapolar una nueva ficha de una válida existente.

    
respondido por el Stephane 11.01.2018 - 16:19
fuente

Lea otras preguntas en las etiquetas