Estou tendo problemas para entender o propósito de um sal em uma senha. Entendo que o uso principal é dificultar um ataque à mesa do arco-íris. No entanto, os métodos que eu vi para implementar isso não parecem realmente tornar o problema mais difícil.
Eu já vi muitos tutoriais sugerindo que o sal seja usado da seguinte maneira:
$hash = md5($salt.$password)
O raciocínio é que o hash agora mapeia não a senha original, mas uma combinação da senha e do salt. Mas diga$salt=foo
e $password=bar
e $hash=3858f62230ac3c915f300c664312c63f
. Agora, alguém com uma tabela de arco-íris poderia reverter o hash e criar a entrada "foobar". Eles poderiam tentar todas as combinações de senhas (f, fo, foo, ... oobar, obar, bar, ar, ar). Pode demorar mais alguns milissegundos para obter a senha, mas não muito mais.
O outro uso que eu vi é no meu sistema linux. Na / etc / shadow, as senhas com hash são realmente armazenadas com o salt. Por exemplo, um sal de "foo" e senha de "bar" iria botar a este: $1$foo$te5SBM.7C25fFDu6bIRbX1
. Se um hacker conseguiu, de alguma forma, colocar as mãos nesse arquivo, não vejo a que finalidade o sal serve, já que o hash reverso te5SBM.7C25fFDu6bIRbX
é conhecido por conter "foo".
Obrigado por qualquer luz que alguém possa lançar sobre isso.
EDIT : Obrigado pela ajuda. Para resumir o que eu entendo, o salt torna a senha com hash mais complexa, tornando muito menos provável a existência em uma tabela arco-íris pré-computada. O que eu entendi errado antes foi que eu estava assumindo que uma tabela arco-íris existia para TODOS os hashes.