web-dev-qa-db-fra.com

Manipulation correcte du mot de passe pour la connexion

J'ai beaucoup lu sur la sécurité de la connexion PHP récemment, mais de nombreuses questions sur le débordement de pile concernant la sécurité sont obsolètes.

Je comprends que bcrypt est l’un des meilleurs moyens de hacher les mots de passe aujourd’hui. Cependant, pour mon site, je pense que sha512 fera très bien, au moins pour commencer. (Je veux dire que bcrypt est destiné aux grands sites, aux sites nécessitant une haute sécurité, non?)

Je me pose aussi des questions sur le salage. Est-il nécessaire que chaque mot de passe ait son propre sel? Devrais-je avoir un champ pour le sel et un pour le mot de passe dans ma table de base de données? Quel serait un sel décent aujourd'hui? Devrais-je joindre le nom d'utilisateur avec le mot de passe et y ajouter une combinaison aléatoire de mots/lettres/caractères spéciaux?

1
piers

Je ne suis pas sûr de savoir pourquoi cette question a été migrée. Il existe de nombreuses questions avec des réponses valables sur stackoverflow à ce sujet.

Premièrement: utilise BCrypt-hash, c'est l'algorithme de hachage recommandé aujourd'hui.

Sha256 est un algorithme de hachage à usage général, conçu pour être fast ; vous ne voulez pas que votre algorithme de hachage soit rapide pour le hachage de mot de passe.

Deuxièmement: utilise un sel à entropie élevée aléatoire, également distribué. Je vous invite également à lire ma longue réponse sur le salage

En fonction de votre langage/plateforme de programmation, l'algorithme BCrypt crée déjà un sel pour vous. Cependant, toutes les implémentations ne le font pas ; PHP par exemple, ne crée pas automatiquement de sel.

Si possible, ne lancez pas votre propre script. Mais utilisez une bibliothèque standard.
La sécurité tend à être beaucoup plus compliquée et avec plus de possibilités de manques invisibles que la plupart des programmeurs ne pourraient le faire seuls. L’utilisation d’une bibliothèque standard est donc toujours la solution la plus simple et la plus sûre (sinon la seule).

1
Jacco

N'ayez pas peur d'utiliser bcrypt! Ce n'est pas seulement pour les sites à haute sécurité, et son utilisation peut être aussi simple que d'utiliser un hachage md5. Cela ne compliquera pas votre application d'avoir un sel aléatoire par mot de passe, elle peut être stockée dans le même champ de base de données que la valeur de hachage.

Depuis la version 3.5 PHP, vous pouvez utiliser la fonction crypt() pour générer un hachage bcrypt. Dans l'article Générer des hachages de mots de passe avec bcrypt j'ai essayé d'expliquer les points importants, il faut comprendre bcrypt.

0
martinstoeckli