Le hachage est une fonction d'une chaîne de bits (généralement de longueur variable) à une autre chaîne de bits (généralement plus petite et de longueur fixe).
Le hachage est utilisé dans les bases de données pour la récupération de données, et dans structures de données de mémoire appelées tables de hachage. Cela nous permet de réduire des données arbitraires, telles qu'une chaîne de caractères ou un objet compliqué avec de nombreux champs, à un nombre binaire qui peut ensuite être utilisé directement comme index dans un tableau clairsemé pour récupérer les données associées (avec quelques détails pour gérer le hachage collisions).
Les fonctions de hachage utilisées de la manière ci-dessus sont des "cousins" des fonctions de hachage cryptographiques. Ils sont conçus pour répondre à différentes exigences. Ils doivent être rapides à calculer et obtenir une bonne distribution.
Dans l'informatique sécurisée, les hachages cryptographiques sont utilisés pour digérer les données en une petite chaîne binaire représentative. Les fonctions cryptographiques ont des exigences différentes. Ils sont conçus pour être difficiles à inverser (pour être des fonctions "trappe" ou "unidirectionnelle"). Non seulement cela, mais une exigence importante est qu'il doit être difficile de trouver, pour un texte en clair et une valeur de hachage donnés, un autre texte en clair qui produit le même hachage.
Le hachage peut être utilisé non seulement pour les mots de passe, mais comme somme de contrôle pour vérifier l'intégrité des données et dans le cadre de la mise en œuvre de signatures numériques. Pour signer numériquement un grand document, nous devons simplement hacher le document pour produire un "digest" (un nom utilisé pour la sortie d'une fonction de hachage, lorsque quelque chose de très long est haché). Ensuite, juste ce condensé est transmis au système de cryptage à clé publique pour produire une signature. Vous pouvez y voir la faiblesse: que se passe-t-il si un attaquant réussit à produire un document qui a le même condensé? Ensuite, il semble que la signature originale produite sur le document authentique est en fait la signature d'un document contrefait: une falsification de transplantation de signature a été effectivement perpétrée.
Le hachage de mot de passe permet aux systèmes de ne pas stocker la version en texte brut d'un mot de passe, mais leur permet de vérifier si l'utilisateur essayant d'obtenir une entrée connaît ce mot de passe. Non seulement le hachage permet aux systèmes de ne pas stocker les mots de passe en texte brut (ce qui devrait être très soigneusement gardé), mais il permet également la possibilité que même si les hachages sont exposés publiquement, les mots de passe soient toujours sécurisés (de la même manière que la crypto clé publique systèmes peuvent révéler des clés publiques). Bien qu'en pratique, les hachages soient néanmoins protégés de l'accès public: par exemple les fichiers / etc / shadow
sur des systèmes de type Unix, complétant les fichiers / etc / passwd
lisibles par le monde.
La fonction de hachage est tout sauf aléatoire. Cependant, la randomisation est utilisée pour contrecarrer les attaquants qui construisent de gros dictionnaires de mots de passe et de hachages, qui leur permettent de rechercher un code de hachage et de récupérer le mot de passe correspondant.
Pour hacher un mot de passe de manière plus sécurisée, nous pouvons simplement ajouter quelques bits aléatoires appelés un "sel". Différents sels ajoutés au même mot de passe, bien sûr, conduisent à des hachages différents (avec un peu de chance ou pas de collisions).
Si le sel aléatoire est, disons, 32 bits de large, cela signifie qu'en théorie, un mot de passe peut hacher de plus de quatre milliards de façons différentes, ce qui rend très peu pratique d'avoir un dictionnaire précalculé de tous les hachages possibles d'un grand nombre de mots de passe.
Bien sûr, lorsque l'utilisateur est authentifié, il ne sait rien de ce sel. Ce n'est pas grave car le sel est stocké avec le hachage dans le profil de l'utilisateur (souvent, combiné avec le hachage dans une seule chaîne de bits compacte). Lorsque l'entrée du mot de passe de l'utilisateur est en cours de validation, le sel est ajouté au mot de passe saisi, de sorte que le hachage est effectué avec le sel correct. Si le mot de passe est correct, le hachage correspondra, puisque le sel utilisé est également le bon, ayant été extrait du profil de l'utilisateur.
C'est ainsi que le caractère aléatoire est incorporé dans le hachage des mots de passe, tout en lui permettant de fonctionner.
Ce qui rend les hachages difficiles à déchiffrer, c'est qu'ils sont construits à partir de fonctions «trappe» ou «à sens unique» . En mathématiques, il existe de nombreux exemples de telles choses. Par exemple, un simple ajout est une trappe. Si nous ajoutons des nombres entiers pour produire une somme, il est impossible de récupérer les nombres originaux, ne connaissant que la somme.
Les hachages de mot de passe ne sont pas des mots de passe chiffrés. Si un attaquant a le hachage et le sel d'un mot de passe, et parvient à deviner le mot de passe, alors il peut facilement le confirmer, exactement de la même manière que le logiciel d'authentification de connexion le fait: il exécute le mot de passe plus le sel via la fonction de hachage et voit que le hachage correct émerge.