web-dev-qa-db-fra.com

Qu'est-ce que le SEL et comment l'utiliser?

J'ai fait des recherches et je ne sais toujours pas ce qu'est un "sel" et comment l'utiliser/le mettre en œuvre. Désolé pour la question noobish, je suis auto-apprenant php.

41
Drewdin

Je ne suis certainement pas un expert, mais la réponse très courte est que "saler" une ligne de texte signifie coller quelques caractères supplémentaires à la fin. Vous pouvez saler "salt" avec "abcdefg" pour obtenir "saltabcdefg". Cela peut être utile si "salt" se trouve être un mot de passe que vous aimeriez rendre plus difficile à deviner.

En règle générale, le mot de passe + le sel sont transformés ("hachés") par un processus difficile à inverser en une chaîne complètement différente. Cette chaîne transformée est ensuite stockée en tant que mot de passe, avec le texte en clair du sel, et le texte brut d'origine du mot de passe proprement dit est jeté. Lorsque vous souhaitez vérifier que quelqu'un a entré le mot de passe correct, vous combinez tout ce qu'il a tapé avec le sel répertorié dans le fichier de mot de passe, puis hachez le résultat. Si le résultat correspond au hachage de mot de passe que vous avez enregistré, alors vous savez qu'ils ont mis le bon mot de passe.

La mise en œuvre d'un sel peut être aussi simple que de choisir une chaîne pour servir de sel, puis de vous assurer de le suivre. Mais, vous pouvez varier le sel avec chaque mot de passe, puis vous devrez avoir un moyen de garder une trace des combinaisons mot de passe + sel ainsi que de générer les variations. Bien sûr, vous voudrez probablement hacher le mot de passe plutôt que d'enregistrer le texte brut du mot de passe, et vous devrez donc choisir une fonction de hachage. À ce stade, le problème est passé de la salaison appropriée à la mise en œuvre d'un système de sécurité par mot de passe.

Pour PHP, vous voudrez peut-être voir comment certains frameworks ont implémenté cela. Deux liens rapides, pour CakePHP et Zend, respectivement:

http://www.jotlab.com/2010/04/18/cakephp-Rainbow-table-protection-behaviour/

http://www.zimuel.it/blog/2009/07/build-a-secure-login-with-zend-framework/

43

Lorsque j'ai posé cette question pour la première fois, il y a de nombreuses années, on m'a répondu: "Que fait le sel pour la nourriture?" La réponse est qu'elle ajoute de la variété aux aliments. L'idée derrière le sel cryptographique est que c'est quelque chose que vous ajoutez à la fin ou au début d'une chaîne afin que deux mots de passe identiques ne hachent pas la même valeur cryptographique.

Considérez ceci - si j'avais un mot de passe qui était vraiment commun, comme "hello123", puis qu'il était haché exactement au même hachage cryptographique que tous les autres mots de passe "hello123", ne pourrais-je pas simplement regarder dans la liste des mots de passe hachés pour voir qui d'autre avait le même hachage cryptographique et utilise mon mot de passe sur son compte?

25
jwir3

Eh bien, c'est dans les commentaires, merci ceejayoz

http://en.wikipedia.org/wiki/Salt_ (cryptographie)

Un sel est quelque chose que vous ajoutez à une chaîne avant de le hacher, il ajoute une autre couche de sécurité aux mots de passe et autres.

6
Neal

Un sel est une chaîne (courte) qui est ajoutée à la chaîne que vous souhaitez chiffrer ou hacher. Un exemple:

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>

Cela ajoute de la sécurité au hachage, car il est peu probable que "everythingyouwant_abcdefg" soit déjà stocké dans une base de données de hachage ( http://en.wikipedia.org/wiki/Rainbow_tables )

6
Sutuma

Pour certaines raisons. Les sels sont généralement difficiles à saisir pour les débutants en cryptographie. Une fois qu'il a cliqué, le concept est extrêmement simple. Jetez un œil à cet article. Je pense que cela explique le concept mieux que la plupart.

http://cryptodox.com/Salt_%28cryptography%29

0
Matthew Vines

Pimentons un peu les choses en combinant plusieurs algorithmes de hachage, en créant un algorithme de double hachage:

$password = "myPassword";
$salt = sha1(md5($password)).'k32duem01vZsQ2lB8g0s'; 
$password = md5($password.$salt);

Comme vous pouvez le voir, nous avons d'abord haché le mot de passe en utilisant un algorithme de double hachage (md5 et sha1) et en concaténant avec une valeur de sel créée par clé. Après cela, nous avons combiné le vrai mot de passe avec la valeur de sel générée et l'avons haché à nouveau avec md5. L'avantage est que cette valeur alt est aléatoire et qu'elle change, ce qui la rend presque impossible à casser. Je veux dire, si vous pouvez attendre un million d'années et avoir un super ordinateur entre les mains, essayez de le casser.

0
Lead Developer