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.