Eu li algumas vezes que, ao armazenar senhas, é uma boa prática 'duplicar hash' as strings (por exemplo, com md5 e sha1, ambos com sais, obviamente).
Acho que a primeira pergunta é: "isso está realmente correto?" Caso contrário, descarte o restante desta pergunta :)
A razão pela qual pergunto é que, diante disso, eu diria que isso faz sentido. No entanto, quando penso sobre isso, toda vez que um hash é revisado (possivelmente com algo a mais) tudo o que posso ver é que há uma redução no limite superior da 'singularidade' final ... esse limite está relacionado a a entrada inicial.
Deixe-me colocar de outra maneira: temos x número de strings que, quando hash, são reduzidos a y strings possíveis. Ou seja, há colisões no primeiro conjunto. Agora, vindo do segundo conjunto para o terceiro, não é possível que ocorra a mesma coisa (ou seja, colisões no conjunto de todas as possíveis seqüências de caracteres 'y' que resultam no mesmo hash no terceiro conjunto)?
Na minha cabeça, tudo o que vejo é um 'funil' para cada chamada de função hash, 'canalizando' um conjunto infinito de possibilidades para um conjunto finito e assim por diante, mas obviamente cada chamada está trabalhando no conjunto finito anterior a ela, dando-nos uma configure não maior que a entrada.
Talvez um exemplo explique minhas divagações? Pegue 'hash_function_a' que fornecerá 'a' e 'b' o hash '1' e dará 'c' e 'd' o hash '2'. Usando esta função para armazenar senhas, mesmo que a senha seja 'a', eu poderia usar a senha 'b'.
Pegue 'hash_function_b' que fornecerá '1' e '2' o hash '3'. Se eu fosse usá- lo como um 'hash secundário' após 'hash_function_a', mesmo se a senha for 'a' eu poderia usar 'b', 'c' ou 'd'.
Além disso, entendo que os sais devem ser usados, mas eles realmente não mudam o fato de que cada vez que mapeamos entradas 'x' para saídas 'menores que x'. Eu não acho.
Alguém por favor pode me explicar o que estou perdendo aqui?
Obrigado!
EDIT: para o que vale a pena, eu não faço isso sozinho, uso bcrypt. E não estou realmente preocupado em saber se é útil ou não usar 'ciclos' para um 'hacker'. Eu realmente estou apenas pensando se o processo reduz ou não a 'segurança' do ponto de vista da colisão de hash.
MD5(password)
. Dissemos que não é seguro, então eles sugeriram o uso MD5(MD5(password))
...