Como Johannes Gorset apontou, a postagem de Thomas Ptacek, da Matasano Security, explica por que funções simples de hash de uso geral, como MD5, SHA1, SHA256 e SHA512, são más escolhas de hash de senha .
Por quê? Eles são muito rápidos - você pode calcular pelo menos 1.000.000 de hashes MD5 por segundo por núcleo em um computador moderno, para que a força bruta seja possível contra a maioria das senhas que as pessoas usam. E isso é muito menos do que um cluster de servidores de cracking baseado em GPU!
Salgar sem esticar a chave significa apenas que você não pode pré-calcular a tabela do arco-íris; é necessário construí-la ad hoc para esse sal específico. Mas isso não tornará as coisas muito mais difíceis.
O usuário @Will diz:
Todo mundo está falando sobre isso como se eles pudessem ser invadidos pela Internet. Como já foi dito, limitar as tentativas torna impossível quebrar uma senha pela Internet e não tem nada a ver com o hash.
Eles não precisam. Aparentemente, no caso do LinkedIn, eles usaram a vulnerabilidade de injeção SQL comum para obter a tabela do banco de dados de login e quebraram milhões de senhas offline.
Depois, ele volta ao cenário de ataque offline:
A segurança realmente entra em jogo quando todo o banco de dados é comprometido e um hacker pode executar 100 milhões de tentativas de senha por segundo no hash md5. O SHA512 é cerca de 10.000 vezes mais lento.
Não, o SHA512 não é 10000 vezes mais lento que o MD5 - leva apenas o dobro. O Crypt / SHA512 , por outro lado, é uma fera muito diferente que, como sua contraparte do BCrypt, executa um alongamento de chave , produzindo um hash muito diferente com um sal aleatório incorporado e levará algo entre 500 e 999999 vezes mais para calcular (o alongamento é ajustável).
SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Portanto, a opção para PHP é Crypt / Blowfish (BCrypt), Crypt / SHA256 ou Crypt / SHA512. Ou pelo menos Crypt / MD5 (PHK). Veja www.php.net/manual/en/function.crypt.php