Para um algoritmo de hash, é interessante ter um seed?
Deixa-me explicar melhor.
Para melhorar a segurança ou até obter outros efeitos, em algum cenário de nicho, eu penso se seria interessante semirandomizar a geração do código de hash e assim em cada execução a ordem dos elementos na tabela que é montada com esse hash deve ser diferente, mesmo que sejam os mesmos dados.
Obviamente que isso só mudaria a cada execução e não em cada instância, e principalmente em cada adição de um novo elemento. Só para deixar claro para quem não tem domínio do assunto.
Então você tem uma fórmula padrão, mais um termo que já costuma ser usado na fórmula (o seed, se é que podemos chamar assim) e ele seria determinado no início de cada execução. Poderia ser até dentre uma lista de números pré-definidos e não algo geral, assim não atrapalharia a chave ser ruim e gerar muitas colisões.
Garantindo que não é tão determinístico assim, alguns tipos de ataque podem ser minimizados. Nada relacionado com criptografia.
Não preciso dizer que este código não seria usado para persistência e nenhum hash deveria.
Mas não consigo pensar em todas as implicações disso. Qual seria a justificativa contra ou a favor? Estou pensando algo errado?
Também seria legal saber se você já fez ou viu algo assim, e a motivação.
Já que obviamente eu não tenho todo o domínio do assunto, se houver dúvidas estou disposto a esclarecer nos comentário e editar aqui.
Para ver mais:
- https://pt.stackoverflow.com/q/579619/101
- https://pt.stackoverflow.com/q/191766/101
- https://pt.stackoverflow.com/q/356435/101
- https://pt.stackoverflow.com/q/184019/101
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).