¿Cómo encontrar el algoritmo hash utilizado para hash contraseñas?

11

Tengo la contraseña de trabajo y puedo ver el hash (/ etc / passwd). ¿Cómo encuentro el algoritmo de hash utilizado para cambiar la contraseña, sin probar manualmente diferentes algoritmos hasta encontrar una coincidencia?

Dorin Botan
fuente
1
¿Qué variante de Unix estás usando?
Kusalananda
3
Estoy muy sorprendido de que puedas ver un hash adentro /etc/passwd. Pensé que todas las variantes de Unix / Linux se habían movido a una división con /etc/shadowaños atrás. (Sé que tales sistemas todavía apoyan en los hashes passwd, pero no conozco ningún utilidades que los ponen allí más Un sistema embebido, tal vez.?
roaima
Es OpenWrt Backfire 10.03. Los hashes todavía se almacenan /etc/passwdaquí. Sin embargo, esto no cambia el asunto de la pregunta. ¿Lo hace?
Dorin Botan
1
Solo para que conste: los BSD tienen dos archivos Berkeley DB, roaima. Todavía está dividido, pero no lo es /etc/shadowy no tienen ningún archivo con ese nombre.
JdeBP

Respuestas:

27

Esto está documentado en crypt(3)la página del manual , que puede encontrar en shadow(5)la página del manual o passwd(5)en la . Esos enlaces son apropiados para los sistemas modernos basados ​​en Linux; la descripción hay:

Si salt es una cadena de caracteres que comienza con los caracteres "$ id $" seguidos de una cadena opcionalmente terminada por "$", el resultado tiene la forma:

$id$salt$encrypted

id identifica el método de encriptación utilizado en lugar de DES y esto determina cómo se interpreta el resto de la cadena de contraseña. Se admiten los siguientes valores de id:

ID  | Method
─────────────────────────────────────────────────────────
1   | MD5
2a  | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)

Pez globo, también conocido como bcrypt, también se identifica por medio de prefijos 2, 2b, 2x, y 2y(véase la documentación del PassLib ).

Por lo tanto, si una contraseña cifrada se almacena en el formato anterior, puede encontrar el algoritmo utilizado mirando la identificación ; de lo contrario, es el cryptalgoritmo DES predeterminado (con un hash de 13 caracteres), o cryptel DES "grande" (extendido para admitir contraseñas de 128 caracteres, con hashes de hasta 178 caracteres de longitud), o DES extendido BSDI (con un _prefijo seguido de un hash de 19 caracteres).

Algunas distribuciones usan libxcrypt, que admite y documenta bastantes métodos más:

  • y: yescrypt
  • gy: gost-yescrypt
  • 7: scrypt
  • sha1: sha1crypt
  • md5: SunMD5

Otras plataformas admiten otros algoritmos, así que revise la página de cryptmanual allí. Por ejemplo, OpenBSDcrypt(3) solo es compatible con Blowfish, que se identifica con la identificación "2b".

Stephen Kitt
fuente
2
Las contraseñas basadas en DES son, por cierto, siempre de 13 caracteres y consisten en caracteres alfanuméricos, así como .y /. Los primeros 2 caracteres son la sal y los otros 11 son un valor hash (más o menos). Y es el único de los algoritmos admitidos por el cryptcual es tan débil que no puede compensarlo eligiendo una contraseña más segura.
Kasperd