elgio
(usa OpenSuSE)
Enviado em 26/01/2009 - 14:04h
virtualboy: infelizmente sua observação acima não é mais verdade. Sem salt numbers (SEM SALT NUMBERS!!!), praticamente qualquer senha de até 8 caracteres pode ser quebrada em sites da Internet que usam a técnica de Raibown tables. Ao invés de sair tentando descobrir qual a palavra cujo hash é XXX, estes site já possuem um enorme banco de dados pre-compilado com todas as possíveis combinações de letras e números (isto leva tempo, mas os sites estão processando a anos e dizem que já tem tabelas completas até 8 cars, independente da mistura de números e letras).
O uso do salt number simplesmente BOICOTA o uso desta técnica, pois para a mesma palavra "teste" existem milhões de hashes diferentes e não teria como os sites compilarem todas. De qualquer maneira, vale a máxima de que para senhas fáceis, não importa o método, a senha é FRACA.
Respondendo a outra pergunta, sobre como lidar com salt numbers, vamos a um exemplo.
Pedro é um usuário legítimo e vai criar sua senha pela primeira vez. O sistema armazena os dados de um usuário em um arquivo simples, com campos serarados por dois pontos (o que acarreta que dois pontos não pode ser um car válido para salt).
a) Pedro cadastra sua senha.
O login de Pedro é pedro e ele digita sua senha para ser cadastrada (estou usando o md5sum do shell, pois assim qualquer um pode seguir estes passos)
senha: Ab#k,l56 (pedro é um usuário consciênte e gera senhas difíceis!)
O sistema sortei um salt absolutamente aleatório para pedro: 89Jkjm,jjY8j
E o método de geração do hash é bastante simples: md5("salt""senha") (ambos concatenados)
$ echo "89Jkjm,jjY8jAb#k,l56"|md5sum
e1cd6a07671f4ec720ec02387ddbce90
O sistema armazena no arquivo o login, o salt e o hash:
pedro:89Jkjm,jjY8j:e1cd6a07671f4ec720ec02387ddbce90
Senha gerada e hash armazenado.
b) Pedro tenta logar-se
login: pedro
senha: Ab#k,l56 (ele acerta a senha)
O sistema ve no arquivo a linha correspondente ao pedro e obtem o salt: 89Jkjm,jjY8j
O sistema recalcula o hash com o salt armazenado e a SUPOSTA senha correta de pedro:
$ echo "89Jkjm,jjY8jAb#k,l56"|md5sum
Se o hash md5 calculado for IGUAL ao armazenado, pedro acertou a senha, caso contrário ele erro.
Este método de hash+salt é ótimo porque a senha nunca é armazenada. Se a senha de pedro for boa e o número de cars de salt satisfatório, NÃO TEM COMO DESCOBRIR a senha de pedro. Nem mesmo o root/admin (ele pode sobrescrever a senha a qualquer momento, mas não descobrir ela).