Conclusion: SHA-1 est aussi sûr que quoi que ce soit contre preimage attaques, cependant il est facile à calculer, ce qui signifie qu'il est plus facile de monter un bruteforce ou attaque par dictionnaire. (La même chose est vraie pour les successeurs comme SHA-256.) Selon les circonstances, une fonction de hachage qui a été conçu pour être gourmand en ressources (comme bcrypt) pourrait être un meilleur choix.
Certaines personnes jettent dans des remarques comme "SHA-1 est cassé" beaucoup, donc je suis en train d'essayer de comprendre exactement ce que cela signifie. Supposons que j'ai une base de données de l'algorithme SHA-1 des mots de passe, et un attaquant avec un état de l'art SHA-1 rupture de l'algorithme et un botnet avec 100 000 machines obtient l'accès à elle. (Avoir le contrôle de plus de 100 ordinateurs à domicile signifie qu'ils peuvent faire sur 10^15 opérations par seconde). Combien de temps auraient-ils besoin de
- trouver le mot de passe d'un utilisateur?
- trouver le mot de passe d'un utilisateur donné?
- trouver le mot de passe de tous les utilisateurs?
- trouver un moyen pour ouvrir une session en tant qu'un des utilisateurs?
- trouver un moyen de se connecter en tant qu'utilisateur spécifique?
Comment est-ce que changer si les mots de passe sont salées? La méthode de salage (préfixe, suffixe, à la fois, ou quelque chose de plus compliqué comme xor-ing) de la matière?
Voici ma compréhension actuelle, après quelques recherches sur google. Merci de corriger dans les réponses si j'ai mal compris quelque chose.
- Si il n'y a pas de sel, un arc-en-ciel attaque immédiatement trouver tous les mots de passe (à l'exception de très longs).
- Si il y a un temps suffisamment long aléatoire sel, le moyen le plus efficace de trouver le mots de passe est une force brute ou par dictionnaire attaque. Ni collision ni preimage attaques sont d'une aide pour trouver le mot de passe réel, de sorte que les attaques cryptographiques contre SHA-1 ne sont d'aucune aide ici. Il n'a même pas d'importance quel algorithme est utilisé -, on pourrait même utiliser MD5 ou MD4 et les mots de passe serait tout aussi sûr (il y a une légère différence, car le calcul d'un hash SHA-1 est plus lent).
- Pour évaluer le degré de sécurité "tout comme le coffre-fort" est, supposons qu'un seul sha1 run prend 1000 opérations et les mots de passe contiennent des majuscules, des minuscules et des chiffres (60 caractères). Cela signifie que l'attaquant peut faire le test 1015*60*60*24 / 1000 ~= 1017 le potentiel de mot de passe un jour. Pour une attaque en force brute, ça voudrait dire que les tests de tous les mots de passe jusqu'à 9 caractères en 3 heures, jusqu'à 10 caractères dans une semaine, jusqu'à 11 caractères en un an. (Il faut 60 fois plus pour chaque caractère). Une attaque par dictionnaire est beaucoup, beaucoup plus rapide (même un attaquant avec un seul ordinateur pourrait l'arracher en heures), mais ne trouve que des mots de passe faibles.
- Pour vous connecter en tant qu'utilisateur, l'attaquant n'a pas besoin de connaître le mot de passe exact; il suffit de trouver une chaîne de résultats dans le même hash. Ceci est appelé une première preimage attaque. Aussi loin que j'ai pu trouver, il n'y a pas preimage attaques contre SHA-1. (Une attaque bruteforce faudrait 2160 opérations, ce qui signifie que nos théorique attaquant aurait besoin de 10à 30 ans pour s'en sortir. Les limites de la possibilité théorique sont autour de 260 opérations, à qui l'attaque et prend quelques années.) Il y a preimage attaques contre la diminution des versions de l'algorithme SHA-1 avec effet négligeable (pour la réduction de SHA-1, qui utilise 44 étapes au lieu de 80, temps d'attaque est en baisse de 2160 opérations à 2157). Il y a des attaques par collision contre SHA-1 qui sont bien au sein de la possibilité théorique (le meilleur que j'ai trouvé apporte le temps vers le bas à partir de 280 252), mais ceux-ci sont inutile contre les mots de passe, même sans saler.
En bref, le stockage des mots de passe avec l'algorithme SHA-1 semble parfaitement en sécurité. Ai-je raté quelque chose?
Mise à jour: Marcelo a souligné un article qui mentionne une seconde preimage attaque en 2106 opérations. (Edit: Comme Thomas explique, cette attaque est une hypothétique construction qui ne s'applique pas à des scénarios réels.) Je ne vois pas comment ce sorts danger pour l'utilisation de SHA-1 comme une fonction de dérivation de clé, cependant. Là généralement de bonnes raisons de penser qu'une collision ou une attaque de la deuxième preimage attaque peut être finalement transformé en un premier preimage attaque?