Ne vous limitez pas en analysant uniquement l'attaque de l'extérieur. Vous devez voir la situation dans son ensemble ... pensez aux mesures de sécurité comme à des couches d'oignon. Vous en empilez autant que vous le pouvez dans l'espoir de fermer n'importe quel angle d'attaque. Les hachages de mots de passe sont l'une de ces couches.
Le piratage d'une base de données est-il aussi simple? Je veux dire au lieu de trouver de nouvelles façons de hacher, pourquoi ne peuvent-ils pas rendre leur base de données plus sécurisée ou "à l'épreuve du piratage"?
Peu importe à quel point il est difficile de pirater le base de données. Considérez que le hachage de mot de passe est censé protéger le mot de passe même de l'administrateur système ou de la base de données.
Notez que même si vous essayez de le faire, il n'est pas forcément facile de protéger la base de données de mots de passe. Comment la protégeriez-vous? Avec un autre mot de passe? Où stockeriez-vous ce mot de passe principal? Comment protégeriez-vous le mot de passe principal contre que quelqu'un puisse tout lire sur le système?
Si un pirate parvient à pirater une base de données, pourquoi voudrait-il connaître les mots de passe hachés?
Eh bien, pour essayer de les attaquer.
Notez comment les mots de passe sont utilisés: l'utilisateur légitime remet un nom d'utilisateur et un mot de passe en texte clair à votre écran de connexion, le texte en clair est puis haché et comparé au hachage du mot de passe.
Chaque attaquant peut faire exactement la même chose, sauf que le faire sur l'écran / l'invite de connexion est inefficace - cela prend du temps et est facilement détecté; de nombreux systèmes verrouillent un compte après quelques mauvaises tentatives.
Ainsi, lorsque l'attaquant obtient la liste des hachages de mots de passe, il peut faire le même hachage dans son propre programme - d'une rapidité aveuglante, et surtout avec "dicitonary" ou des attaques "arc-en-ciel", qui échangent RAM / stockage contre le temps.
Donc, tous les champs ne devraient-ils pas être hachés?
Vous ne pouvez pas tout hacher car votre application a besoin de connaître la valeur des autres champs, simplement. Il est difficile de récupérer la valeur d'une version hachée, même pour un utilisateur légitime.
Mais en fait, il y a il y a des bases de données qui font quelque chose comme ça - elles chiffrent (pas hachage) aussi les données réelles. Vous voulez évaluer si cela en vaut la peine du point de vue des performances, et vous devez ensuite vous assurer que le cryptage offre réellement une sécurité réelle. Par exemple, vous devez vous assurer que votre clé reste protégée pendant que la base de données doit y avoir accès, et ainsi de suite.
Le chiffrement n'est pas approprié pour les mots de passe car nous ne voulons en fait pas que les mots de passe puissent être déchiffrés (mêmes idées qu'au début => à l'intérieur des jobs, et la difficulté à rendre la clé de chiffrement plus sécurisée que les mots de passe que vous vouliez sécuriser en premier lieu).