2010-12-04 23 views

Répondre

14

Un salt est une valeur qui est ajoutée à un mot de passe (ou un autre secret) que vous voulez hacher dans un sens. Cela signifie qu'il pourrait être avant, après ou quelque part à l'intérieur du mot de passe, tant que sa position et sa valeur sont cohérentes pour un mot de passe donné. Cela permet d'atténuer les attaques de dictionnaire - essentiellement des dictionnaires de mots de passe communs pré-hachés sans sel - d'être utilisé pour "deviner" un mot de passe à sens unique tant que l'attaquant ne connaît pas le hachage. Si chaque mot de passe a un hash différent, il est très difficile pour un attaquant de créer un dictionnaire optimisé pour cracker vos mots de passe (ils auraient besoin d'un dictionnaire pour chaque sel séparé et ils devraient aussi savoir où le sel était placé dans chaque mot de passe).

Bien sûr, pour que tout cela soit applicable, un attaquant doit avoir en premier lieu les hashs de vos mots de passe. Cela n'a rien à voir avec attaquer les mots de passe en les devinant à travers une invite de saisie.

En ce qui concerne spécifiquement MySQL si vous fournissez un sel lors du hachage d'un mot de passe, assurez-vous d'enregistrer ce que ce sel était quelque part. Ensuite, quand un utilisateur tente une authentification, vous combinez cette valeur de sel enregistrée avec le mot de passe (pendant l'appel à crypt par exemple) et si le hash correspondant correspond alors il a entré le mot de passe correct. (Notez que le hachage d'un mot de passe n'est à aucun moment inversé, donc d'une manière.)

4

Un sel est ajouté au texte en clair (ou vice versa) avant le hachage afin de rendre les recherches de dictionnaire plus onéreuses.

+0

Pouvez-vous me donner un exemple? –

+0

+1 - droit. Par exemple, cela signifie qu'un attaquant qui a accès à un tas de mots de passe hachés ne peut pas seulement SHA1-hacher un dictionnaire et le comparer à tous les mots de passe en vrac; à cause du sel, le hachage doit être refait (avec du sel correct) pour chaque mot de passe. –

9

sel est rien d'autre qu'une chaîne que vous attachez au mot de passe, que ce soit comme une constante, soit par un algorithme

ce qui le rend plus difficile pour quiconque a violé votre sécurité et avoir accès à votre mot de passe stocké, qui marques de retour à peu près impossible pour lui d'utiliser des dictionnaires arc en ciel pour déverrouiller ce que le vrai mot de passe est, qui, dans un point de vue hacker peut être utile car beaucoup de gens utilisent le même mot de passe dans beaucoup des sites diffrent

$salt = "this is a salt"; 
$password = 'this is an password'; 
$hash = sha1($salt.$password); 

Voilà comment vous pourriez fondamentalement sel un mot de passe

+0

Quel type de chaîne? –

+0

Alors quel serait le sel pour: sha1 $ 0e7eb $ f2353e34dd1811c3ce4af5c2b0f5cb43a04a16ce –

+1

@Noah: "0e7eb" –