J’ai voulu sécuriser le Grub avec un mot de passe au démarrage, stocké en hash (algorithme PBKDF2) dans un fichier de configuration.
Pour cela, j’utilise la commande grub-mkpasswd-pbkdf2 et je mets le mot de passe 1234 (pour l’exemple ).
j’obtiens donc un hash.
Et juste par curiosité, j’ai voulu refaire la commande avec exactement le même mot de passe et j’obtiens un hash complètement différent!
Alors je ne m’y connais pas très bien en cryptographie, mais je pensais que pour un même mot de passe le hash devait être similaire auquel cas on ne pouvait pas les comparer… Est-ce que vous auriez une explication à ça ?
Pour compléter, c’est utile pour éviter de pouvoir créer des dictionnaires de hash. Si quelqu’un te vole ton hash, pour pouvoir trouver ton mot de passe par brute force, il est obligé de tout calculer à partir de ton sel
Cette commande utilise effectivement un sel pour le hash.
La documentation mentionne qu’il est possible de paramétrer la longueur du sel.
On retrouve également dans le code source1 la génération du sel à partir de données aléatoires, qui est ensuite utilisé pour hasher le mot de passe quelques lignes plus loin.
Édit. : un peu grillé, mais tant pis.
Pas forcément exactement la même version que la tienne, mais c’est sûrement quasi-identique quoi qu’il en soit.↩
Merci pour vos réponses, donc il y a un sel aléatoire (je ne sais pas vraiment ce que c’est) qui ajoute en complexité et qui crée donc un hash différent à chaque fois. Mais du coup comment peuvent se comparer les hash ?
@RDTL: Je pense que tu n’as pas compris ce qu’est le sel ni sont but.
Le sel, c’est un nombre aléatoire (quelques octets). Que tu ajoutes au mdp avant de le hasher.
Dans la sortie de grub-mkpasswd-pbkdf2, il y a toute une partie qui n’est pas le hash et qui indique simplement comment est générer le bon hash.
Ici, tu as toutes les informations nécessaires pour à partir d’un mot de passe, générer le même hash. Notamment le sel ("\x4B\x12").
Par exemple si le mdp est "1234", le sel pourrait être "4B12" (en hexadecimal).
Ce qui sera hasher sera : "1234\x4B\x12", la fonction de hashage ici est SHA512.
Le résultat de la fonction de hashage sera par exemple : 08ee930e177b84c0d7e0fe19bcc096821d4d48a3021da869d678d319f91030e3ec8905d0ffe3abc5b74f00823627a0ccc0ff0a2b3bcf150fe2e504139cfbcf6c (hexadecimal encore).
Cette valeur sera hasher encore et encore le nombre de fois qu’il faut (le nombre d’itérations spécifié). Ici, c’est 1000 fois. Le but étant que ça prenne du temps.
Donc maintenant supposons que tu entres ton mdp. Grub va prendre ton mdp, lui ajouter le sel, hasher le tout le nombre de fois qu’il faut. Et si le résultat est égale à ce qui est stocker alors c’est que tu as tapé le bon mot de passe.
L’idée du sel, c’est que un attaquant ne peut pas créer un base de mot de passe pré-hashé. Par exemple, je pers une journée à hasher tous les mots de passe courants type : "ILoveYou" et "c00kies". Pour cela, j’utilise SHA512 avec 1000 itérations.
Quand je voudrais essayer de casser le mdp de ce hash, cette table ne me servira à rien ! Car même si c’est un mdp courant il y a un hash ajouter avant de hasher.
Une solution serait de hasher tous les mots de passe courants avec tous les sels possibles. Sauf que ça va augmenter la taille de ma table de mot de passe pré-hasher. Si le sel fait 1bit, alors ça double la taille de ma table. Par défaut le sel de grub fait 1024bits. Donc la taille de ma table de mot de passe pré-hasher sera multipliée par 21024, ce qui est totalement au delà du nombre d’atomes dans l’univers.
Une table de mot de passe pré-hasher s’appelle une rainbow table. Le sel sert précisément à empêcher l’usage de ce type de table.
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte