Secure hash et du sel pour les mots de passe en PHP
Actuellement, il est dit que MD5 est partiellement dangereux. Compte tenu de cela, je voudrais savoir quel mécanisme utiliser pour la protection par mot de passe.
Cette question, Est “double hachage d'un mot de passe de moins en moins sûre juste hacher à la fois?
suggère que le hachage plusieurs fois peut être une bonne idée, alors que Comment mettre en œuvre protection par mot de passe pour les fichiers individuels? suggère d'utiliser le sel.
Je suis à l'aide de PHP. Je veux un coffre-fort et rapide de cryptage de mot de passe système. Le hachage d'un mot de passe d'un million de fois peut-être plus sûr, mais aussi plus lents. Comment à obtenir un bon équilibre entre la vitesse et la sécurité? Aussi, je préfère le résultat d'avoir un nombre constant de caractères.
- Le mécanisme de hachage doit être disponible en PHP
- Il doit être sûr
- On peut utiliser du sel (dans ce cas, tous les sels d'aussi bons? Est-il possible de générer de bons sels?)
Aussi, dois-je conserver les deux champs dans la base de données (à l'aide de MD5 et un autre à l'aide de SHA, par exemple)? Serait-il le rendre plus sûr ou unsafer?
Dans le cas où je n'étais pas assez claire, je veux savoir quelle fonction de hachage(s) à utiliser et la façon de choisir un bon sel afin d'avoir un coffre-fort et rapide mot de passe d'un mécanisme de protection.
Les questions connexes qui ne sont pas tout couvrir ma question:
Quelle est la différence entre SHA, MD5 en PHP
Simple Cryptage De Mot De Passe
Méthodes sécurisées de stockage des clés, des mots de passe pour asp.net
Comment voulez-vous mettre en œuvre salé mots de passe dans Tomcat 5.5
- openwall.com/phpass est également très bonne bibliothèque
- Md5 est maintenant complètement dangereux
- Cela dépend de ce que vous êtes en utilisant pour. Il est trivial de l'arc-en-ciel-match ou juste la force brute non salé mots de passe MD5, bien sûr, mais décent avec le salage c'est toujours extrêmement peu pratique pour construire un arc-en-ciel de table rapide pour le craquage des ensembles de mots de passe, et de la force brute est une hoper.
- PHP 5.5+ a un mot de passe sécurisé de hachage construit en php.net/manual/en/function.password-hash.php
- php.net/faq.password
- Comment utiliser le PHP 5.5 les fonctions de hachage du mot de passe
- Voir aussi Openwall de la Portable PHP cadre de hachage de mot de passe (PHPass). Durci à l'encontre d'un certain nombre d'attaques sur les mots de passe utilisateur.
Vous devez vous connecter pour publier un commentaire.
TL;DR
Ne pas faire
\0
en elle, ce qui peut sérieusement affaiblir la sécurité.)Dos
Pourquoi de hachage des mots de passe de toute façon?
L'objectif derrière le hachage des mots de passe est simple: empêcher les malveillants d'accéder à des comptes d'utilisateur par compromettre la base de données. Donc, le but de hachage de mot de passe est de dissuader un hacker ou cracker par leur coûte trop de temps ou d'argent pour calculer la plaine mots de passe en texte. Et le temps/coût sont les meilleurs moyens de dissuasion dans votre arsenal.
Une autre raison pour laquelle vous voulez un bon, solide hachage sur un des comptes d'utilisateur est de vous donner suffisamment de temps pour changer tous les mots de passe dans le système. Si votre base de données est compromise, vous aurez besoin de suffisamment de temps pour au moins verrouiller le système, si ce n'est de changer à chaque mot de passe dans la base de données.
Jeremiah Grossman, CTO de Whitehat Security, déclaré sur son blog après une récente récupération de mot de passe que requis par la force brute de rupture de son mot de passe de protection:
(C'est moi qui souligne.)
Ce qui fait un bonne mot de passe de toute façon?
L'entropie. (Non pas que je souscris pleinement à Randall point de vue.)
En bref, l'entropie est combien la variation est dans le mot de passe. Lorsqu'un mot de passe est uniquement de lettres minuscules, c'est que de 26 caractères. Ce n'est pas une grande variation. Alpha-numérique les mots de passe sont mieux, avec 36 caractères. Mais de permettre aux majuscules et minuscules, avec des symboles, est à peu près 96 caractères. C'est beaucoup mieux que les lettres. Un problème est que, pour faire de nos mots de passe mémorable nous insérer les modèles qui réduit l'entropie. Oups!
Mot de passe de l'entropie approximée facilement. À l'aide de la gamme complète de caractères ascii (environ 96 typable caractères) donne une entropie de 6,6 par personnage, qui à 8 caractères pour un mot de passe est encore trop faible (52.679 bits d'entropie) pour la sécurité de l'avenir. Mais la bonne nouvelle, c'est: plus les mots de passe et mots de passe avec des caractères unicode, vraiment, augmentation de l'entropie d'un mot de passe et de le rendre plus difficile à craquer.
Il n'y a plus de discussion de mot de passe d'entropie sur la Crypto StackExchange site. Une bonne recherche sur Google permet également de mettre en place un grand nombre de résultats.
Dans les commentaires, j'ai parlé avec @popnoodles, qui a souligné que l'application de une stratégie de mot de passe de X de la longueur X de nombreuses lettres, des chiffres, des symboles, etc, peuvent réduire l'entropie par mettre le mot de passe système plus prévisible. Je suis d'accord. Randomess, comme véritablement aléatoire que possible, est toujours le plus sûr, mais moins mémorable solution.
Tellement loin que j'ai été en mesure de dire, rendre le monde meilleur mot de passe est un Catch-22. Son pas mémorable, trop prévisible, trop court, trop de caractères unicode (dur de taper sur un ordinateur Windows/Mobile), trop long, etc. Aucun mot de passe n'est vraiment assez bon pour nos fins, nous devons les protéger, comme s'ils étaient de Fort Knox.
Meilleures pratiques
Bcrypt et scrypt sont les meilleures pratiques actuelles. Scrypt sera meilleure que celle de bcrypt dans le temps, mais il n'a pas vu l'adoption de la norme par Linux/Unix ou par des serveurs web, et n'a pas eu des examens en profondeur de son algorithme publié pour le moment. Mais encore, l'avenir de l'algorithme ne semblent prometteurs. Si vous travaillez avec Ruby il y a un scrypt gem qui va vous aider, et Node.js a maintenant son propre scrypt paquet. Vous pouvez utiliser Scrypt en PHP, soit via le Scrypt extension ou la Libsodium extension (les deux sont disponibles dans PECL).
Je vous suggère fortement la lecture de la documentation pour la la fonction crypt si vous voulez comprendre comment utiliser bcrypt, ou de vous trouver un bon wrapper ou utiliser quelque chose comme PHPASS pour un plus de l'héritage de la mise en œuvre. Je recommande un minimum de 12 tours de bcrypt, si ce n'est de 15 à 18 ans.
J'ai changé d'avis sur l'utilisation de bcrypt quand j'ai appris que bcrypt utilise uniquement blowfish clés du calendrier, avec un coût variable mécanisme. Ce dernier vous permet d'augmenter le coût de la force brute d'un mot de passe par l'augmentation de blowfish est déjà cher clé de l'annexe.
Moyenne des pratiques
J'ai du mal à imaginer cette situation plus. PHPASS prend en charge le PHP 3.0.18 à travers 5.3, donc il est utilisable sur presque toutes les configurations imaginables—et devrait être utilisé si vous n'avez pas sais que pour certains que votre environnement prend en charge bcrypt.
Mais supposons que vous ne pouvez pas utiliser bcrypt ou PHPASS à tous. Alors, quoi?
Essayer une mise en œuvre de PDKBF2 avec le nombre maximum de tours que votre environnement/application/utilisateur de la perception ne peut tolérer. Le numéro le plus bas, je recommande est de 2500 tours. Aussi, assurez-vous d'utiliser hash_hmac() si elle est disponible, pour rendre l'opération plus difficile à reproduire.
Pratiques Futures
Venir en PHP 5.5 est un pleine protection par mot de passe de la bibliothèque que les résumés loin les douleurs de travailler avec bcrypt. Alors que la plupart d'entre nous sommes coincés avec PHP 5.2 et 5.3 dans la plupart des environnements, en particulier des hôtes, @ircmaxell a construit un la couche de compatibilité pour la venue de l'API qui est compatible PHP 5.3.7.
Cryptographie Recap & Avertissement
La puissance de calcul nécessaire pour réellement fissure un hachage de mot de passe n'existe pas. La seule façon pour les ordinateurs à "craquer" un mot de passe est de recréer et de simulation de l'algorithme de hachage utilisé pour le fixer. La vitesse de la table de hachage est linéairement liée à sa capacité à être brute forcé. Pire encore, la plupart des algorithmes de hachage peuvent être facilement mises en parallèle pour effectuer encore plus vite. C'est pourquoi coûteux programmes comme bcrypt et scrypt sont si importants.
Vous ne pouvez pas possible de prévoir toutes les menaces ou voies de l'attaque, et donc vous devez faire de votre mieux pour protéger vos utilisateurs à l'avant. Si vous ne le faites pas, alors vous pourriez même passer à côté du fait que vous avez été attaqué jusqu'à ce qu'il soit trop tard... et vous êtes responsable. Pour éviter cette situation, la loi paranoïaque pour commencer. Attaque de votre propre logiciel (interne) et de tenter de voler les informations d'identification utilisateur, ou de modifier de comptes d'autres utilisateurs ou d'accéder à leurs données. Si vous n'avez pas tester la sécurité de votre système, alors vous ne pouvez pas blâmer personne, mais vous-même.
Enfin: je ne suis pas un cryptographe. Tout ce que j'ai dit, c'est mon avis, mais je pense qu'il est basé sur le bon vieux sens commun ... et beaucoup de lecture. Rappelez-vous, être aussi paranoïaque que possible, de rendre les choses le plus dur de s'immiscer que possible, et puis, si vous êtes toujours inquiet, contactez un blanc-chapeau de pirate ou un cryptographe pour voir ce qu'ils disent au sujet de votre code/système.
[a-zA-Z0-9_$%#]{28}
de la séquence, ils sont plus susceptibles de choisir quelque chose comme$justinBieber28
.0
s et1
s ils avaient encore ont pratiquement incassable entropie, ou pour les besoins de la discussion, 1000 caractères. Il n'y a rien à faire, moyen de plus de 256 bits d'entropie juste pour dire qu'il n'y a "pas de limite". Êtes-vous heureux de hachage d'un multi-GB mot de passe-je vous donner? Une autre solution: faire de l'utilisateur de hachage leur 50 GO mot de passe avec l'algorithme SHA-2 ou autre et prétendre que le mot de passe. Bam, tous les 'mots de passe', vous recevez sont de 32 octets de long (encore besoin d'utiliser un hachage de mot de passe pour stocker bien).Beaucoup plus court et plus sûr de réponse - ne pas écrire votre propre mot de passe mécanisme à tous les, utiliser un essayé et testé le mécanisme.
La plupart des programmeurs n'ont tout simplement pas l'expertise pour écrire crypto liées code en toute sécurité, sans introduire des vulnérabilités.
L'auto-test rapide: qu'est-ce que le mot de passe de l'étirement et le nombre d'itérations devriez-vous utiliser? Si vous ne connaissez pas la réponse, vous devez utiliser
password_hash()
, en tant que mot de passe l'étirement est maintenant une caractéristique essentielle de mot de passe mécanismes en raison de beaucoup plus rapide Cpu et l'utilisation de Les gpu et les Fpga à craquer des mots de passe à des taux de des milliards de suppositions par seconde (avec Gpu).Par exemple, vous pouvez crack tous les 8 caractères des mots de passe Windows en 6 heures à l'aide de 25 Gpu installés dans les 5 Ordinateurs de bureau. C'est brute-forcer c'est à dire l'énumération et la vérification de chaque 8 caractères du mot de passe Windows, y compris les caractères spéciaux, et n'est pas une attaque par dictionnaire. C'était en 2012, à partir de 2018, vous pouvez utiliser moins de Gpu, ou fissure plus vite avec 25 Gpu.
Il y a aussi beaucoup de rainbow table des attaques sur les mots de passe Windows qui s'exécutent sur ordinaire Processeurs et sont très rapides. Tout cela parce que Windows encore ne pas saler ou de s'étirer ses mots de passe, même dans Windows 10 - ne pas faire la même erreur que Microsoft l'a fait!
Voir aussi:
password_hash()
ouphpass
sont la meilleure façon d'aller.Je ne voudrais pas stocker le mot de passe hashé de deux façons différentes, parce que le système est au moins aussi faible que la plus faible des algorithmes de hachage à utiliser.
Que de PHP 5.5, PHP est simple, assurer les fonctions de hachage et de vérification des mots de passe, password_hash() et password_verify()
Quand
password_hash()
est utilisé, il génère un hasard sel et l'inclut dans la sortie de hachage (avec le coût et l'algorithme utilisé.)password_verify()
lit alors que hachage et détermine le sel et la méthode de chiffrement utilisée, et le vérifie à l'encontre de la condition mot de passe en clair.Fournir la
PASSWORD_DEFAULT
indique à PHP pour utiliser la valeur par défaut algorithme de hachage de l'installation de la version de PHP. Exactement l'algorithme que cela signifie est destiné à changer au fil du temps dans les futures versions, de sorte qu'il sera toujours l'un des plus forts algorithmes disponibles.Coût croissant (par défaut 10) rend la valeur de hachage plus difficile de force brute mais aussi des moyens de génération de hachages et de vérification des mots de passe contre eux sera plus de travail pour votre CPU.
Noter que même si la valeur par défaut algorithme de hachage peut changer, ancien hachages continuera à vérifier l'amende juste parce que l'algorithme utilisé est stocké dans la table de hachage et
password_verify()
ramasse sur elle.Si la question a été posée, je veux juste réitérer que les sels utilisés pour le hachage doit être aléatoire et non pas comme l'adresse email, comme suggéré dans la première réponse.
Plus d'explication est disponible à l'- http://www.pivotalsecurity.com/blog/password-hashing-salt-should-it-be-random/
Je veux juste souligner que PHP 5.5 comprend un hachage de mot de passe API qui fournit un wrapper autour de
crypt()
. Cette API simplifie considérablement la tâche du hachage, de la vérification et de la redéfinition de hachage de mots de passe. L'auteur a également publié un pack de compatibilité (sous la forme d'un seul password.php le fichier que vous simplementrequire
à l'utilisation), pour ceux qui utilisent PHP 5.3.7 et, plus tard, et souhaitez exercer ce droit maintenant.Il ne supporte BCRYPT pour l'instant, mais il vise à être facilement étendu pour inclure d'autres hachage de mot de passe techniques et parce que la technique et le coût est stocké dans la table de hachage, des modifications à votre moyen de hachage technique/coût n'entraînera pas la nullité actuelle de tables de hachage, le cadre sera automatiquement, utilisez la bonne technique/coût lors de la validation. Il gère également la génération d'un "secure" de sel si vous n'avez pas de définition explicite de votre propre.
L'API expose quatre fonctions:
password_get_info()
- retourne des informations à propos de la donnée de hachagepassword_hash()
- crée un hash du mot de passepassword_needs_rehash()
- vérifie si l'objet de hachage correspond à la donnée d'options. Utile pour vérifier si le hachage est conforme à votre technique actuelle/coût du système vous permettant de ressasser si nécessairepassword_verify()
- vérifie que le mot de passe correspond à un hachageÀ l'heure actuelle, ces fonctions acceptent les PASSWORD_BCRYPT et PASSWORD_DEFAULT mot de passe constantes, qui sont synonymes pour le moment, la différence étant que PASSWORD_DEFAULT "peut changer dans les nouvelles versions de PHP lors de la plus récente, la plus forte, les algorithmes de hachage sont pris en charge." À l'aide de PASSWORD_DEFAULT et password_needs_rehash() sur login (et ressasser si nécessaire) doivent s'assurer que votre hachages sont raisonnablement résilientes face aux attaques en force avec peu ou pas de travail pour vous.
EDIT: je viens de réaliser que ce qui est mentionné brièvement dans Robert K de réponse. Je vais quitter cette réponse ici car je pense qu'il donne un peu plus d'informations sur la façon dont il fonctionne et la facilité d'utilisation, elle fournit pour ceux qui ne connaissent pas la sécurité.
Je suis en utilisant Phpass qui est un simple fichier PHP classe qui pourrait être mis en place très facilement dans presque chaque projet PHP. Voir aussi Le H.
Par défaut utilisé plus puissant de chiffrement qui est mis en œuvre dans Phpass, qui est
bcrypt
et retombe à d'autres cryptages bas du MD5 pour assurer la compatibilité descendante avec les cadres comme WordPress.Le retour de hachage peut être stocké dans la base de données tel qu'il est. Exemple d'utilisation pour la génération de hachage est:
Vérifier le mot de passe, on peut utiliser:
CHOSES À RETENIR
Beaucoup a été dit à propos de cryptage de Mot de passe pour PHP, dont la plupart sont de très bon conseils, mais avant même de commencer le processus d'utilisation de PHP pour le mot de passe de cryptage assurez-vous que vous avez mis en œuvre ou prêt à être mis en œuvre.
SERVEUR
PORTS
N'importe comment bon votre de chiffrement est si vous n'avez pas correctement sécurisé le serveur qui exécute le PHP de base de données et tous vos efforts seront vains. La plupart des serveurs de fonction relativement de la même façon, ils ont des ports attribués pour vous permettre d'y accéder à distance, soit par ftp ou shell. Assurez-vous de changer le port par défaut de ce qui jamais de connexion à distance, vous disposez d'active. En ne faisant pas cela, vous, en effet, ont fait de l'attaquant de faire une étape de moins en accédant à votre système.
Nom d'utilisateur
Pour tout ce qui est bon dans le monde de ne pas utiliser le nom d'utilisateur admin, root ou quelque chose de similaire. Aussi, si vous êtes sur un unix système NE font PAS le compte root login accessible, il doit toujours être sudo seulement.
MOT de passe
Vous dire à vos utilisateurs à faire un bon mot de passe pour éviter de se faire piraté, faire la même chose. Quel est le point en passant par tout l'effort de fermer votre porte d'entrée lorsque vous avez la porte dérobée ouverte.
BASE de données
SERVEUR
Idéalement, vous voulez que votre base de données et des APPLICATIONS sur des serveurs distincts. Ce n'est pas toujours possible en raison du coût, mais il ne permet pas pour des raisons de sécurité que l'attaquant va passer par deux étapes pour accéder pleinement au système.
UTILISATEUR
Toujours votre application à son propre compte pour accéder à la DB, et seulement lui donner les privilèges dont il a besoin.
Alors disposer d'un compte d'utilisateur distinct pour vous qui n'est pas stockée sur le serveur, même pas dans l'application.
Comme toujours, NE font PAS de cette racine ou quelque chose de similaire.
MOT de passe
Suivez les mêmes directives que pour tous les bons mots de passe. Aussi, ne pas réutiliser le même mot de passe sur n'importe quel SERVEUR ou une base de données des comptes sur le même système.
PHP
MOT de passe
JAMAIS stocker un mot de passe dans votre base de données, au lieu de stocker la valeur de hachage unique et sel, je vous expliquerai pourquoi plus tard.
De HACHAGE
UNE FAÇON DE HACHAGE!!!!!!!, Jamais de hachage d'un mot de passe de sorte qu'il peut être inversée, de la cendre doit être d'une certaine façon, ce qui signifie que vous n'avez pas inverser la et de les comparer pour le mot de passe, vous, au lieu de hachage du mot de passe saisi de la même façon, et comparer les deux tables de hachage. Cela signifie que même si un attaquant a accès à la DB, il ne sait pas ce que le mot de passe est, juste ses résultant de hachage. Ce qui signifie plus de sécurité pour vos utilisateurs dans le pire scénario possible.
Il y a beaucoup de bonnes fonctions de hachage là-bas (
password_hash
,hash
, etc...) mais vous avez besoin de choisir un bon algorithme de hachage pour être efficace. (bcrypt et ceux similaires sont décents algorithmes).Lorsque le hachage de la vitesse est la clé, le plus lent, le plus résistant aux attaques par Force Brute.
L'une des erreurs les plus courantes dans le hachage est que les hachages sont pas uniques pour les utilisateurs. C'est principalement parce que les sels ne sont pas uniquement généré.
SALAGE
Les mots de passe doivent toujours être salée avant de les hacher. Saler ajoute une chaîne de caractères pour le mot de passe de façon similaire, les mots de passe ne semble pas la même dans la DB. Toutefois, si le sel n'est pas unique à chaque utilisateur (ie: vous utilisez une codés en dur de sel) que vous avez fait votre sel sans valeur. Parce qu'une fois un hacker un mot de passe de sel, il a le sel pour tous.
Lorsque vous créez un sel assurez-vous qu'il est unique pour le mot de passe c'est le salage, puis le stocker à la fois rempli de hachage et le sel dans votre base de données. Ce que cela va faire, c'est de faire en sorte qu'un attaquant devra individuellement fissure chacun de sel et de hachage avant qu'ils ne puissent y avoir accès. Cela signifie beaucoup plus de temps et de travail pour l'attaquant.
UTILISATEURS DE CRÉER DES MOTS DE PASSE
Si l'utilisateur est la création d'un mot de passe via le frontend qui signifie qu'il doit être envoyé au serveur. Cela ouvre un problème de sécurité, car cela signifie que le mot de passe non crypté est envoyé au serveur et si un attaquant est capable d'écouter et de l'accès de tous à votre sécurité en PHP est sans valeur. TOUJOURS transmettre des données de manière SÉCURISÉE, ce qui est fait grâce au protocole SSL, mais être fatigué, même SSL n'est pas parfait (l'installation de OpenSSL Heartbleed faille en est un exemple).
Également permettre à l'utilisateur de créer un mot de passe sécurisé, il est simple et devrait toujours être fait, l'utilisateur en sera reconnaissant de lui à la fin.
Enfin, peu importe les mesures de sécurité à prendre, rien n'est sûr à 100%, le plus avancé de la technologie afin de protéger devient la plus avancée, les attaques deviennent. Mais en suivant ces étapes permettra de rendre votre site plus sûr et beaucoup moins souhaitable pour les attaquants à aller au bout.
Ici est une classe PHP qui crée une table de hachage et de sel pour un mot de passe facilement
http://git.io/mSJqpw
Google dit SHA256 est disponible pour PHP.
Vous devriez certainement utiliser un sel. Je vous recommande d'utiliser octets aléatoires (et de ne pas vous limiter aux caractères et de chiffres). Comme d'habitude, plus vous choisissez, le plus sûr, plus lent, il obtient. 64 octets devrait être bon, je suppose.
Je l'ai trouvé parfait sujet sur cette question ici: https://crackstation.net/hashing-security.htm, je voulais vous faire bénéficier de cela, voici le code source aussi que la condition de prévention contre en fonction du temps d'attaque aussi.
En fin de compte, double hachage, mathématiquement, ne fournit aucune prestation. Dans la pratique, cependant, il est utile pour prévenir l'arc-en-ciel de la table-attaques. En d'autres termes, il n'est pas plus avantageuse que le hachage avec un sel, qui prend beaucoup moins de temps processeur dans votre application ou sur votre serveur.
J'ai l'habitude d'utiliser SHA1 et le sel avec l'ID d'utilisateur (ou un autre utilisateur-information spécifique), et parfois j'en outre utiliser une constante de sel (j'ai donc 2 parties pour le sel).
SHA1 est maintenant considéré comme quelque peu compromise, mais à un bien moindre degré que MD5. À l'aide d'un sel (le sel), vous êtes à la prévention de l'utilisation d'un générique table arc-en-ciel pour attaquer votre hachages (certaines personnes ont même eu du succès en utilisant Google comme une sorte d'arc-en-ciel de la table par la recherche de la table de hachage). Un attaquant pourrait générer un arc-en-ciel de la table à l'aide de votre sel, de sorte que c'est pourquoi vous devez inclure un utilisateur spécifique du sel. De cette façon, ils auront pour générer un arc-en-ciel de la table pour chaque enregistrement dans votre système, pas un seul pour l'ensemble de votre système! Avec ce type de salage, même MD5 est décemment sécurisé.
SHA1 et un sel devrait suffire (en fonction, bien entendu, si vous êtes le codage quelque chose pour Fort Knox ou un système de connexion à votre liste de courses) pour l'avenir prévisible. Si SHA1 n'est pas assez bon pour vous, utilisez SHA256.
L'idée d'un sel est de jeter le hachage des résultats hors-bilan, pour ainsi dire. Il est connu, par exemple, que le MD5 hash d'une chaîne vide est
d41d8cd98f00b204e9800998ecf8427e
. Donc, si quelqu'un avec une assez bonne mémoire permettrait de voir qui de hachage et de savoir que c'est le hash d'une chaîne vide. Mais si la chaîne est salée (par exemple, avec la chaîne "MY_PERSONAL_SALT
"), le hachage de la "chaîne vide" (à savoir "MY_PERSONAL_SALT
") devientaeac2612626724592271634fb14d3ea6
, d'où la non-évidence de trace. Ce que j'essaie de dire, qu'il est préférable d'utiliser tout de sel, que de ne pas. Par conséquent, il n'est pas trop d'importance à savoir qui de sel à utiliser.Il y a en fait les sites web qui n'juste ce - vous pouvez nourrir un (md5) de hachage, et il crache un texte en clair connu que génère ce hash. Si vous obtenez un accès à une base de données qui stocke plaine md5 hachages, il serait trivial pour vous d'entrer la valeur de hachage pour l'administrateur d'un tel service, et connectez-vous. Mais, si les mots de passe ont été salés, tels un service deviendrait inefficace.
Également, double hachage est généralement considéré comme une mauvaise méthode, car elle diminue le résultat de l'espace. Tous les hachages sont de longueur fixe. Ainsi, vous ne pouvez avoir qu'un nombre fini de valeurs de cette longueur fixe, et les résultats deviennent de moins en moins variées. Cette pourrait être considéré comme une autre forme de salage, mais je ne le recommande pas.
sha1(sha1($foo))
réduit efficacement l'espace de sortie, parce que la collision de la fonction interne deviendra automatiquement une collision de l'extérieur. La dégradation est linéaire, mais c'est encore un sujet de préoccupation. L'itératif de hachage des méthodes de flux de données en arrière sur chaque rond, tels que$hash = sha1(sha1($salt . $password) . $salt)
. Mais c'est toujours pas bon... le Bâton avec PBKDF2 ou Bcrypt...ok
dans le fitsy nous avons besoin de sel
le sel doit être unique
alors laissez générer
aussi nous avons besoin de la table de hachage
Je suis en utilisant sha512
il est le meilleur et il est en php
ainsi, nous pouvons maintenant utiliser cette fonction pour générer mot de passe sûr
maintenant nous avons besoin d'enregistrer dans notre base de données $hash_psw valeur de la variable $et le sel variable
et pour autoriser, nous allons utiliser les mêmes étapes...
c'est le meilleur moyen pour la sécurité de nos clients, mots de passe...
P. s. pour les 2 dernières étapes, vous pouvez utiliser votre propre algorithme...
mais assurez-vous que vous pouvez générer ce hachage de mot de passe dans le futur
lorsque vous devez autoriser l'utilisateur...
sha512
(même si salé) est largement considéré comme de ne pas être assez bon pour la protection par mot de passe. (aussi que RNG n'est pas cryptographique sécurisé, afin de l'utiliser pour la génération de mot de passe est risqué).