Você sabe como são armazenadas as senhas no Linux? O que é e para que serve o salt number? O que é MD5? Este artigo não pretende ir muito a fundo no mundo da criptografia, mas sim explicar os conceitos necessários para entender o arquivo de senhas, os reais ataques. Quem programa para a WEB poderá achar este artigo além de curioso, muito útil!
Enfim, depois desta teoria para explicar o porque das coisas, vamos a como HOJE o Linux armazena senhas e o porque deste método.
O Linux ainda aceita hashes no formato DES (veja minhas referências no final do artigo), além do MD5 e SHA1. O formato DES é facilmente identificado. Exemplo de um hash DES:
Hash DES da palavra teste: rtyBls.8pJAuo
No caso do DES, sempre os primeiros dois cars são o salt number. Claro, se o salt number é gerado aleatoriamente ele precisa ser armazenado. O restante é o hash de teste com o salt number "rt". No exemplo rtyBls.8pJAuo tem-se:
rt = salt number
yBls.8pJAuo = hash gerado
Os hashes MD5 e posteriores começam com $. A presença de $ indica que não é DES. Um $1$ no início do hash indica ser MD5 enquanto um $2$ indica ser SHA1 (dá um cat no teu /etc/shadow agora e veja).
Após o $1$ ou $2$ vem o salt number até o próximo $. Depois vem o HASH propriamente dito em formato base64.
Exemplo para a palavra teste:
$1$F1CsIATU$HUmNHU5PSCRmRA.EYHYy0.
$1$ = MD5
F1CsIATU = salt number usado
HUmNHU5PSCRmRA.EYHYy0. = hash da palavra teste com o salt number.
Na hora de gerar o hash MD5 o Linux faz centenas de vezes o processo. O Hash é calculado recursivamente várias e várias vezes, usando hora o salt number, hora a senha, ora algum outro hash. Realizar o MD5 centenas ou mesmo milhares de vezes não o torna mais forte, mas sim o torna MAIS LENTO!
Sim, mais lento. Se eu desacelerar o processo em centenas de vezes significa tornar mais lento uma força bruta também centena de vezes.
Então, quando a senha é cadastrada o sistema gera um salt number, calcula o hash da senha com o salt number, armazena salt + hash e ESQUECE a senha.
Para verificar, o usuário digita a senha, o Sistema Operacional lê o salt number e recalcula o HASH. Se bater ele acertou a senha. Simples e brilhante.
[1] Comentário enviado por leandrorocker em 08/02/2008 - 10:26h
Legal o artigo, meu TCC quando me formei em ciência da computação foi um estudo sobre hashes, fiz um programa pra quebrá-los (md5,sha1,sha224,sha256,sha384 e sha512) e apresentei os resultados é uma área interessantíssima e como sempre tem o dedo do Ronald Rivest no meio, o cara é um gênio.
[2] Comentário enviado por tenchi em 08/02/2008 - 11:17h
Cara, simplesmente demais. Imagino quantos milhares de computadores deve ter um destes esteriótipos de hackers de filmes americanos que conseguem quebrar a criptografia de qualquer servidor do governo... hauahua
São artigos assim que fazem do VOL o site que é.
[4] Comentário enviado por kabalido em 08/02/2008 - 11:42h
Cara,
Sem palavras! O artigo foi mais que sensacional.
Li seu artigo e gostei muito mesmo.
Esse tipo de artigo é aquele que dá prazer de ler.
Parabéns e "Viva o Linux".
[5] Comentário enviado por kalib em 08/02/2008 - 17:06h
Parece até brincadeira mas ainda é bastante comum encontrar sites diversos que armazenam suas szenhas em arquivos, bancos de dados ou mesmo no próprio código da página toscamente implantados em java script por exemplo...Infelizmente ainda é comum encontrar este tipo de ingenuidade na internet...
Excelente o seu artigo Elgio, digno de destaque aqui no vol bem como suas demais contribuições.
[6] Comentário enviado por borgetha em 08/02/2008 - 19:35h
No FreeBSD, antigamente (anos 90 - não sei se ainda é assim), o sistema liberava login e senha, caso o usuário errasse a senha, o sistema esperava 1 segundo e liberava o login novamente. Então se o usuário errasse novamente a senha, o sistema esperava 2 segundos para liberar de novo o login, e a cada erro o tempo dobrava. Era uma forma interessante de se evitar ataques de força bruta, pois o tempo de espera começa a ficar looooongo rapidamente. Claro que só funciona para quem não está logado e nem conhece o hash.
[8] Comentário enviado por removido em 09/02/2008 - 09:44h
Muito bom o artigo. Geralmente não leio um artigo todo, somente as partes mais interessantes (é uma forma de adquirir apenas as partes importantes e poupar tempo!), mas esse li todo e com prazer. Digno de figurar entre os melhores artigos destas revistas famosas que falam de informática.
... e ainda existe quem coloque a senha 0123456789!
[16] Comentário enviado por removido em 19/05/2009 - 18:04h
Artigo excelente, bem claro para um assunto muitas vezes complicado.
Um paper interessante de cientistas chineses mostra exemplos de colisão em funções de hash MD4, MD5, HAVAL-128 e RIPEMD: http://eprint.iacr.org/2004/199.pdf
[24] Comentário enviado por hmacedo em 24/11/2011 - 10:52h
Elgio, o seu "Hash by Elgio" é utilizado no cálculo de checksum das mensagens trocadas através do protocolo FIX. Praticamente todas as bolsas de valores mundiais utilizam esta técnica. Já não é tão ruim assim hehehehe