Estou aprendendo sobre segurança de senha do Linux (mais curiosidade do que qualquer coisa útil) e entendo que a senha real é hash e armazenada no arquivo de senhas shadow. O que não tenho certeza, e não consegui encontrar no meu breve Google, é a codificação usada para codificar o valor do hash (e o valor do sal). Obviamente, não é hexadecimal, e é obviamente texto, excluindo o :
caractere. Alguém aqui pode me dizer o que é essa codificação?
Edit: Eu entendo o hash (MD5, SHA-X), o salt e o especificador de hash. O que estou procurando é o método de converter os resultados de hash (uma matriz de bytes (byte [])) para a sequência de caracteres que vejo no arquivo, ou seja: a codificação.
Respostas:
No caso do MD5 crypt (), o salt é apenas uma sequência aleatória de até 8 caracteres entre [a-zA-Z0-9./].
O salt e a senha são agrupados, passados por uma função de fortalecimento e codificados usando uma variante no Base64:
fonte
Se você deseja apenas saber como a senha é codificada, o crypt () usa uma codificação tipo Base64 especial.
A codificação Base64 usa o seguinte conjunto de caracteres: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Enquanto a codificação crypt () usa esse conjunto de caracteres: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Além disso, ao contrário do Base64, não há preenchimento "=".
Por outro lado, as implementações crypt () do MD5, SHA-X, etc, fazem mais do que apenas gerar um sal aleatório, executar a função hash e codificá-la usando a codificação anterior.
Eu recomendo a leitura dessas duas excelentes postagens: "Hash de senha com MD5-crypt em relação ao MD5" e "Implementação de SHA512-crypt vs MD5-crypt" , para obter uma explicação mais completa.
fonte
A primeira parte do hash entre os $ 'indica qual algoritmo está sendo usado.
Confira http://en.wikipedia.org/wiki/Crypt_%28Unix%29 para obter uma lista do que significam os diferentes valores.
fonte
Você está procurando o algoritmo usado?
Tradicionalmente, as versões Unix e Linux anteriores usavam um DES enfraquecido com base no máximo de 8 caracteres da senha. A maioria das instalações modernas do Linux usa hashes MD5 para as senhas, e algumas suportam SHA. Além disso, apareceu um suporte mais modular para algoritmos adicionais, incluindo o Blowfish. O GNU libc usado pela maioria dos Linux suporta DES, MD5 e SHA, oferecendo algumas opções.
O tipo específico de algoritmo de hash usado é especificado como o início da senha como $ DIGIT $. Por exemplo, $ 1 $ é MD5.
Você pode obter detalhes mais detalhados da Wikipedia (consulte a página em Crypt_ (Unix) ) ou do google para 'crypt unix' ou 'crypt linux'.
fonte