Estou analisando algoritmos de hash, mas não consegui encontrar uma resposta.
- Bcrypt usa Blowfish
- Blowfish é melhor que MD5
- P: mas o Blowfish é melhor que o SHA512?
Obrigado..
Atualizar:
Quero esclarecer que entendo a diferença entre hash e criptografia. O que me levou a fazer a pergunta dessa maneira é este artigo , em que o autor se refere a bcrypt como "hash adaptável"
Como o bcrypt é baseado no Blowfish, fui levado a pensar que o Blowfish é um algoritmo de hash. Se é criptografia como as respostas indicaram, 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 hash de senha, acredito) usa bcrypt (por exemplo, blowfish, ou seja, criptografia). Com base nessa nova informação que vocês estão me dizendo (blowfish é criptografia), essa classe parece errada. Estou esquecendo de algo?
fonte
bcrypt
simplesmente possui um "fator de trabalho" mais alto por padrão. Presume-se que SHA não ... a menos que você use passhash9, que pode ser usado junto com um fator de trabalho. por que esta pergunta está fechada? está longe de ser respondido, mas é muito importante.Respostas:
Basta dizer se o bcrypt ou o SHA-512 (no contexto de um algoritmo apropriado como PBKDF2) é bom o suficiente . E a resposta é sim, qualquer um dos algoritmos é seguro o suficiente para que uma violação ocorra através de uma falha na implementação, não na análise de criptografia.
Se você insistir em saber o que é "melhor", o SHA-512 recebeu análises detalhadas do NIST e de outros. É bom, mas foram reconhecidas falhas que, embora não sejam exploráveis agora, levaram à competição SHA-3 por novos algoritmos de hash. Além disso, lembre-se de que o estudo dos algoritmos de hash é "mais novo" que o das cifras, e os criptografadores ainda estão aprendendo sobre eles.
Embora 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 fornece segurança inerente à qual falta a 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, a otimização do bcrypt requer hardware mais especializado, como FPGA, com alguma memória RAM integrada.
Nota: bcrypt é um algoritmo que usa o Blowfish internamente. Não é um algoritmo de criptografia propriamente dito. É usado para ocultar irreversivelmente senhas, assim como as funções de hash são usadas para fazer um "hash de mão única".
Os algoritmos de hash criptográfico são projetados para serem impossíveis de reverter. Em outras palavras, dada apenas a saída de uma função de hash, deve demorar "para sempre" para encontrar uma mensagem que produza a mesma saída de hash. De fato, deve ser inviável computacionalmente encontrar duas mensagens que produzam o mesmo valor de hash. Ao contrário de uma cifra, as funções de 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 faça hash no valor armazenado na tabela de senhas, elas serão autenticadas. Em particular, devido à irreversibilidade da função hash, supõe-se que o usuário não seja um invasor que pegou o hash e o reverteu para encontrar uma senha de trabalho.
Agora considere bcrypt. Ele usa o Blowfish para criptografar uma string mágica, usando uma chave "derivada" da senha. Mais tarde, quando um usuário digita 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 "senha", mas a chave derivada nunca é armazenada.
Para quebrar a criptografia aqui, um invasor precisaria recuperar a chave do texto cifrado. Isso é chamado de ataque "texto sem formatação conhecido", pois o ataque conhece a sequência mágica que foi criptografada, mas não a chave usada. Blowfish foi estudado extensivamente, e ainda não são conhecidos ataques que permitiriam a um invasor encontrar a chave com um único texto simples conhecido.
Assim, assim como algoritmos irreversíveis com base em resumos criptográficos, o bcrypt produz uma saída irreversível, a partir de uma senha, sal e fator de custo. Sua força está 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 de hash para proteger senhas, o bcrypt é confundidamente referido como o próprio algoritmo "hash".
Supondo que as tabelas do arco-íris tenham sido frustradas pelo uso adequado de sal, qualquer função verdadeiramente irreversível reduz o invasor à tentativa e erro. E a taxa que o invasor pode fazer testes é determinada pela velocidade desse algoritmo irreversível de "hash". Se uma única iteração de uma função hash for usada, um invasor poderá fazer milhões de testes por segundo usando equipamentos que custam cerca de US $ 1000, testando todas as senhas com até 8 caracteres em poucos meses.
Se, no entanto, a digestão for "realimentada" 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 chave, e um método baseado em hash adequado como PBKDF2 faz a mesma coisa; a este respeito, os dois métodos são semelhantes.
Portanto, minha recomendação de bcrypt decorre das suposições 1) de que um Blowfish teve um nível de escrutínio semelhante ao da família de funções hash SHA-2 e 2) que métodos criptoanalíticos para cifras são melhor desenvolvidos do que aqueles para funções hash.
fonte
Concordo com a resposta de Erickson, com uma ressalva: para fins de autenticação de senha, o bcrypt é muito melhor 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 em particular, leia o artigo ao qual você vinculou novamente (role para baixo até " Velocidade é exatamente o que você não quer em uma função de hash de senha ").
É claro que você pode criar um algoritmo de hash de senha seguro em torno do SHA-512 iterando-o milhares de vezes, exatamente como o algoritmo MD5 do PHK funciona. Ulrich Drepper fez exatamente isso , para a cripta da glibc (). Porém, não há nenhuma razão específica para fazer isso, se você já tiver uma implementação de bcrypt testada disponível.
fonte
crypt
implementações (inclusive no PHP que eu uso), quando li a pergunta original, até assumi que era o que o OP queria dizer quando perguntou sobre o SHA-512 - que ele estava realmente se referindo a milhares de rodadas de SHA-512 vs bcrypt, que usa centenas ou milhares de iterações.Blowfish não é um algoritmo de hash. É um algoritmo de criptografia. O que isso significa é que você pode criptografar algo usando blowfish e, posteriormente, descriptografá-lo novamente em texto sem formatação.
SHA512 é um algoritmo de hash. Isso significa que (em teoria), uma vez que você hash a entrada, você não poderá obter a entrada original novamente.
São duas coisas diferentes, projetadas para serem usadas em tarefas diferentes. Não existe uma resposta 'correta' para "o blowfish é 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:
fonte
bcrypt
), ele é usado como um algoritmo de hash derivando uma chave da string de origem e usando-a para criptografar um número mágico. Isso o torna irreversível, essencialmente uma função de hash. Você não pode calcular a chave a partir de uma cifra, mesmo que conheça o texto sem formatação e os dados criptografados.Blowfish não é melhor que MD5 ou SHA512, pois eles servem a propósitos diferentes. MD5 e SHA512 são algoritmos de hash, o Blowfish é um algoritmo de criptografia. Duas funções criptográficas completamente diferentes.
fonte
Eu recomendaria a implementação de criptografia baseada em SHA-256 / SHA-512 de Ulrich Drepper.
Nós portamos esses algoritmos para Java, e você pode encontrar uma versão licenciada deles em ftp://ftp.arlut.utexas.edu/java_hashes/ .
Observe que a maioria dos Unices (L) modernos suporta o algoritmo do Drepper em seus arquivos / etc / shadow.
fonte
Eu me deparei com isso:
http://codahale.com/how-to-safely-store-a-password/
O autor deste artigo pode estar errado?
fonte