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

6

Eu estava lendo o artigo da Wikipedia no arquivo shadow e ele mencionou que o formato das linhas é como isso:

$id$salt$hashed

Então, minha pergunta é: como funciona?

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

sha512sum {salt} + {my_clear_text_password}

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

    
por Navid 18.10.2012 / 09:32

3 respostas

3

Algumas coisas em que pensar (você terá que ler as fontes nos utilitários Linux e glibc2 para confirmar)

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

  • Eu 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 que podem ser diferentes.

por 18.10.2012 / 10:31
1

Na shadow(5) man-page :

encrypted password

Refer to crypt(3) for details on how this string is interpreted.

If the password field contains some string that is not a valid result of crypt(3), for instance ! or *, the user will not be able to use a unix password to log in (but the user may log in the system by other means).

This field may be empty, in which case no passwords are required to authenticate as the specified login name. However, some applications which read the /etc/shadow file may decide not to permit any access at all if the password field is empty.

A password field which starts with a exclamation mark means that the password is locked. The remaining characters on the line represent the password field before the password was locked.

Na crypt(3) man-page :

crypt() is the password encryption function. It is based on the Data Encryption Standard algorithm with variations intended (among other things) to discourage use of hardware implementations of akey search.

key is a user's typed password.

salt is a two-character string chosen from the set [a–zA–Z0–9./]. This string is used to perturb the algorithm in one of 4096 different ways.

By taking the lowest 7 bits of each of the first eight characters of the key, a 56-bit key is obtained. This 56-bit key is used to encrypt repeatedly a constant string (usually a string consisting of all zeros). The returned value points to the encrypted password, a series of 13 printable ASCII characters (the first two characters represent the salt itself). The return value points to static data whose content is overwritten by each call.

    
por 18.10.2012 / 09:38
1

Se você quiser criar o hash da mesma maneira que o arquivo /etc/shadow armazena, use o seguinte comando:

mkpasswd --method=sha-512 --salt=YOUR_SALT PASSWORD
    
por 18.02.2016 / 00:04

Tags