Estoy aprendiendo sobre la seguridad de la contraseña de Linux (más curiosidad que cualquier cosa útil), y entiendo que la contraseña real está cifrada y almacenada en el archivo de contraseña oculta. Lo que no estoy seguro, y no he podido encontrar en mi breve búsqueda en Google, es qué codificación se utiliza para codificar el valor hash (y el valor de la sal). Obviamente no es hexadecimal, y obviamente es texto, excluyendo el :
carácter. ¿Alguien puede decirme qué es esa codificación?
Editar: entiendo el hashing (MD5, SHA-X), la sal y el especificador de hashing. Lo que estoy buscando es el método de convertir los resultados hash (una matriz de bytes (byte [])) a la secuencia de caracteres que veo en el archivo, es decir: la codificación.
Respuestas:
En el caso de MD5 crypt (), la sal es solo una cadena aleatoria de hasta 8 caracteres de [a-zA-Z0-9./].
La sal y la contraseña se combinan, pasan a través de una función de fortalecimiento y luego se codifican con una variante en Base64:
fuente
Si solo desea saber cómo se codifica la contraseña, crypt () utiliza un tipo especial de codificación Base64.
La codificación Base64 utiliza el siguiente conjunto de caracteres: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
Mientras que la codificación crypt () usa este juego de caracteres: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Además, a diferencia de Base64, no hay relleno "=".
Por otro lado, las implementaciones crypt () de MD5, SHA-X, etc. hacen más que solo generar una sal aleatoria, ejecutar la función hash y codificarla usando la codificación anterior.
Recomiendo leer estas dos excelentes publicaciones: "Hashing de contraseñas con MD5-crypt en relación con MD5" e "Implementación de SHA512-crypt vs MD5-crypt" , para una explicación más completa.
fuente
La primera parte del hash entre los $ 's indica qué algoritmo se está utilizando.
Echa un vistazo a http://en.wikipedia.org/wiki/Crypt_%28Unix%29 para obtener una lista de lo que significan los diferentes valores.
fuente
¿Estás buscando el algoritmo utilizado?
Tradicionalmente, Unix y las primeras variantes de Linux usaban un DES debilitado basado en un máximo de 8 caracteres de la contraseña. La mayoría de las instalaciones modernas de Linux usan hash MD5 para las contraseñas, y algunas admiten SHA. Además, ha aparecido más soporte modular para algoritmos adicionales, incluido Blowfish. La biblioteca GNU utilizada por la mayoría de los Linux soporta DES, MD5 y SHA, ofreciéndole un par de opciones.
El tipo específico de algoritmo hash utilizado se especifica como el comienzo de la contraseña como $ DIGIT $. Por ejemplo, $ 1 $ es MD5.
Puede obtener detalles más detallados de Wikipedia (consulte la página en Crypt_ (Unix) ) o google para 'crypt unix' o 'crypt linux'.
fuente