Não sei qual é o algoritmo de armazenamento de senha no /etc/shadow
Linux.
Testei por meio do seguinte script via python:
import hashlib
message = b"123"
md5_hash = hashlib.md5(message).hexdigest()
sha1_hash = hashlib.sha1(message).hexdigest()
sha256_hash = hashlib.sha256(message).hexdigest()
sha384_hash = hashlib.sha384(message).hexdigest()
sha512_hash = hashlib.sha512(message).hexdigest()
print(f"MD5: {md5_hash}")
print(f"SHA-1: {sha1_hash}")
print(f"SHA-256: {sha256_hash}")
print(f"SHA-384: {sha384_hash}")
print(f"SHA-512: {sha512_hash}")
Mas não vi minha senha. Minha senha é 123.
- O shadow armazena como HASH? Se sim, devo descartar a possibilidade de obter a senha.
- Se a senha não for armazenada como hash, como posso obtê-la?
No início do Unix, não havia algoritmos de hash. Foi notado que se você criptografasse a senha (com DES, a única coisa disponível) usando uma chave fixa, ela poderia ser descriptografada. Mas se você criptografar 0 com a senha, essa operação não é facilmente reversível. O próximo problema era evitar que duas senhas produzissem a mesma forma codificada, então algo conhecido como "Salt" foi introduzido na mistura. O sal é então parte da senha codificada. Uma codificação mais compacta do que hex é usada. Essa condição durou por algum tempo.
Então, hashes criptográficos foram desenvolvidos. Muitos deles agora são utilizáveis em hashes de senha. Para distinguir entre os hashes, um prefixo é tipicamente adicionado à string codificada, como "$1$", "$6$" e "$f$". O salt ainda é usado, assim como a codificação compacta. Com um hash, o salt é hash com a senha, possivelmente por meio de várias etapas.
O que isso significa é que você não vai obter de um hash da sua senha o que você encontra em
/etc/shadow
ou/etc/passwd
. Se você quiser saber todas as variantes, você pode tentar procurar na documentação (ou mesmo na fonte) de um cracker de senha.