web-dev-qa-db-fra.com

Différence entre le hachage d'un mot de passe et son chiffrement

Le vote actuel le plus voté à cette question dit:

Un autre problème qui n’est pas tant un problème de sécurité, bien qu’il soit lié à la sécurité, est un échec total pour la différence entre le hachage d’un mot de passe et son chiffrement . Le plus souvent trouvé dans le code où le programmeur essaie de fournir la fonctionnalité non sécurisée "Rappelez-moi mon mot de passe".

Quelle est exactement cette différence? J'ai toujours eu l'impression que le hachage était une forme de cryptage. Quelle est la fonctionnalité non sécurisée à laquelle fait référence l'affiche?

124
Claudiu

Le hachage est une fonction à sens unique (enfin, une cartographie). C'est irréversible, vous appliquez l'algorithme de hachage sécurisé et vous ne pouvez pas récupérer la chaîne d'origine. Le mieux que vous puissiez faire est de générer ce que l'on appelle "une collision", c'est-à-dire de trouver une chaîne différente qui fournit le même hachage. Les algorithmes de hachage cryptographiquement sécurisés sont conçus pour empêcher l’apparition de collisions. Vous pouvez attaquer un hachage sécurisé en utilisant un table Rainbow , que vous pouvez neutraliser en appliquant un sel au hachage avant de le stocker.

Le cryptage est une fonction appropriée (bidirectionnelle). C'est réversible, vous pouvez déchiffrer la chaîne mutilée pour obtenir la chaîne d'origine si vous avez la clé.

La fonctionnalité non sécurisée à laquelle il est fait référence est que si vous chiffrez les mots de passe, votre application enregistre la clé quelque part et qu'un attaquant ayant accès à votre base de données (et/ou à son code) peut obtenir les mots de passe d'origine en récupérant à la fois la clé et le texte chiffré. , alors qu'avec un hash c'est impossible.

Les gens disent généralement que si un pirate informatique possède votre base de données ou votre code, il n'a pas besoin de mot de passe. La différence est donc sans objet. C'est naïf, car vous avez toujours le devoir de protéger les mots de passe de vos utilisateurs, principalement parce que la plupart d'entre eux utilisent le même mot de passe encore et encore, les exposant à un risque plus élevé en divulguant leurs mots de passe.

201
Vinko Vrsalovic

Le hachage est une fonction à sens unique, ce qui signifie qu'une fois le mot de passe haché, il est très difficile de récupérer le mot de passe d'origine à partir du hachage. Le cryptage est une fonction à double sens, dans laquelle il est beaucoup plus facile de récupérer le texte original à partir du texte crypté.

Le hachage simple est facilement vaincu en utilisant une attaque par dictionnaire. Un attaquant pré-hachait simplement chaque mot d'un dictionnaire (ou toute combinaison de caractères d'une certaine longueur), puis utilisait ce nouveau dictionnaire pour rechercher des mots de passe hachés. L'utilisation d'un sel aléatoire unique pour chaque mot de passe haché stocké rend l'utilisation de cette méthode beaucoup plus difficile pour un attaquant. Ils auraient fondamentalement besoin de créer un nouveau dictionnaire unique pour chaque valeur de sel que vous utilisez, ce qui ralentirait considérablement leur attaque.

Il est dangereux de stocker des mots de passe à l'aide d'un algorithme de cryptage, car s'il est plus facile pour l'utilisateur ou l'administrateur de récupérer le mot de passe d'origine à partir du texte crypté, il est également plus facile pour un attaquant de faire de même.

31
Bill the Lizard

Encrypted vs Hashed Passwords

Comme indiqué dans l'image ci-dessus, si le mot de passe est crypté, il s'agit toujours d'un secret caché dans lequel une personne peut extraire le mot de passe en texte brut. Cependant, lorsque le mot de passe est haché, vous êtes décontracté car il n'existe pratiquement aucune méthode pour récupérer le mot de passe à partir de la valeur de hachage.


Extrait de mots de passe cryptés ou hachés - Quel est le meilleur?

Le cryptage est-il bon?

Les mots de passe en texte brut peuvent être chiffrés à l'aide d'algorithmes de chiffrement symétriques tels que DES, AES ou avec tout autre algorithme, puis stockés dans la base de données. Lors de l'authentification (confirmant l'identité avec le nom d'utilisateur et le mot de passe), l'application déchiffrera le mot de passe crypté stocké dans la base de données et le comparera avec le mot de passe fourni par l'utilisateur. Dans ce type d'approche de gestion des mots de passe, même si quelqu'un a accès aux tables de la base de données, les mots de passe ne seront pas simplement réutilisables. Cependant, il y a aussi une mauvaise nouvelle dans cette approche. Si, d'une manière ou d'une autre, quelqu'un obtient l'algorithme cryptographique avec la clé utilisée par votre application, il/elle pourra afficher tous les mots de passe utilisateur stockés dans votre base de données par déchiffrement. "C'est la meilleure option que j'ai", peut dire un développeur de logiciel, mais existe-t-il un meilleur moyen?

