php - Chiffrement des mots de passe

Translate

Quel est le moyen le plus rapide et le plus sûr de crypter les mots de passe (PHP préféré), et quelle que soit la méthode choisie, est-elle portable?

En d'autres termes, si je migre ultérieurement mon site Web vers un autre serveur, mes mots de passe continueront-ils de fonctionner?

La méthode que j'utilise maintenant, comme on m'a dit, dépend des versions exactes des bibliothèques installées sur le serveur.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Si vous choisissez une méthode de cryptage pour votre système de connexion, la vitesse n'est pas votre ami, Jeff a eu une conversation avec Thomas Ptacek sur les mots de passe et leconclusionétait que vous devriez utiliser la méthode de cryptage la plus lente et la plus sécurisée que vous puissiez vous permettre.

Du blog de Thomas Ptacek:
La vitesse est exactement ce que vous ne voulez pas dans une fonction de hachage de mot de passe.

Les schémas de mots de passe modernes sont attaqués par des craqueurs de mots de passe incrémentiels.

Les crackers incrémentiels ne précalculent pas tous les mots de passe crackés possibles. Ils considèrent chaque hachage de mot de passe individuellement et alimentent leur dictionnaire via la fonction de hachage de mot de passe de la même manière que votre page de connexion PHP. Les crackers de table arc-en-ciel comme Ophcrack utilisent l'espace pour attaquer les mots de passe; les crackers incrémentaux comme John the Ripper, Crack et LC5 fonctionnent avec le temps: statistiques et calcul.

Le jeu d'attaque de mot de passe est évalué en fonction du temps nécessaire pour déchiffrer le mot de passe X. Avec les tables arc-en-ciel, ce temps dépend de la taille de votre table et de la vitesse à laquelle vous pouvez la rechercher. Avec les crackers incrémentiels, le temps dépend de la vitesse à laquelle vous pouvez exécuter la fonction de hachage de mot de passe.

Mieux vous pouvez optimiser votre fonction de hachage de mot de passe, plus votre fonction de hachage de mot de passe est rapide, plus votre schéma est faible. MD5 et SHA1, même les chiffrements par blocs conventionnels comme DES, sont conçus pour être rapides. MD5, SHA1 et DES sont des hachages de mots de passe faibles. Sur les processeurs modernes, les blocs de construction cryptographiques bruts tels que DES et MD5 peuvent être découpés en morceaux, vectorisés et parallélisés pour accélérer les recherches de mots de passe. Les implémentations FPGA Game-over ne coûtent que des centaines de dollars.

La source
Translate

Je suis avec Peter. Le développeur ne semble pas comprendre les mots de passe. Nous choisissons tous (et j'en suis aussi coupable) MD5 ou SHA1 parce qu'ils sont rapides. Penser à ça (parce que quelqu'un me l'a récemment fait remarquer) cela n'a aucun sens. Nous devrions choisir un algorithme de hachage qui est stupide et lent. Je veux dire, à l'échelle des choses, un site occupé va hacher les mots de passe quoi? toutes les 1/2 minutes? Qui se soucie si cela prend 0,8 seconde contre 0,03 seconde pour le serveur? Mais cette lenteur supplémentaire est énorme pour empêcher tous les types d'attaques brutales courantes.

D'après ma lecture, bcrypt est spécialement conçu pour le hachage de mot de passe sécurisé. Il est basé sur Blowfish et il existe de nombreuses implémentations.

Pour PHP, consultez PHPPasshttp://www.openwall.com/phpass/

Pour tous ceux qui utilisent .NET, consultez BCrypt.NEThttp://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

La source
Translate

Il faut souligner que vous ne voulez pasCrypterle mot de passe, vous voulezhacheril.

Les mots de passe chiffrés peuvent être déchiffrés, permettant à quelqu'un de voir le mot de passe. Le hachage est une opération unidirectionnelle, le mot de passe d'origine de l'utilisateur a donc disparu (cryptographiquement).


Quant à l'algorithme que vous devriez choisir, utilisez le standard actuellement accepté:

  • SHA-256

Et lorsque vous hachez le mot de passe de l'utilisateur, assurez-vous également de hacher d'autres fichiers indésirables avec lui. par exemple:

  • mot de passe:password1
  • sel:PasswordSaltDesignedForThisQuestion

Ajoutez le sel au mot de passe de l'utilisateur:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
La source
Translate

Quoi que vous fassiez, n'écrivez pas votre propre algorithme de chiffrement. Faire cela garantira presque (sauf si vous êtes un cryptographe) qu'il y aura une faille dans l'algorithme qui rendra la fissuration triviale.

La source
Translate

Pensez à utiliserbcryptil est utilisé dans de nombreux cadres modernes comme laravel.

La source
Translate

Je ne recherche pas nécessairement le plus rapide mais un bon équilibre, certains serveurs pour lesquels ce code est développé sont assez lents, le script qui hache et stocke le mot de passe prend 5-6 secondes à exécuter, et j'ai réduit au hachage (si je commente le hachage, il s'exécute, en 1-2 secondes).

Il n'est pas nécessaire que ce soit le PLUS sécurisé, je ne codifie pas pour une banque (pour le moment) mais jeNE FERA PASstockez les mots de passe sous forme de texte brut.

La source
Translate

password_hash ( string $password , int $algo [, array $options ] ). (PHP 5> = 5.5.0, PHP 7)

password_hash () crée un nouveau hachage de mot de passe en utilisant un algorithme de hachage unidirectionnel puissant. password_hash () est compatible avec crypt (). Par conséquent, les hachages de mot de passe créés par crypt () peuvent être utilisés avec password_hash ().

La source