¿Cómo se generan los hashes en /etc/shadow?

¿Cómo se generan los hashes en /etc/shadow?

estaba leyendo elArtículo de Wikipediaen el archivo de sombra y mencionó que el formato de las líneas es así:

$id$salt$hashed

Entonces mi pregunta es ¿cómo funciona?

Intenté calcular el hash de mi propia cuenta de la que tenía la contraseña, así que utilicé este comando:

sha512sum {sal}+{my_clear_text_password}

Pero el resultado es diferente del hash que veo por mí mismo. ¿Entonces, cómo funciona? ¿Qué me estoy perdiendo?

Respuesta1

Un par de cosas en las que pensar (tendrás que leer las fuentes en Linux coreutils y glibc2 para confirmar)

  • La salida de sha512sum parece ser una notación hexadecimal imprimible, mientras que la salida almacenada en el archivo oculto parece ser base64, por lo que serán diferentes.

  • Creo que el sha512sum en el archivo oculto se ha pasado a través de la función hash más de una vez ( #define ROUNDS_DEFAULT 5000), mientras que el sha512sum simplemente pasa el 'archivo' a través del hash una vez.

  • Es posible que uno o ambos comandos agreguen relleno para alinear los datos; puede que sean diferentes.

Respuesta2

Si desea crear el hash de la misma manera que /etc/shadowlo almacena el archivo, use el siguiente comando:

mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD

Respuesta3

Desde elshadow(5)página de manual:

contraseña cifrada

Referirse acripta(3) para obtener detalles sobre cómo se interpreta esta cadena.

Si el campo de contraseña contiene alguna cadena que no es un resultado válido decripta(3), por ejemplo ! o *, el usuario no podrá utilizar una contraseña de Unix para iniciar sesión (pero el usuario podrá iniciar sesión en el sistema por otros medios).

Este campo puede estar vacío, en cuyo caso no se requieren contraseñas para autenticarse con el nombre de inicio de sesión especificado. Sin embargo, algunas aplicaciones que leen el archivo /etc/shadow pueden decidir no permitir ningún acceso si el campo de contraseña está vacío.

Un campo de contraseña que comienza con un signo de exclamación significa que la contraseña está bloqueada. Los caracteres restantes en la línea representan el campo de contraseña antes de que se bloqueara la contraseña.

Desde elcrypt(3)página de manual:

crypt() es la función de cifrado de contraseña. Se basa en el algoritmo del estándar de cifrado de datos con variaciones destinadas (entre otras cosas) a desalentar el uso de implementaciones de hardware de búsqueda de claves.

La clave es la contraseña escrita por un usuario.

salt es una cadena de dos caracteres elegida del conjunto [a–zA–Z0–9./]. Esta cadena se utiliza para perturbar el algoritmo de una de 4096 formas diferentes.

Tomando los 7 bits más bajos de cada uno de los primeros ocho caracteres de la clave, se obtiene una clave de 56 bits. Esta clave de 56 bits se utiliza para cifrar repetidamente una cadena constante (normalmente una cadena que consta únicamente de ceros). El valor devuelto apunta a la contraseña cifrada, una serie de 13 caracteres ASCII imprimibles (los dos primeros caracteres representan la sal misma). El valor de retorno apunta a datos estáticos cuyo contenido se sobrescribe con cada llamada.

información relacionada