Authentification + Salt ?
Bonjour à tous,
J'essaie de comprendre le principe de l'application d'un "salt" comme mesure supplémentaire de protection lors de l'authentification.
J'ai lu des explications sur ce site : http://www.opensecuritylab.org/stori...ng-salt-in-php
Mais je ne comprend toujours pas en quoi ce système sécuritaire.
Suppossons une table
Utilisateur
MotDePasse
Salt
Mon utilisateur écrit le mot de passe : ABCDE
Je lui applique après un salt disons : '123456789987654321';
Ce qui me donne comme chaîne : ABCDE123456789987654321
Ce qui donne bien entendu, un hashing différent de ABCDE, mais dans ma validation qui valide si l'utilisateur / mot de passe est bien le bon, je vais quand même recevoir le mot de passe ABCDE, lui appliquer le Salt sauvegarder en mémoire pour comparer les hash non ?
Donc si un script essaie avec un dictionnaire, la chaine ABCDE. Ma validation, va considèrer comme correct le mot de passe.... Non ?
Merci d'éclairer ma lanterne, car je voudrais bien améliorer la sécurité de mes usagers mais je ne comprends bien cette méthode....
PBKDF2 la solution miracle ?
Bonjour,
Cela fait plusieurs mois que j’essaie de cherche l'etat de l'art en sécurité notamment pour le cryptage des mots de passes.
Voila les problèmes de sécurités pour les mots de passes :
-Le mot de passe ne doit pas être décryptable. La raison est que souvent les utilisateurs utilisent leur même mot de passe pour plusieurs sites. Il faut éviter que si un hacker décrypte le mot de passe utilisé sur un petit site puisse utiliser le même mot de passe pour se connecter au compte en banque de ce même utilisateur. Pour cela, il faut utiliser une fonction de hash.
-Si un hacker récupère la liste des mots de passe, il peut utiliser un table qui lui donne pour chaque hash le mot de passe correspondant. Ces tables se base sur un salt particulier. Pour contourner ce système, il faut saler le mot de passe en utilisant un salage différent pour chaque utilisateur. Le salage n'a pas besoin d'être secret. Il peut être stocké en claire dans la base de donnée. Il n'est pas nécessaire de régénérer le salage si l'utilisateur change de mot de passe. Avec cette technique, cela oblige l'attaquant à soit attaquer par force brute, soit tester par dictionnaire.
-Pour éviter les problèmes d'attaque par dictionnaire, il faut mettre des règles sur les mots de passe, du style "minimum 3 lettres et 9 chiffres", ou "pas le mot admin, ni le même mot de passe que le login".
-Ensuite, pour contrer la force brute, il reste à utiliser une méthode de hachage. Quel est la meilleur méthode de hachage ? Certains disent que c'est SHA256 ou SHA512. J'ai découvert grâce au magasine que c'est PBKDF2. Il est utiliser par WPA, et par les iphone. C'est une méthode de hachage par itération. Il prend un algorithme de hachage, disons SHA1, et il rehache plusieurs fois. Le but c'est de ralentir le cryptage. Par exemple WPA fait 4096 itérations. Iphone fait 10.000 itérations. Le nombre d’itération dépends du temps de calcul de la machine pour calculer la fonction de hachage pour le processus d'identification. J'ai fait un essai pour comparer sha512 et PBKDF2 avec 4096 itérations. sha512 met 1 millisecondes, et PBKDF2 50 millisecondes. Autrement dit, un hacker mettra moins de temps pour calculer une table de hachage avec SHA512 que PBKDF2. (En 2010, le FBI n'a pas réussi a décrypter un disque dur qui utilisait ce type de cryptage).
Après, il y a comment sécuriser l'envoie du mot de passe du navigateur jusqu'au serveur (même cryptage que la base de donnée, cryptage asymétrique, SSL, ...), comment stocker une clef privé de façon sécurisée pour décrypter le mot de passe de la base de donnée.
Je ne comprends pas pourquoi il n'y a pas un endroit sur internet qui explique une fois pour toute ses règles, et d'autres que je ne connait pas.