IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Crypt() et $Salt


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Crypt() et $Salt
    Bonjour,

    J'ai lu que MD5 n'était plus sûr comme technique pour stocker les mots de passes. En particulier contre les attaques par force brute sur la sortie (càd supposant que le hacker ait volé le(s) mot de passe crypté(s))

    Sur le site de PHP.net on nous conseille d'utiliser plutôt la fonction Crypt() + salt.

    Mais je ne comprend pas en quoi c'est plus sécurisant contre les attaques par force brutes?

    Ou je n'ai pas compris ce qu'est une attaque brute?
    Ou je n'ai pas compris comment fonctionne Crypt() + salt ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    // Il suffit de boucler avec un code du genre non ?? étant donnée que le salt est dans le password crypté...
    if (crypt($password_supposed, $password_crypted ) == $password_crypted) {
       echo "Mot de passe :".$password_supposed;
    }
    ?>
    Moi j'ai compris que ça marchait comme ça la fonction crypt + salt. Mais je ne suis pas convaincu donc si quelqu'un pouvait m'éclairer, merci ^^

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Le concept est simple :
    Supposes que tu aies un mot de passe bateau : $pwd = '123456' à sauvegarder dans ta base de données.
    Tu sais que tu ne dois pas enregistrer tes mots de passe en clair et pour cela tu utilises une méthode de brouillage irréversible simple, allez soyons fous : md5() (sans salage).
    Cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $pwd = '123456';
    $crypted = md5($pwd);   // e10adc3949ba59abbe56e057f20f883e
    ?>
    Maintenant ta base de données a été piratée, ta méthode de brouillage est dévoilée et les vilains messieurs en veulent aux mots de passe de tes utilisateurs. Ils génèrent un dictionnaire de mots de passe bateaux qu'ils brouillent avec md5(). Une fois la liste générée, il ne leur reste plus qu'à comparer tes brouillages avec les leurs et une fois les correspondances trouvées, ils sauront quels mots de passe ont été utilisés en clair.

    Maintenant, tu es plus malin et tu décide de leur compliquer sévèrement la tâche. Pour cela tu génères une clé dite de "salage" que tu vas accoler au mot de passe de l'utilisateur avant de brouiller l'ensemble.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    // caractères ASCII
    $lower   = range(97, 122);  // 26 caractères
    $upper   = range(65, 90);   // 26 caractères
    $numeric = range(48, 57);   // 10 caractères
    $base    = array_map('chr', array_merge($lower, $upper, $numeric));
    shuffle($base);
     
    // clé de salage de 40 caractères uniques
    $salt = implode('', array_slice($base, 0, 40));
    echo $salt, '<br />';
     
    // clé de salage de 40 caractères
    $salt = '';
    for($i = 0; $i < 40; ++$i) {
       $salt .= $base[mt_rand(0, 51)];
    }
    echo $salt, '<br />';
    ?>
    On a obtenu 2 clés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bgcpQNu2ILA0hVkRTSUlqvdO48M6s9jamBZWoiXe
    W9hvxBZpTHTj1YnO9QAhR94tw9rLs1bIKnwENsxd
    On en choisit une des deux qu'on va utiliser pour saler nos mots de passe comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $pwd = '123456';
    $salt = 'W9hvxBZpTHTj1YnO9QAhR94tw9rLs1bIKnwENsxd';
    // on brouille l'ensemble : mot de passe + sel
    $crypted = md5($pwd.$salt);   // 7e14666b8f0bac16cb4c1ddbd6d552a3
    ?>
    Comme tu peux le voir pour retrouver tes mots de passe en clair, le dictionnaire de piratage devra contenir le mot suivant : 123456W9hvxBZpTHTj1YnO9QAhR94tw9rLs1bIKnwENsxd afin de générer le même résultat une fois passé à la moulinette de la fonction md5(). Tu avoueras que c'est déjà sacrément plus compliqué.
    Pour tester l'identification de tes utilisateur, tu accoles ta clé de salage à leur saisie et tu passes l'ensemble à la fonction md5().
    Tu recherches ensuite dans ta base, l'existence d'un utilisateur répondant au critère : $login et $crypted = md5($pwd.$salt) comme indiqué plus haut.

    Ensuite, tu peux très bien mélanger plusieurs méthodes en fonction de ce qui est recherché : réversibilité, salage, algorithme cryptographique, longueur de clé de cryptage...
    La fonction crypt() est conçue pour faciliter tous ces aspects. Quelques paramètres et hop tu as un résultat quasiment incassable.
    Pas la peine de se pencher sur les mathématiques (très complexes, crois-moi) sous jacentes à tout ça.

    J'espère t'avoir montré simplement l'utilité et surtout l'importance de bien choisir soigneusement les clés de salage et ceci quelque soit la méthode de cryptage utilisée.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Je commence à mieux y voir en passant la soirée un peu partout sur les forums

    Je me remets un peu au php...
    J'étais toujours avec mon md5 sans salage comme j'ai appris à mes début en php il y a presque 7ans... En tout cas je ne connaissais pas le "salage". Un grain de sel bien placé + un algo plus lourd à exécuter (voir légèrement modifier) ça peut perturber les outils "classique" des hackers les obligeant soit à les modifier (s'acharner) soit à nous laisser tranquille.

    Quand on y pense c'est plutôt logique Mais bon pour moi ça restera toujours magique un hackers qui récupère toutes les infos d'une BD.
    Je n'ai jamais vu de mes yeux vu (lu comment faire) mais je sais que c'est déjà arrivé car je lis la presse ....(et même chez les plus grand...)

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Fait les exos de WabLab ça t'aidera à mieux comprendre et corriger les failles courantes

    http://www.wablab.com/hackme


Discussions similaires

  1. Sécurisé les mots de passes avec crypt($str, $salt)?
    Par PierreDv dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/05/2013, 16h25
  2. [Crypt]Fonction simple de cryptage des données
    Par Agoye dans le forum Sécurité
    Réponses: 5
    Dernier message: 30/08/2006, 19h35
  3. Base de données cryptées ?
    Par dahwoud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 11/10/2004, 14h59
  4. Identification via un LDAP, password crypté
    Par brice.antoine dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 15/06/2004, 13h04
  5. [procedure stockée] objet crypté
    Par hawax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/04/2004, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo