Pergunta

A minha primeira pergunta é, eu já ouvi isso de hash as cordas 2 vezes (por exemplo, sha1 (sha1 (password))), porque o segundo de hash tem um comprimento fixo, é verdade ??

A minha segunda pergunta é, o que é mais seguro? (Var1 e var2 são 2 cordas):

  1. sha1 (var1 + sha1 (var2))
  2. sha1 (var1 + var2)

Se for a 1ª, vale a pena o custo de desempenho?

Foi útil?

Solução

Por hash a corda duas vezes, você está aumentando o risco de colisões, o que é ruim em termos de segurança.

Em vez de ter uma quantidade infinita de entradas que levam a 2 128 possíveis saídas, você terá 2 128 possíveis entradas principais para talvez menos de 2 128 saídas.

Usando sal e pimenta antes de hashing pelo menos mantém a entrada para infinitas possibilidades. Hash aumenta o dobro do tempo de execução do seu script, e aumenta o risco de colisões, a menos que você manter a fonte de entrada infinita.

Outras dicas

  • sha1 (var1 + sha1 (var2))
  • sha1 (var1 + var2)

Nem é muito seguro. Não reinventar a roda. HMAC foi projetado para isso; em particular, é preciso etapas (estofamento, etc) para evitar problemas com certas deficiências em determinados algoritmos de hash que interagem mal com as implementações acima 'simples'.

Além disso, double hashing não é útil para melhorar a segurança. Considere o seguinte: na melhor das hipóteses, você vai mapear a partir de um valor aleatório-ish para outro valor aleatório-ish. No entanto, se houver uma colisão de dois valores resultantes da segunda haxixe são iguais, você tem perdeu segurança, terminando com uma colisão. Ou seja, você nunca pode se livrar de uma colisão desta maneira, mas você pode ganhar um.

Dito isto, ataques preimage existente pode não trabalho contra a dupla hashing ... mas! Eles ainda poderia funcionar. Eu não estou qualificado para dizer que, e se você está perguntando isso aqui, você provavelmente não é qualquer um. Certamente ataques de colisão, que são tudo o que são práticos com MD5, hoje, não são prejudicadas pela dupla hashing.

É melhor ficar com os algoritmos comprovados que têm resistido até décadas de análise, porque com criptografia, é tudo muito fácil de fazer algo que aparência seguro, mas não é.

Eu duvido que isso acrescentaria qualquer segurança a ele. Que iria aumentar o tempo de execução do seu script, mas não gostaria de acrescentar um monte de segurança para o hash. Lembre-se que quando alguém tenta quebrar seu haxixe, eles não precisam de encontrar o valor exato de var1 e var2, eles só precisam de encontrar um que resulta no mesmo hash.

Não sou especialista em criptografia, mas, tanto quanto eu sei que você vai ganhar nenhuma segurança de hash um valor várias vezes, além de retardar o processo. Então, se você botar 1000 vezes, você vai fazer um ataque (por exemplo, um ataque de dicionário) 1000 vezes mais lento, mas isso é irrelevante no caso de hashing uma ou duas vezes.

Usando apenas um e sem sal permite que ele seja facilmente resolvido.

Há muitos grandes tabelas que contêm toneladas desses hashes portanto, um único hash com sem sal pode ser resolvido em quase nada.

Adicionando em um segundo hash não vai ajudar muito também porque mais uma vez essas tabelas já existe com os valores salvos.

Um sal dinâmica que é adicionado à senha vai ajudar muito mais, em seguida, vários hashes. Múltiplas hashes realmente não acrescentar muito a ele.

Meu sentimento sobre isso é que você está construindo uma parede de tijolos com uma porta de aço, mas as outras paredes são feitas de madeira compensada. Em outras palavras, você pode injetar tanta segurança quanto você quer para as senhas hash, mas ainda vão ser maneiras muito mais fácil para quebrar seu sistema. Eu acho que é muito melhor para tomar uma abordagem ampla para a segurança, em vez de se preocupar muito com coisas como esta.

é var1 + var2 vai ser o mesmo em uma situação de espera? Quer dizer, a primeira proposição deve ser ok, nesse caso, por que você iria evitar hashing colisão. Sobre ser vale o custo, isso é uma pergunta que você deve responder. É evitar uma pena de colisão o custo.

Sobre o algoritmo SHA, é suposto que realmente embaralhar os resultados. Portanto, aplicando-o muitas vezes não deve ter melhores resultados, nem aplicá-la a uma entrada "mais aleatória" deve resultar em melhores resultados.

Hash uma string várias vezes vai complicar a tarefa do atacante em caso de um ataque de dicionário, tornando-se "muito mais tempo" para a força bruta. Sua primeira pergunta não é clara, mas vários hashes não são menos seguras porque o segundo de hash tem um comprimento fixo.

Mas mais importante do que um hash múltipla, o uso de um sal é essencial para uma melhor segurança.

No que diz respeito à sua segunda pergunta, eu diria que não é muito simples de dizer qual dos dois é o mais seguro, acho que vai com a opção 2 é realmente suficiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top