En primer lugar, debe usar un generador seguro de números aleatorios, como Ruby SecureRandom
.
En segundo lugar, debe elegir un nivel de seguridad de destino para las contraseñas generadas, es decir, ¿qué tan difícil debería ser descifrarlas? Los niveles de seguridad a menudo se dan en bits , es decir, el logaritmo base 2 del número de contraseñas equiprobable distintas. En palabras más simples:
- Un nivel de seguridad de 64 bits significa que hay 2 ^ 64 contraseñas distintas, y su sistema es tan probable que elija una como cualquiera de las demás;
- Un "surtido aleatorio de 8 letras minúsculas / mayúsculas y números" tiene 62 caracteres distintos, lo que significa que elegir uno de esos caracteres al azar proporciona log2 (62) ≈ 6 bits de seguridad. La elección de 8 caracteres independientes al azar proporciona log2 (62) * 8 ≈ 48 bits de seguridad.
48 bits es crackable en la práctica para un atacante realmente dedicado; Recomendaría un nivel de seguridad de 64 bits como mínimo para las contraseñas, y prefiero unos 80 bits para los míos. Con letras en mayúsculas / minúsculas + dígitos, necesita 11 caracteres aleatorios para un nivel de seguridad de 64 bits, y 13 caracteres le da un nivel de seguridad de 78 bits.
Antes de editar una pregunta, le preguntamos sobre el efecto de agregar símbolos a sus contraseñas, además de aumentar el tamaño del alfabeto a aproximadamente 95 caracteres y log2 (95) ≈ 6.6, lo que reduce el tamaño de las contraseñas en un carácter: 10 caracteres para una contraseña de 64 bits y 12 para una contraseña de 79 bits. Si está generando contraseñas al azar, puede ver que no es un gran efecto.