security the SHA512 vs. Blowfish e Bcrypt




salt password android (5)

Eu estou olhando para algoritmos de hash, mas não consegui encontrar uma resposta.

  • Bcrypt usa Blowfish
  • Blowfish é melhor que MD5
  • Q: mas o Blowfish é melhor que o SHA512?

Obrigado..

Atualizar:

Eu quero esclarecer que eu entendo a diferença entre hashing e criptografia. O que me levou a fazer a pergunta desta forma é este artigo , onde o autor se refere ao bcrypt como "hashing adaptativo"

Como o bcrypt é baseado no Blowfish, fui levado a pensar que o Blowfish é um algoritmo de hash. Se a criptografia como as respostas apontaram, parece-me que não deveria ter um lugar neste artigo. O pior é que ele está concluindo que o bcrypt é o melhor. O que também está me confundindo agora é que a classe phpass (usada para hashing de senha, eu acredito) usa bcrypt (isto é, blowfish, isto é, criptografia). Com base nessa nova informação que vocês estão me dizendo (blowfish é criptografia), essa classe parece errada. Estou esquecendo de algo?



Eu recomendaria a implementação de criptografia baseada em SHA-256 / SHA-512 de Ulrich Drepper.

Nós portamos estes algoritmos para Java, e você pode encontrar uma versão licenciada deles em ftp://ftp.arlut.utexas.edu/java_hashes/ .

Note que a maioria dos (L) Unices modernos suportam o algoritmo do Drepper em seus arquivos / etc / shadow.


Concordo com a resposta de erickson, com uma ressalva: para fins de autenticação de senha, o bcrypt é muito melhor do que uma única iteração do SHA-512 - simplesmente porque é muito mais lento. Se você não entender por que a lentidão é uma vantagem nesse jogo específico, leia o artigo ao qual você fez o link novamente (vá até "A velocidade é exatamente o que você não quer em uma função hash de senha ").

É claro que você pode construir um algoritmo hash de senhas seguras em torno do SHA-512, iterando-o milhares de vezes, assim como o algoritmo MD5 do PHK funciona. Ulrich Drepper fez exatamente isso , pela cripta da glibc (). Não há nenhuma razão específica para isso, se você já tiver uma implementação testada do bcrypt disponível.


Deve ser suficiente dizer se bcrypt ou SHA-512 (no contexto de um algoritmo apropriado como PBKDF2) é bom o suficiente . E a resposta é sim, ou o algoritmo é seguro o suficiente para que uma violação ocorra por meio de uma falha de implementação, não uma análise criptoanalítica.

Se você insistir em saber o que é "melhor", o SHA-512 teve revisões detalhadas pelo NIST e outros. É bom, mas foram reconhecidas falhas que, embora não sejam exploráveis ​​agora, levaram à competição SHA-3 para novos algoritmos de hash. Além disso, lembre-se de que o estudo de algoritmos de hash é "mais recente" que o de cifras, e os criptógrafos ainda estão aprendendo sobre eles.

Mesmo que o bcrypt como um todo não tenha tido tanto escrutínio quanto o próprio Blowfish, acredito que basear-se em uma cifra com uma estrutura bem compreendida lhe dá alguma segurança inerente que falta na autenticação baseada em hash. Além disso, é mais fácil usar GPUs comuns como uma ferramenta para atacar hashes baseados em SHA-2; Por causa de seus requisitos de memória, otimizar o bcrypt requer um hardware mais especializado, como FPGA com alguma RAM on-board.

Nota: bcrypt é um algoritmo que usa Blowfish internamente. Não é um algoritmo de criptografia em si. Ele é usado para obscurecer irreversivelmente as senhas, assim como as funções hash são usadas para fazer um "hash unidirecional".

Algoritmos hash criptográficos são projetados para serem impossíveis de serem revertidos. Em outras palavras, dada apenas a saída de uma função hash, deve-se "para sempre" encontrar uma mensagem que produza a mesma saída hash. De fato, deve ser computacionalmente inviável encontrar quaisquer duas mensagens que produzam o mesmo valor de hash. Ao contrário de uma cifra, as funções hash não são parametrizadas com uma chave; a mesma entrada sempre produzirá a mesma saída.

Se alguém fornecer uma senha que contenha o valor armazenado na tabela de senha, ela será autenticada. Em particular, devido à irreversibilidade da função hash, é assumido que o usuário não é um invasor que pegou o hash e o inverteu para encontrar uma senha de trabalho.

Agora considere bcrypt. Ele usa Blowfish para criptografar uma string mágica, usando uma chave "derivada" da senha. Posteriormente, quando um usuário insere uma senha, a chave é derivada novamente e, se o texto cifrado produzido pela criptografia com essa chave corresponder ao texto cifrado armazenado, o usuário será autenticado. O texto cifrado é armazenado na tabela "password", mas a chave derivada nunca é armazenada.

Para quebrar a criptografia aqui, um invasor teria que recuperar a chave do texto cifrado. Isso é chamado de ataque "plaintext conhecido", já que o ataque conhece a string mágica que foi criptografada, mas não a chave usada. O blowfish tem sido estudado extensivamente, e ainda não são conhecidos ataques que permitam que um atacante encontre a chave com um único texto simples conhecido.

Assim, da mesma forma que os algoritmos irreversíveis baseados em algoritmos, o bcrypt produz uma saída irreversível, a partir de uma senha, sal e fator de custo. Sua força reside na resistência do Blowfish a ataques de texto simples conhecidos, o que é análogo a um "primeiro ataque de pré-imagem" em um algoritmo de resumo. Como ele pode ser usado no lugar de um algoritmo hash para proteger senhas, o bcrypt é confusamente chamado de algoritmo "hash".

Assumindo que as tabelas de arco-íris foram frustradas pelo uso adequado de sal, qualquer função verdadeiramente irreversível reduz o atacante a tentativa e erro. E a taxa que o atacante pode fazer testes é determinada pela velocidade desse algoritmo "hash" irreversível. Se uma única iteração de uma função hash for usada, um invasor pode fazer milhões de tentativas por segundo usando equipamentos que custam na ordem de US $ 1.000, testando todas as senhas com até 8 caracteres em poucos meses.

Se, no entanto, a saída de resumo for "retornada" milhares de vezes, levará centenas de anos para testar o mesmo conjunto de senhas nesse hardware. O Bcrypt obtém o mesmo efeito de "fortalecimento de chave", iterando dentro de sua rotina de derivação de chaves, e um método baseado em hash apropriado como o PBKDF2 faz a mesma coisa; a este respeito, os dois métodos são semelhantes.

Assim, minha recomendação do bcrypt deriva das premissas 1) que um Baiacu teve um nível de escrutínio semelhante ao da família SHA-2 de funções hash, e 2) que os métodos criptoanalíticos para cifras são mais desenvolvidos do que aqueles para funções hash.


Blowfish não é um algoritmo de hash. É um algoritmo de criptografia. Isso significa que você pode criptografar algo usando blowfish e, mais tarde, pode descriptografá-lo em texto simples.

SHA512 é um algoritmo de hashing. Isso significa que (em teoria) uma vez que você hash a entrada você não pode obter a entrada original de volta.

São duas coisas diferentes, projetadas para serem usadas em tarefas diferentes. Não existe uma resposta "correta" para "o baiacu é melhor que o SHA512?" Você também pode perguntar "maçãs são melhores que cangurus?"

Se você quiser ler mais sobre o assunto, aqui estão alguns links:





hash