Não, o arquivo shadow não contém senhas criptografadas, não em qualquer variante Unix que eu tenha visto. Isso exigiria uma chave de criptografia em algum lugar - onde seria?
Até mesmo a versão original da % funçãocrypt
era, na verdade, uma função hash. Ele operava usando a senha como chave para uma variante do DES . A saída de crypt
é a criptografia de um bloco com todos os bits zero. Embora isso use uma função de criptografia como parte da implementação, a operação crypt
não é uma operação de criptografia, é uma função hash : uma função cujo inverso é difícil de calcular e de tal forma que é difícil encontrar dois valores produzindo a mesma saída.
Dentro de suas limitações, a implementação crypt
baseada em DES original seguiu os princípios básicos de uma boa função de hash de senha : função irreversível, com um sal , e um slow-down fator. São as limitações, não o design, que o tornam inadequado, dado o poder de computação de hoje: máximo de 8 caracteres na senha, tamanho total que o torna acessível à força bruta, sal muito curto, contagem de iteração muito curta.
Por causa do crypt
name (devido ao fato de crypt
usar criptografia internamente), e porque até recentemente poucas pessoas eram educadas em criptografia, muita documentação da função crypt
e de equivalentes em outras ambientes descreve como "criptografia de senha". Mas, na verdade, é um hash de senha e sempre foi.
Sistemas modernos usam funções hash de senhas baseadas em algoritmos mais robustos. Embora alguns desses algoritmos sejam conhecidos como “MD5”, “SHA-256” e “SHA-512”, a computação hash não é como o MD5 (password + salt), mas um hash iterado que atende ao requisito de lentidão (embora métodos comuns falta a dureza da memória que protege contra a aceleração baseada em GPU).