Quiero una contraseña segura con base91.
Hola, soy un inútil.
Últimamente, me siento muy ansioso cuando Chromium/Chrome me pregunta si quiero crear contraseñas automáticamente, así que quiero crear contraseñas que sean relativamente fáciles y reversibles hasta cierto punto.
Por cierto, en el caso de Artix Linux, el comando base91 no estaba incluido por defecto, así que se asume que he ejecutado yay -S base91.
En resumen
Al final, decidí generarlo de esta manera.
echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo
※Pensándolo bien, probablemente awk '{printf $1}' sea mejor.
Lo que estuve haciendo
Para ser honesto, solía usar cadenas generadas con sha*sum, y estaba satisfecho con la longitud de la cadena. El valor hash en sí es irreversible, así que si se filtrara, no sería un gran problema.
Sin embargo, la propia función de hash es solo una cadena hexadecimal, por lo que si se realizara un ataque de fuerza bruta serio, las cadenas tratadas serían [a-z0-9] en términos de expresiones regulares.
Además, hoy en día se nos dice que usemos mayúsculas y símbolos, y me parece terrible que no lo haga.
Así que, en este caso, quiero aumentar el número de patrones de esta cadena de alguna manera.
¿Qué pasa con este método?
Primero, vamos a desglosarlo:
echo -n "string"
Envía la cadena sin salto de línea a la salida estándar, y la pasa al siguiente comando a través de una tubería.
sha384sum
Hashea la cadena recibida con SHA384.
awk '{print $1}'
La cadena recibida tiene una parte extra al final, -, que no es necesaria, así que se formatea con awk.
xxd -r -p
Yo mismo lo descubrí al investigar, pero esto imprime una cadena hexadecimal en formato binario.
Así que:
Imprime la cadena recibida en formato binario.
base91
Codifica el binario recibido con base91 y lo imprime.
tr -d "\n" && echo
Tal como está, base91 formatea automáticamente con saltos de línea, así que se eliminan los códigos de salto de línea. Si tiene éxito, se imprime una línea en blanco al final, ya que sin un salto de línea es difícil copiar y pegar.
Y así es como queda.
alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y
En realidad, se me ocurrió justo ahora, así que no estoy seguro de si muchos formularios lo aceptarán.
De todos modos, la longitud de la cadena es:
$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59
Incluso con una cadena corta, se generan 59 caracteres.
Ventajas
Para empezar, cuando se genera con xxd -r -p, se puede almacenar como datos binarios.
Así que, incluso si olvidas la string original, en el peor de los casos, puedes restaurarla si tienes el binario.
Los pasos son:
sha384sum = irreversible
xxd -r -p = reversible
base91 = reversible
Es decir, la longitud es mayor que la frase de contraseña original, y pensé que sería mejor hacer irreversible la frase de contraseña original en una etapa temprana, y así es como quedó.
Además, si se genera de esta manera, parece que no se puede leer el binario con comandos como saslauthdb o strings, que se usan para depurar binarios.
Es más seguro que tener datos de texto plano, hasta cierto punto.
La probabilidad de colisión al hacer un hash con shasum es bastante baja.
Y como esto codifica esos datos binarios en formato Base91, parece mejor que las contraseñas que mi cerebro limitado podría crear.
Añadir una función en .bashrc
Para ser sincero, escribir esto cada vez es un infierno, así que:
関数名() {
echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}
Así, configuré para poder generar contraseñas con nombre_de_función string.
Si esto también se rompe, siento que sería como decir "deja de ser humano del Imperio Yura Yura", o más bien, "deja de cifrar"...
Y si quieres aumentar la longitud de la cadena de la contraseña que se maneja en el lado del servidor, puedes usar sha512; si quieres reducir la longitud de la cadena que Bash puede reconocer, puedes usar base64.
Es fácil de cambiar, y puedes modificar la función correspondiente y añadirla a .bashrc, ¿verdad?