Como os hashes em /etc/shadow são gerados?

Como os hashes em /etc/shadow são gerados?

eu estava lendo oArtigo da Wikipédiano arquivo shadow e mencionou que o formato das linhas é assim:

$id$salt$hashed

Então, minha pergunta é: como isso funciona?

Tentei calcular o hash da minha própria conta para a qual eu tinha a senha, então usei este comando:

sha512sum {sal}+{minha_senha_de_texto_claro}

Mas a saída é diferente do hash que vejo por mim mesmo. Então, como isso funciona? o que estou perdendo?

Responder1

Algumas coisas para pensar (você terá que ler as fontes no Linux coreutils e glibc2 para confirmar)

  • A saída de sha512sum parece ser uma notação hexadecimal imprimível, enquanto a saída armazenada no arquivo shadow parece ser base64, portanto serão diferentes.

  • Acho que o sha512sum no arquivo shadow foi passado pela função hash mais de uma vez ( #define ROUNDS_DEFAULT 5000), enquanto o sha512sum apenas passa o 'arquivo' pelo hash uma vez.

  • Pode haver preenchimento adicionado por um ou ambos os comandos para alinhar os dados, podendo ser diferente.

Responder2

Se você deseja criar o hash da mesma forma que o /etc/shadowarquivo o armazena, use o seguinte comando:

mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD

Responder3

Deshadow(5)página de manual:

senha criptografada

Referir-secripta(3) para obter detalhes sobre como esta string é interpretada.

Se o campo de senha contiver alguma string que não seja um resultado válido decripta(3), por exemplo! ou *, o usuário não poderá usar uma senha unix para efetuar login (mas o usuário poderá efetuar login no sistema por outros meios).

Este campo pode estar vazio e, nesse caso, nenhuma senha será necessária para autenticação como o nome de login especificado. Entretanto, alguns aplicativos que leem o arquivo /etc/shadow podem decidir não permitir nenhum acesso se o campo de senha estiver vazio.

Um campo de senha que começa com um ponto de exclamação significa que a senha está bloqueada. Os caracteres restantes na linha representam o campo de senha antes de a senha ser bloqueada.

Decrypt(3)página de manual:

crypt() é a função de criptografia de senha. É baseado no algoritmo Data Encryption Standard com variações destinadas (entre outras coisas) a desencorajar o uso de implementações de hardware de pesquisa de chave.

key é a senha digitada pelo usuário.

salt é uma string de dois caracteres escolhida do conjunto [a–zA–Z0–9./]. Esta string é usada para perturbar o algoritmo de uma das 4.096 maneiras diferentes.

Tomando os 7 bits mais baixos de cada um dos primeiros oito caracteres da chave, obtém-se uma chave de 56 bits. Essa chave de 56 bits é usada para criptografar repetidamente uma string constante (geralmente uma string composta apenas por zeros). O valor retornado aponta para a senha criptografada, uma série de 13 caracteres ASCII imprimíveis (os dois primeiros caracteres representam o próprio salt). O valor de retorno aponta para dados estáticos cujo conteúdo é substituído por cada chamada.

informação relacionada