Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: guiguivey, Nobodief, PrimFX, quiqou55
Ce topic a été résolu
Auteur Sujet: Hasher un mot de passe convenablement

TheFlameflo

Messages: 303

Salut !
J'ai regardé le tuto de PrimFx qui permettait de créer un espace membre. Comment dans tout bon espace membre, on doit haser le mot de passe. Dans ce tuto, Prim utilise sha1() pour crypter le mot de passe. Mais j'ai vu récemment sur plusieurs forums qu'il est déconseillé de juste crypter un mot de passe avec sha1() car il est devenu facile d'attaquer par force brute la sortie de ces algorithmes pour retrouver la chaîne originale. source
Donc, je me demandais s'il est vraiment nécessaire de rajouter un grain de sel pour mieux le crypter.
Je ne suis pas sûr de comprendre le principe, cependant. (comment faire, etc)
Qu'en pensez-vous ?

PS: J'ai "inventé" une technique que je n'ai pas encore testé, mais j'aimerais avoir votre avis : si à l'inscription et à l'insertion dans ma BDD, pour mieux protéger le mdp, serait-il "mauvais" de double crypter mon mot de passe avec des algorithmes différents. 
Exemple :
md5(sha1($monmdp))
Est-ce une bonne idée où ça ne ferait que créer des erreurs et/ou prendre plus de temps à charger ?
Publicité

quiqou55

Messages: 23

Salut !
Actuellement la meilleur façon c'est d'utiliser B_CRYPT, tu peux l'utiliser grace a la fonction password_hash() de php et ensuite vérifier si le mot de passe correspond grace a password_verify() Sourire

Attention: Cette fonction renvoi un hash différent pour le même mot de passe, il faut donc verifier le mot de passe avec la condition if et non where de MySQL Sourire

Si tu veut en savoir plus je t'invite a voir le tuto de grafikart sur l'espace membre, il utilise cette fonction : https://www.grafikart.fr/tutoriels/php/gestion-membre-229

PrimFX
Membre Premium

Messages: 113

Salut !

Je ne connaissais pas la technique de @quiqou55 Tire la langue

Effectivement, étant donné que le hash en sha1() commence à voir avoir des failles (dictionnaires de plus en plus complets et précis), hasher en sha512 devient la façon la plus sécurisée d'hasher un mot de passe. Exemple: 
<?php

$mdp_hash = hash('sha512',$mdp);

?>
Pour rendre cela encore plus sécurisé, tu peux effectivement utiliser la technique du "grain de sel" qui consiste à rajouter une phrase ou un code à la suite du mot de passe avant de le hasher. Mais là encore, tu as deux possibilités (de la moins à la plus sécurisée):
  • Utiliser toujours le même grain de sel, autrement dit un code à la suite du mot de passe qui ne change pas.
  • Utiliser le pseudo de l'utilisateur ou encore une clé aléatoire (qu'il faudra donc sauvegarder dans la base de donnée) comme grain de sel
Au final, ton code ressemblera à ça:
<?php

$mdp_hash = hash('sha512',$mdp.$grain);

?>
Où $grain est la variable qui contient une des propositions ci-dessus (code, pseudo, etc.) :)

Par contre, à la connexion, il faudra faire attention à bien rajouter le grain de sel dans la vérification du mot de passe, sinon forcément, ça ne pourra pas fonctionner Tire la langue
@+

julienb

Messages: 34

Salut,
j'ai trouvé une librairie qui permet de crypter les mots de passe avec BCRYPT et qui s'adapte aux différentes versions de PHP, je vous donne le github:
https://github.com/ircmaxell/password_compat
A installer de préférence avec Composer.

TheFlameflo

Messages: 303