Fonction de hachage cryptographique (à sens unique)

Oui, peut-être avez-vous manqué le point ici. Avez-vous remarqué qu'il n'y a aucune obligation de déchiffrer et de comparer? S'il existe une approche de conversion unidirectionnelle dans laquelle le mot de passe peut être converti en un mot converti, l'opération inverse (génération du mot de passe à partir du mot converti) est impossible. Maintenant, même si quelqu'un a accès à la base de données, il est impossible que les mots de passe soient reproduits ou extraits à l'aide des mots convertis. Dans cette approche, il n’y aura guère de possibilité que certains connaissent les mots de passe top secrets de vos utilisateurs; et cela protégera les utilisateurs utilisant le même mot de passe dans plusieurs applications. Quels algorithmes peuvent être utilisés pour cette approche?

12
lkamal

J'ai toujours pensé que le chiffrement pouvait être converti dans les deux sens, de manière à ce que la valeur finale puisse vous ramener à la valeur d'origine. Avec Hashing, vous ne pourrez plus revenir du résultat final à la valeur d'origine.

8
CheGueVerra

Les algorithmes de hachage sont généralement de nature cryptographique, mais la principale différence est que le chiffrement est réversible par déchiffrement et que le hachage ne l’est pas.

Une fonction de cryptage prend généralement une entrée et produit une sortie cryptée de taille identique ou légèrement supérieure.

Une fonction de hachage prend une entrée et produit une sortie généralement plus petite, généralement de taille fixe également.

Bien qu'il ne soit pas possible de prendre un résultat haché et de le "décoiffer" pour récupérer l'entrée d'origine, vous pouvez généralement forcer votre chemin vers quelque chose qui produit le même hachage.

En d’autres termes, si un schéma d’authentification prend un mot de passe, le hache et le compare à une version hachée du mot de passe requis, il peut ne pas être nécessaire que vous connaissiez réellement le mot de passe original, mais seulement son hachage, et vous pouvez forcer brutalement votre chemin à quelque chose qui va correspondre, même si c'est un mot de passe différent.

Les fonctions de hachage sont généralement créées pour minimiser les risques de collision et rendre difficile le calcul de quelque chose produisant le même hachage que quelque chose d'autre.

Hashing :

C'est un algorithme à sens unique et une fois haché ne peut pas revenir en arrière et c'est son point fort contre le cryptage.

Cryptage

Si nous effectuons le cryptage, il y aura une clé pour le faire. Si cette clé devait être divulguée, tous vos mots de passe pourraient être déchiffrés facilement.

D'autre part, même si votre base de données sera piratée ou si votre administrateur de serveur a pris des données de la base de données et que vous avez utilisé des mots de passe hachés, le pirate ne pourra pas les déchiffrer. Cela serait pratiquement impossible si nous utilisons un hachage avec du sel approprié et une sécurité supplémentaire avec PBKDF2.

Si vous voulez voir comment écrire vos fonctions de hachage, vous pouvez visiter ici .

Il existe de nombreux algorithmes pour effectuer le hachage.

  1. MD5 - Utilise la fonction de hachage de l'algorithme de résumé de message 5 (MD5). Le hachage de sortie a une longueur de 128 bits. L’algorithme MD5 a été conçu par Ron Rivest au début des années 90 et n’est plus une option à l’heure actuelle.

  2. SHA1 - Utilise un hachage SHA1 (Algorithme de hachage de sécurité) publié en 1995. Le hachage de sortie a une longueur de 160 bits. Bien que le plus largement utilisé, ce n'est pas une option préférée aujourd'hui.

  3. HMACSHA256 , HMACSHA384 , HMACSHA512 - Utilisez les fonctions SHA-256, SHA-384 et SHA-512 de la famille SHA-2. SHA-2 a été publié en 2001. Les longueurs de hachage en sortie sont respectivement de 256, 384 et 512 bits, comme l’indiquent les noms des fonctions de hachage.

3
Rahul Garg

Idéalement, vous devriez faire les deux.

Commencez par hacher le mot de passe pour une sécurité à sens unique. Utilisez un sel pour plus de sécurité.

Cryptez ensuite le hachage pour vous défendre contre les attaques par dictionnaire si votre base de données de hachages de mots de passe est compromise.

3
LogicMagic

Aussi correctes que puissent être les autres réponses, dans le contexte dans lequel se trouve la citation, le hachage est un outil qui peut être utilisé pour sécuriser des informations, le cryptage est un processus qui prend des informations et rend très difficile la lecture/l'utilisation par des personnes non autorisées.

1
Peter Coulton