GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la salida de openssl passwd es diferente cada vez?

> openssl passwd -1 "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Este es el estilo Unix extendido crypt(3) sintaxis hash de contraseña, específicamente la versión MD5 de la misma.

El primer $1$ identifica el tipo de hash, la siguiente parte OKgLCmVl es la sal utilizada para cifrar la contraseña, luego después del separador $ el carácter hasta el final de la línea es el hash de la contraseña real.

Entonces, si toma la parte salt del primer cifrado y la usa con los subsiguientes, siempre debería obtener el mismo resultado:

> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/
> openssl passwd -1 -salt "OKgLCmVl" "a"
$1$OKgLCmVl$d02jECa4DXn/oXX0R.MoQ/

Cuando estás cambiando una contraseña , siempre debe cambiar a una nueva sal. Esto evita que alguien descubra después del hecho si la nueva contraseña era realmente la misma que la anterior. (Si desea evitar la reutilización de contraseñas antiguas, puede, por supuesto, codificar dos veces la nueva contraseña candidata:una vez con la antigua sal y luego, si el resultado es diferente de la contraseña anterior y, por lo tanto, aceptable, nuevamente con una nueva sal.)

Si usa openssl passwd sin opciones, obtienes el crypt(3) original -hash compatible, como lo describe dave_thompson_085. Con él, la sal son dos primeras letras del hash:

> openssl passwd "a"
imM.Fa8z1RS.k
> openssl passwd -salt "im" "a"
imM.Fa8z1RS.k

No debe usar este estilo hash antiguo en ninguna implementación nueva, ya que restringe la longitud efectiva de la contraseña a 8 caracteres y tiene muy poca sal para proteger adecuadamente contra los métodos modernos.

(Una vez calculé la cantidad de datos necesarios para almacenar un conjunto completo de tablas arcoíris para cada crypt(3) clásico picadillo. No recuerdo el resultado exacto, pero suponiendo que mis cálculos fueran correctos, era del orden de "una modesta pila de discos de varios terabytes". En mi opinión, eso lo ubica dentro del rango de "los delincuentes organizados podrían hacerlo".)


A diferencia de los hashes normales, contraseña hash debe usar 'sal' y debe ser lento (generalmente iterando) para evitar que un atacante que obtiene los hash recupere fácilmente las contraseñas. Consulte canonical en security.SX y muchos enlaces a él.

La cripta original de la década de 1970 (3), ahora llamada DEScrypt para mayor claridad, está (ligeramente) salada :

sal es una cadena de dos caracteres elegida del conjunto [a-zA-Z0-9./]. Esta cadena se usa para perturbar el algoritmo en una de 4096 formas diferentes.

El esquema MD5crypt ligeramente más nuevo está salado e iterado, pero no está a la altura de los estándares modernos. Ambos y algunos de los mejores esquemas que los han reemplazado en Unix(es) se detallan en https://en.wikipedia.org/wiki/Crypt_%28C%29 .


El usuario muru tiene razón. La contraseña está salada.

Puede agregar la opción -salt string tú mismo y el hash permanece igual.

$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142
$ openssl passwd -salt "foo" "bar"
foXrpAKGo3142

Linux
  1. Administrar usuarios de Linux con el comando passwd

  2. ¿Cómo hacer que `date` genere la hora de una zona horaria diferente?

  3. Salida a Stdout y al mismo tiempo Grep en un archivo?

  4. ¿Por qué Grep -o -w no me da la salida esperada en Mac Os X?

  5. Pasar el Hash con Escritorio Remoto

Por qué ahora es el mejor momento para usar GNOME

¿Por qué la salida de `du` a menudo es tan diferente de `du -b`?

¿Cómo redirigir la salida del comando de tiempo a un archivo en Linux?

¿Cuál es la longitud máxima de la contraseña en el sistema Unix/Linux?

¿Por qué la salida de algunos programas de Linux no va ni a STDOUT ni a STDERR?

¿Por qué la contraseña 'sudo' es diferente a la contraseña 'su root'?