Calcular el hash de un password usando yescrypt y una salt
Problema: necesitas calcular el valor del hash de un password en Linux con un valor de SALT predecible, por ejemplo para meter ese valor directamente en /etc/shadow
. Recientemente algunas distribuciones como Debian 11 han empezado a usar yescrypt y esto lo hace mucho más dificil. Intentas usar mkdpasswd
pero no hay manera.
Solución: puedes usar alguno de los métodos que se proponen como la librería crypt
accedida a través de Perl o Python, pero vamos a usar mkpasswd
Lo que sucede es que la documentación de mkpasswd
está muy mal explicada y el nombre de los parámetros es confuso. Donde dice SALT tienes que meter mucho más que eso, tienes que meter el método, los parámetros y la SALT.
Lo intutivo leyendo la documentación sería:
mkpasswd --method=yescrypt --salt='/kuoWIs/HW3B2GAIYjr3T0' contrasenya
Pero si haces eso no fufa, te dice:
Wrong salt length: 22 bytes when 0 expected.
Si no usas SALT, entonces si va, pero eso no es lo que queremos, queremos un hash predecible.
mkpasswd --method=yescrypt contrasenya $y$j9T$uLmXYmWNvc.fmCpkBGV4D/$hGHWY2pCmnH6CMon864rM.fjCsrFrNT6G9wIUj56a8B
Solución: tienes que poner en SALT también el método y los parámetros, es decir añadir $y$j9T$
Asi si que funciona:
mkpasswd --method=yescrypt --salt='$y$j9T$/kuoWIs/HW3B2GAIYjr3T0' contrasenya $y$j9T$/kuoWIs/HW3B2GAIYjr3T0$8bWIcutUs1QftN1c0wgDD8yqc8KOfDWqxCt7md9kEg0
Si quieres hacerte un script de Bash sería algo asi:
#!/bin/bash PASSWORD=$1 SALT=$2 mkpasswd -m yescrypt -S "\$y\$j9T\$${SALT}" "${PASSWORD}"