Merci à vous tous pour avoir répondu à ma question . Mais comme j'avais demandé à la fin, je me demande si : 
PS: J'ai "inventé" une technique que je n'ai pas encore testé, mais j'aimerais avoir votre avis : si à l'inscription et à l'insertion dans ma BDD, pour mieux protéger le mdp, serait-il "mauvais" de double crypter mon mot de passe avec des algorithmes différents.  
Exemple : 
md5(sha1($monmdp)) 
Est-ce une bonne idée où ça ne ferait que créer des erreurs et/ou prendre plus de temps à charger ?
Encore merci, je vais bientôt modifier mon code pour renforcer la sécurité !

julienb

Messages: 34

J'ai oublié : md5 et sha1 sont totalement obsolètes au niveau sécurité.

PrimFX
Membre Premium

Messages: 113

Salut !

Pour ton idée de double hacher le password, honnêtement, je me suis jamais posé la question x) Mais après avoir cherché un peu sur Google (et avoir trouvé des trucs dans ce genre), j'ai vu que de manière générale, oui ça augmente le temps de chargement, mais c'est aussi (un peu) plus sécurisé.

Par contre, le faire avec des algorithmes de hachage quasi obsolètes comme le md5 et le sha1 n'est pas forcément une bonne idée. Je pense que ça peut valoir le coup de le faire avec du sha512 ou un autre algorithme plus sécurisé qui t'a été proposé Clin d'oeil

@julienb pour le coup je connais ni le BCRYPT ni la librairie que tu as partagé x) Faudrait que je teste Tire la langue

TheFlameflo

Messages: 303

Salut !

Je vais aller changer ça tout de suite (bien qu'il y a pas grande chance de me faire hack pour le moment, je développe en privé) !

Merci pour tout à tous !

Nobodief

Messages: 73

Salut ! 

Je vais aller changer ça tout de suite (bien qu'il y a pas grande chance de me faire hack pour le moment, je développe en privé) ! 

Merci pour tout à tous !
La principal raison du hack provient des utilisateurs est non du développeur, à mon avis cela ne sert à rien de double hasher ton mot de passe (avec le même hash.).

Pour que cela soient vraiment sécurisé au point de décourager les hackers il faudrait hasher ton mot de passe 2 fois avec deux algorithmes différent si tu veux une réelle utilité à ton délire, hasher le mot de passe qui est hasher avec le même algorithme , c'est inutile.

Par contre si tu utilise plusieurs algorithmes, je pense que cela peut devenir intéressant, si tu utilise le sha512 puis ensuite le md5, ou même un nouveau hash, ouais la il auras une utilité.

guiguivey

Messages: 1

Bien le bonjour tout le monde. Tout d'abord merci à toi PrimFX pour tout ce contenu de qualité, et merci à toutes les autres personnes qui contribuent à ce forum, c'est vraiment agréable de voir tout ce beau boulot. Je déterre un peu ce sujet car j'ai une question par rapport à la syntaxe à utiliser dans la connexion. Je n'arrive pas à l'articuler correctement (en effet je fais mes premiers pas en PHP).
Voici ce que j'ai mis pour le hashage au niveau de l'inscription :
   $mdp_hash = hash('sha512',$mdp.$grain);
   $mdp2_hash = hash('sha512',$mdp2.$grain);
Ça prend bien en compte l'enregistrement dans ma BDD. Par contre, lorsque j'essaye de me connecter, cela ne fonctionne plus, voici le bout de code que j'ai mis :
   $mdpconnect.$grain = sha512($_POST['mdpconnect']);
Je vous remercie d'avance pour vos réponses et je vous souhaite de passer une agréable journée.

Florian

Messages: 73

SHA512 pas recommander dans quelque année il va faire comme sont cousin le SHA1 et le SHA256 decrypter facilement le mieux c'est comme on l'a dit au dessis c'est le B_crypt un pti tuto https://www.grafikart.fr/tutoriels/php/gestion-membre-229 c'est beaucoup plus sécuriser que le SHA/MD


Veuillez vous connecter ou créer un compte pour poster une réponse