Calcular el hash de un password usando yescrypt y una salt

De Recursos Educativos
Ir a la navegación Ir a la búsqueda

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}"