67 votes

Sécurité de mot de passe : sha1, sha256 ou sha512

Après sachant que le hachage d'un mot de passe est mon choix pour faire un formulaire de connexion. Maintenant, je suis confronté à un autre problème - sha1, sha256 ou sha512?

C'est une méthode standard à l'aide de sel, je pense que je l'ai eu à partir d'un livre de référence de la mine,

# create a salt using the current timestamp
$salt = time();

# encrypt the password and salt with SHA1
$usr_password = sha1($usr_password.$salt);

mais après j'ai fait quelques recherches sur sha1, j'ai appris qu'il ne peut pas être sûr à l'avenir, ce qui suggère à l'aide de hash().

Mais je n'arrive pas à comprendre à l'aide de hash() - par exemple -

$usr_password = hash('sha256', $usr_password); 

Qu'est-ce que 'sha256' ou 'sha512' que j'ai trouvé ici?

Puis-je mettre n'importe quoi au lieu de cela, comme '@123'?

Pourquoi est-il appelé sel de toute façon - $sel = time(); n'est rien d'autre mais juste un timestamp unix, n'est-ce pas?

Merci!

54voto

Erwan Legrand Points 797

Ne pas écrire votre propre mot de passe-fonction de hachage! Laissez ce assaisonné cryptographes. La cryptographie est dur pour obtenir le droit. La sécurité est dur pour obtenir le droit.

SHA1, SHA256 et SHA512 sont des résumés de message, pas de mot de passe-les fonctions de hachage.

Actuellement, le seul standard (comme dans sanctionné par le NIST) hachage de mot de passe ou clé de dérivation de fonction PBKDF2. D'autres choix, si à l'aide d'une norme n'est pas obligatoire, sont bcrypt et la plus récente scrypt. Wikipédia a des pages pour tous les trois fonctions:

Commutation de SHA1 SHA256 ou SHA512 ne va pas améliorer la sécurité de la construction de beaucoup. Le calcul d'une SHA256 ou SHA512 de hachage est très rapide. Un attaquant avec le matériel courant pourrait toujours essayer des dizaines de millions (avec un seul PROCESSEUR) ou même des milliards (avec un seul GPU) de hachages par seconde. Bon mot de passe les fonctions de hachage, il y a un facteur de ralentir les assaillants.

Voici une autre faiblesse dans le schéma ci-dessus: un attaquant peut précalculer un hachage de mot de passe une fois et de le réutiliser pour chaque entrée dans le fichier de mot de passe ou de la base de données. Une fois le précalcul est fait, le calcul de la hachages pour ces mots de passe avec un sel de valeur est négligeable, parce que des résumés de message travailler de manière incrémentielle. Ainsi, la precomputations pour $mot de passe peut être réutilisé pour calculer la valeur de hachage pour $mot de passe.$sel pour chaque valeur de $sel dans le fichier de mot de passe.

Voici quelques suggestions pour les programmeurs PHP: tout d'abord, lisez la FAQ PHP: http://php.net/manual/en/faq.passwords.php et puis utiliser crypt() ou PHPPASS: http://www.openwall.com/phpass/.

51voto

ActuatedCrayon Points 783

Vous devez utiliser SHA-2 que des failles ont été trouvées dans SHA-1.

SHA-2 dispose de différents types. Les valeurs des bits vous de l'état (par exemple, 256 et 512) sont les plus populaires. Soit, on devrait être bon pour le hachage de mot de passe. Cependant, SHA-512 peut être préférée si le temps qu'il faut pour de hachage n'est pas un problème.

Vous souhaitez sel hachages que quelqu'un peut utiliser des tables arc-en-ciel pour les regarder. Comme vous le savez, les valeurs de hachage auront toujours la même valeur pour la même entrée. Si vos utilisateurs utilisent un mot de passe court, il serait facile de tester toutes les combinaisons.

Vous devez choisir un sel et il doit toujours rester constant. Vous pouvez utiliser une valeur de temps (un timestamp unix, le nombre de secondes depuis 1970) de venir avec votre sel. Je voudrais aussi suggérer d'ajouter un peu plus de caractères aléatoires. Vous utilisez ensuite le sel partout où vous utilisez le mot de passe. Le sel sert à faire de même à court de mots de passe long (sécurisé).

25voto

Erick Points 468

La accepté de répondre ici est de mauvais conseils, et tous les débats liés au stockage de sel vs ne pas stocker le sel est stupide.

Vous avez besoin d'utiliser une lente algorithme de hachage comme pbkdf2, ou bcrypt, ou scrypt pour le hachage. SHA-256 ou 512 est inapproprié pour le hachage des mots de passe.

Concernant le sel et le magasin vs pas/magasin: Il n'y a simplement aucune raison de ne pas entreposer de sel à côté du hachage de mot de passe. Le sel doit absolument être différent pour chaque utilisateur, mais le garder secret est de pas de véritable valeur. Venir avec certains alambiqué algorithme pour recréer un sel est au mieux une perte de temps.

Stocker le sel, c'est la façon dont il est censé être fait.

19voto

Mark Byers Points 318575

sha-256 est plus sûr que d' sha1. Il appartient à la famille connue sous le nom de SHA-2.

En 2005, les failles de sécurité ont été identifiés dans l'algorithme SHA-1, à savoir qu'une mathématique faiblesse pourrait exister, indiquant une plus grande fonction de hachage serait souhaitable. Bien que SHA-2 porte une certaine ressemblance avec l'algorithme SHA-1, ces attaques n'ont pas été étendu à SHA-2.

Cependant, pour le hachage des mots de passe je recommande l'utilisation de bcrypt. Le hachage SHA fonctions n'ont pas été conçus pour la sécurisation des mots de passe et ne doit pas être utilisé à cette fin.

9voto

Erik Aigner Points 7182
<p>Mots de passe, vous devez utiliser <a href="http://en.wikipedia.org/wiki/Bcrypt">bcrypt</a>, parce qu’il a un facteur de coût. SHA n’est pas conçu pour les mots de passe.</p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: