As senhas com hash e salgadas são protegidas contra ataques de dicionário?

Eu entendo que sais fazem o mesmo hash de senha para valores diferentes. No entanto, os sais geralmente são armazenados no banco de dados com a senha. Então, digamos que eu seja atacante, aqui está como eu poderia usar um ataque de dicionário contra um sal (note que neste exemplo eu não escrevo hashes de 128 bits ou sais por questão de brevidade):

user_pw = 'blowfish'

Given:
email = '[email protected]'
hash = '1234567890'
salt = '0987654321'

function attack(){
  for each(word in dictionary)
    md5( word * salt ) == hash ? cracked_one(email, word)
}

Eu entendo isso impede que os hackers usem as tabelas do arco-íris ... mas não parece impedir ataques de dicionário. Eu acho que você poderia adicionar algo mais ao algoritmo hash, mas com segurança devemos assumir que o método de ataque é conhecido.

Assim, parece que a salga impede que os hackers descubram quais senhas são passíveis de serem senhas de dicionário (as que vários usuários têm) e evitam ataques de arco-íris ... mas não evitam ataques de dicionário.

Esta é uma análise correta? Alguma sugestão para melhor segurança?

Obrigado!

questionAnswers(5)

yourAnswerToTheQuestion