¿Por qué las contraseñas md5 tienen un hash diferente?

22

Me he estado preguntando por un tiempo, ¿por qué ejecutar "echo 'helloworld' | openssl passwd -1 -stdin" produce resultados diferentes cada vez? Si pongo alguno de los hashes en mi / etc / shadow, puedo usarlos como mi contraseña e inicio de sesión en mi sistema, ¿cómo funciona?

computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$xlm86SKN$vzF1zs3vfjC9zRVI15zFl1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$/0.20NIp$pd4X9xTZ6sF8ExEGqAXb9/
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$sZ65uxPA$pENwlL.5a.RNVZITN/zNJ1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$zBFQ0d3Z$SibkYmuJvbmm8O8cNeGMx1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$PfDyDWER$tWaoTYym8zy38P2ElwoBe/

Creo que debido a que utilizo este hash para describir al sistema cuál debería ser mi contraseña, debería obtener los mismos resultados cada vez. ¿Por qué yo no?

Peter
fuente
3
Si fueran iguales cada vez, un atacante podría simplemente extraer miles de millones de contraseñas comunes y verificarlas fácilmente.
David Schwartz

Respuestas:

37

Todos tienen una sal diferente . Se elige una sal única cada vez, ya que las sales nunca deben reutilizarse. El uso de una sal única para cada contraseña los hace resistentes a los ataques de la mesa arcoiris .

Michael Hampton
fuente
66
Puede ser una buena idea mencionar que la salida incluye la sal después de $ 1 $ (los símbolos de dólar son separadores).
meter
66
Entonces, ¿en el hash de '$ 1 $ xlm86SKN $ vzF1zs3vfjC9zRVI15zFl1' xlm86SKN es la sal y vzF1zs3vfjC9zRVI15zFl1 es el hash del mundo salado?
Peter
2
@Peter: exactamente.
Joachim Sauer
3

De hecho, si proporciona la sal a la línea de comando, siempre obtendrá el mismo resultado.

$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
danidemi
fuente