Dependiendo del tipo de caracteres que puede incluir, un comando fácil para crear una contraseña legible con 128 bits de entropía tiene este aspecto:
< /dev/urandom tr -dc [:graph:] | head -c20; echo;
(Tomado de aquí ). [:graph:]
son todos caracteres priables ascii excepto el espacio.
Explicación:
128 bits son equivalentes a 3.40e + 38 combinaciones. Si está utilizando los 94 caracteres ASCII legibles (excepto el espacio) , necesitará 20 caracteres para alcanzar al menos esa cantidad de combinaciones: 94 ^ 20 = 2.90e + 39 .
Si, por ejemplo, solo puedes usar _A-Za-z0-9
:
< /dev/urandom tr -dc '_A-Za-z0-9' | head -c22; echo;
Para 63 caracteres posibles: 63 ^ 22 = 3.85e + 39 . Solo agrega dos caracteres para alcanzar la entropía completa.
Para contraseñas hexadecimales:
< /dev/urandom tr -dc 'A-F0-9' | head -c32; echo;
El hexadecimal es fácil: 128 bits son 32 veces más que los bits de un carácter hexadecimal.
Aviso importante : en la mayoría de las situaciones en las que necesitas una contraseña, usarás una función hash detrás, que derivará la cadena real que se usará. Este análisis está sujeto a la forma en que se utiliza / recorta la contraseña.
Nota adicional : /dev/urandom
es seguro para esta operación. Compruebe Es un rand de / dev / urandom seguro para una clave de inicio de sesión? .
Nota adicional : si está usando más de una iteración con una función hash, puede restar los bits necesarios para expresar la iteración de las cantidades totales de bits que puede alcanzar, por ejemplo:
65536 iteraciones = 2 ^ 16 iteraciones, agregue aproximadamente 16 bits (2 bytes) de entropía a la contraseña elegida, porque en una ataque de fuerza bruta, debes realizar 2 ^ 16 iteraciones adicionales antes de calcular el hash utilizado.
Solo para el registro, ir más allá de 128 bits de entropía, es innecesario como se explica aquí: ¿Cantidad de operaciones simples que están fuera del alcance de toda la humanidad?
Pero si tu paranoia va más allá de eso, aquí hay algunos números útiles:
Todos los ascii legibles ( 29 caracteres , 1.6e + 57 combinaciones), 192 bits (6.28e + 57 combinaciones) de entropía:
< /dev/urandom tr -dc [:graph:] | head -c29; echo;
_A-Za-z0-9
( 32 caracteres , 3.79e + 57 combinaciones), 192 bits (6.28e + 57 combinaciones) de entropía:
< /dev/urandom tr -dc '_A-Za-z0-9' | head -c32; echo;
A-F0-9
( 48 caracteres , 16 ^ 48 combinaciones), 192 bits (2 ^ 192 combinaciones) de entropía:
< /dev/urandom tr -dc 'A-F0-9' | head -c48; echo;
Todos los ascii legibles ( 39 caracteres , 8.95e + 76 combinaciones), 256 bits (1.16e + 77 combinaciones) de entropía:
< /dev/urandom tr -dc [:graph:] | head -c39; echo;
_A-Za-z0-9
( 43 caracteres , 2.35e + 77 combinaciones), 256 bits (1.16e + 77 combinaciones) de entropía:
< /dev/urandom tr -dc '_A-Za-z0-9' | head -c43; echo;
A-F0-9
( 64 caracteres , 16 ^ 64 combinaciones), 256 bits (2 ^ 256 combinaciones) de entropía:
< /dev/urandom tr -dc 'A-F0-9' | head -c64; echo;
Teniendo en cuenta que las últimas seis opciones ya son paranoicas, es completamente inútil elegir contraseñas más complejas o más grandes que las descritas anteriormente.