L'actuel le plus voté à cette question déclare:
Un autre problème qui n'est pas tellement un problème de sécurité, bien qu'il soit lié à la sécurité, est l'échec complet et abject à faire la différence entre le hachage d'un mot de passe et le chiffrement . Le plus souvent trouvé dans le code où le programmeur essaie de fournir une fonctionnalité non sécurisée «Me rappeler 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 fonctionnalité dangereuse l'affiche fait-elle référence?
Réponses:
Le hachage est une fonction à sens unique (enfin, un mappage). 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. Tout ce que vous pouvez 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 une table arc-en-ciel , que vous pouvez contrebalancer en appliquant un sel au hachage avant de le stocker.
Le chiffrement est une fonction appropriée (bidirectionnelle). C'est réversible, vous pouvez décrypter la chaîne mutilée pour obtenir la chaîne d'origine si vous avez la clé.
La fonctionnalité dangereuse à laquelle il fait référence est que si vous cryptez les mots de passe, votre application a la clé stockée quelque part et un attaquant qui a accès à votre base de données (et / ou au code) peut obtenir les mots de passe d'origine en obtenant à la fois la clé et le texte crypté , alors qu'avec un hachage c'est impossible.
Les gens disent généralement que si un pirate possède votre base de données ou votre code, il n'a pas besoin d'un 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 plus grand risque en divulguant leurs mots de passe.
la source
Le hachage est une fonction à sens unique, ce qui signifie qu'une fois que vous avez haché un mot de passe, il est très difficile de récupérer le mot de passe d'origine du hachage. Le cryptage est une fonction bidirectionnelle, où il est beaucoup plus facile de récupérer le texte d'origine à partir du texte crypté.
Le hachage simple est facilement vaincu à l'aide d'une attaque par dictionnaire, où un attaquant pré-hache simplement chaque mot d'un dictionnaire (ou chaque combinaison de caractères jusqu'à une certaine longueur), puis utilise 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 beaucoup plus difficile pour un attaquant d'utiliser cette méthode. Ils auraient essentiellement besoin de créer un nouveau dictionnaire unique pour chaque valeur de sel que vous utilisez, ce qui ralentirait terriblement leur attaque.
Il n'est pas sûr de stocker des mots de passe à l'aide d'un algorithme de chiffrement 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 chiffré, il est également plus facile pour un attaquant de faire de même.
la source
Comme le montre l'image ci-dessus, si le mot de passe est crypté, il s'agit toujours d'un secret caché où quelqu'un peut extraire le mot de passe en texte brut. Cependant, lorsque le mot de passe est haché, vous êtes détendu car il n'y a 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 vs hachés - Quel est le meilleur?
Le cryptage est-il bon?
Les mots de passe en texte brut peuvent être cryptés à l'aide d'algorithmes de cryptage symétriques tels que DES, AES ou avec tout autre algorithme et être 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 comparera avec le mot de passe fourni par l'utilisateur pour l'égalité. 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 quelqu'un obtient d'une manière ou d'une autre l'algorithme cryptographique avec la clé utilisée par votre application, il pourra voir tous les mots de passe utilisateur stockés dans votre base de données par décryptage. «C'est la meilleure option que j'ai», peut crier un développeur de logiciel, mais y a-t-il une meilleure solution?
Fonction de hachage cryptographique (unidirectionnelle uniquement)
Oui, il est possible que vous ayez manqué le point ici. Avez-vous remarqué qu'il n'est pas nécessaire de déchiffrer et de comparer? S'il y a une approche de conversion à sens unique où le mot de passe peut être converti en un mot converti, mais l'opération inverse (génération du mot de passe à partir du mot converti) est impossible. Maintenant, même si quelqu'un accède à la base de données, il n'y a aucun moyen que les mots de passe soient reproduits ou extraits à l'aide des mots convertis. Dans cette approche, il est pratiquement impossible 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?
la source
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 et avec le hachage, vous ne pourrez pas revenir du résultat final à la valeur d'origine.
la source
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 le hachage ne l'est pas.
Une fonction de cryptage prend généralement des entrées et produit une sortie cryptée de même taille 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 d'une taille fixe également.
Bien qu'il ne soit pas possible de prendre un résultat haché et de le «déshacher» pour récupérer l'entrée d'origine, vous pouvez typiquement 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 n'est peut-être pas nécessaire que vous connaissiez réellement le mot de passe d'origine, uniquement son hachage, et vous pouvez force brute votre chemin vers quelque chose qui correspondra, même s'il s'agit d'un mot de passe différent.
Les fonctions de hachage sont généralement créées pour minimiser les risques de collisions et rendre difficile le calcul de quelque chose qui produira le même hachage que quelque chose d'autre.
la source
Idéalement, vous devriez faire les deux.
Hachez d'abord le mot de passe pour la sécurité à sens unique. Utilisez un sel pour plus de sécurité.
Ensuite, cryptez le hachage pour vous protéger contre les attaques de dictionnaire si votre base de données de hachages de mots de passe est compromise.
la source
Hashing :
C'est un algorithme à sens unique et une fois haché, il ne peut pas revenir en arrière et c'est son avantage contre le cryptage.
Chiffrement
Si nous effectuons un cryptage, il y aura une clé pour le faire. Si cette clé devait être divulguée, tous vos mots de passe pourraient être décryptés facilement.
D'un autre côté, même si votre base de données sera piratée ou si l'administrateur de votre serveur a pris des données de DB et que vous avez utilisé des mots de passe hachés, le pirate ne pourra pas casser ces mots de passe hachés. Cela serait en fait pratiquement impossible si nous utilisons le 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.
MD5 - Utilise la fonction de hachage Message Digest Algorithm 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 1990 et n'est pas une option privilégiée aujourd'hui.
SHA1 - Utilise le hachage de l'algorithme de hachage de sécurité (SHA1) publié en 1995. Le hachage de sortie a une longueur de 160 bits. Bien que la plus largement utilisée, ce n'est pas une option préférée aujourd'hui.
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 de sortie sont respectivement de 256, 384 et 512 bits, comme l'indiquent les noms des fonctions de hachage.
la source
Aussi correctes que puissent être les autres réponses, dans le contexte de la citation, le hachage est un outil qui peut être utilisé pour sécuriser les 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.
la source
Voici une raison pour laquelle vous voudrez peut-être utiliser l'un sur l'autre: la récupération du mot de passe.
Si vous ne stockez qu'un hachage du mot de passe d'un utilisateur, vous ne pouvez pas proposer une fonction de «mot de passe oublié».
la source