Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 16h07   #1
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 5
Points : 5
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 :
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 ^^
MicMac81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 17h32   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
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 :
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 :
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 :
1
2
bgcpQNu2ILA0hVkRTSUlqvdO48M6s9jamBZWoiXe
W9hvxBZpTHTj1YnO9QAhR94tw9rLs1bIKnwENsxd
On en choisit une des deux qu'on va utiliser pour saler nos mots de passe comme ceci :
Code :
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.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 21h56   #3
Invité régulier
 
Homme
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 5
Points : 5
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...)
MicMac81 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 22h24   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 219
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 219
Points : 8 598
Points : 8 598
Fait les exos de WabLab ça t'aidera à mieux comprendre et corriger les failles courantes

http://www.wablab.com/hackme

__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h03.


 
 
 
 
Partenaires

Hébergement Web