Como o salt da senha ajuda contra um ataque de tabela do arco-íris?

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 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 para 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 então 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 armazenadascom o sal. Por exemplo, um salt de "foo" e a senha de "bar" seriam hash para isso:Eu já vi muitos tutoriais sugerindo que o sal seja usado da seguinte maneira:foo$te5SBM.7C25fFDu6bIRbX1. Se um hacker conseguiu, de alguma forma, colocar as mãos nesse arquivo, não vejo a que finalidade serve o sal, já que o hash reverso dete5SBM.7C25fFDu6bIRbX é conhecido por conter "foo".

Obrigado por qualquer luz que alguém possa lançar sobre isso.

EDITAR: 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 do arco-íris existia para TODOS os hashes.

questionAnswers(10)

yourAnswerToTheQuestion