ATUALIZAÇÃO: Recentemente, aprendi com esta pergunta que em toda a discussão abaixo, eu (e tenho certeza que outros também fizeram) fiquei um pouco confuso: O que eu continuo chamando de tabela de arco-íris, na verdade é chamado de tabela de hash. As tabelas de arco-íris são criaturas mais complexas e, na verdade, são uma variante de Hellman Hash Chains. Embora eu acredite que a resposta ainda seja a mesma (uma vez que não se resume à criptoanálise), parte da discussão pode ser um pouco distorcida.
A pergunta: " O que são tabelas arco-íris e como são usadas? "
Normalmente, eu sempre recomendo usar um valor aleatório criptograficamente forte como sal, para ser usado com funções hash (por exemplo, para senhas), como para proteção contra ataques de Rainbow Table.
Mas é realmente criptograficamente necessário que o sal seja aleatório? Qualquer valor exclusivo (exclusivo por usuário, por exemplo, userId) seria suficiente a esse respeito? Na verdade, impediria o uso de uma única tabela do arco-íris para quebrar todas (ou a maioria) das senhas no sistema ...
Mas a falta de entropia realmente enfraquece a força criptográfica das funções hash?
Observe, não estou perguntando sobre por que usar o salt, como protegê-lo (não precisa ser), usando um único hash constante (não) ou que tipo de função hash usar.
Apenas se o sal precisa de entropia ou não.
Obrigado a todos pelas respostas até agora, mas gostaria de me concentrar nas áreas com as quais estou (um pouco) menos familiarizado. Principalmente implicações para a criptoanálise - eu apreciaria muito se alguém tivesse alguma entrada do PoV criptomatemático.
Além disso, se houver vetores adicionais que não foram considerados, essa é uma ótima entrada também (consulte @Dave Sherohman point em vários sistemas).
Além disso, se você tiver alguma teoria, ideia ou prática recomendada - faça o backup com provas, cenário de ataque ou evidências empíricas. Ou mesmo considerações válidas para compensações aceitáveis ... Estou familiarizado com as Melhores Práticas (B maiúsculo P) sobre o assunto, gostaria de provar que valor isso realmente fornece.
EDIT: Algumas respostas muito boas aqui, mas acho que como @Dave diz, tudo se resume a Rainbow Tables para nomes de usuário comuns ... e possíveis nomes menos comuns também. No entanto, e se meus nomes de usuário forem globalmente exclusivos? Não necessariamente exclusivo para meu sistema, mas para cada usuário - por exemplo, endereço de e-mail.
Não haveria incentivo para construir um RT para um único usuário (como @Dave enfatizou, o salt não é mantido em segredo), e isso ainda impediria o agrupamento. O único problema seria que eu poderia ter o mesmo e-mail e senha em um site diferente - mas o sal não iria impedir isso de qualquer maneira.
Então, tudo se resume à criptoanálise - a entropia é necessária ou não? (Meu pensamento atual é que não é necessário do ponto de vista da criptoanálise, mas é por outras razões práticas.)