Pergunta

Estou usando o PHP. Eu costumava usar a Função MySQL Native MySQL () para armazenar senhas. Disseram -me que a senha () não é mais segura. Qual seria o melhor método para armazenar senhas no PHP? É MD5?

Foi útil?

Solução

Resposta atualizada 2016:

O vencedor do Phc (Competição de hash de senha) foi Argon2. As senhas de hash com Argon2 são as melhores práticas a partir de 2016.

A PHC ocorreu de 2013 a 2015 como uma competição aberta-o mesmo tipo de processo que as competições do AES e SHA-3 do NIST e a maneira mais eficaz de desenvolver um padrão criptográfico. Recebemos 24 candidatos, incluindo muitos designs excelentes, e selecionamos um vencedor, Argon2, um algoritmo projetado por Alex Biryukov, Daniel Dinu e Dmitry Khovratovich, da Universidade de Luxemburgo.

Recomendamos que você use o Argon2 em vez de algoritmos legados.

o A implementação de referência está disponível no GitHub.

Resposta atualizada 2012:

A resposta original que eu dei abaixo já foi considerada uma prática recomendada. No entanto, os avanços na tecnologia de computação em hash tornaram esses esquemas vulneráveis. No futuro, os únicos esquemas de hash de senha seguros são hashes iterativos, como BCRYPT e PBKDF2. Para uma discussão completa, veja Análise de Jeff Atwood.

Resposta original 2009:

Eu recomendo primeiro precender um sal valor para sua senha, seguido por Hashing a sequência resultante com uma função de hash razoavelmente forte como SHA256. Isso protege contra o óbvio (senhas de texto simples) e o não tão óbvio (ataque usando tabelas arco-íris).

Lembre -se de que, se você armazenar senhas dessa maneira, você irá não ser capaz de recuperar a senha perdida de um usuário. Eles só poderão redefinir senhas. Isso ocorre porque você estará usando um One Way Hash. Mas essa limitação geralmente vale a troca para um sistema de armazenamento de senha mais seguro. Mesmo que o seu banco de dados esteja comprometido, as senhas do seu usuário ainda serão extremamente difíceis e provavelmente não práticas para recuperar por um invasor.

Outras dicas

Você precisa salgar a senha.

O Vbulletin faz um bom trabalho no armazenamento de senhas. md5 (md5 (senha) + sal);

Para discutir com a outra resposta, o Vbulletin faz um trabalho horrível de senhas de hash. O sal deles tem apenas 3 caracteres, aumentando apenas fracionalmente a segurança do seu aplicativo.

Verificação de saída http://www.openwall.com/phpass/ . Eles fazem um excelente trabalho ao usar um hash longo, exclusivo para cada senha e executando a senha por meio de milhares de vezes MD5. É um dos melhores sistemas de hash para PHP por aí.

Se você pode evitar armazenar a senha do usuário, essa é a sua melhor opção, IMO. Use o OpenID (como o StackOverflow) para autenticar o usuário. Ou autenticação ao vivo (http://dev.live.com/liveid/). Se você realmente precisa autenticar os usuários; Faça o que Asaph diz em sua resposta. :)

Sal e hash.

Normalmente, usamos um GUID aleatório como sal e depois SHA512 para hash.

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