web-dev-qa-db-fra.com

Les hachages salés SHA-256/512 sont-ils toujours sûrs si les hachages et leurs sels sont exposés?

Scénario: une base de données de mots de passe hachés et salés, y compris des sels pour chaque mot de passe, est volée par un utilisateur malveillant. Les mots de passe ont une longueur de 6 à 10 caractères et sont choisis par des utilisateurs non techniques.

Cet utilisateur malveillant peut-il déchiffrer ces mots de passe?

Ma compréhension est que MD5 et SHA-1 ne sont plus sûrs car les outils de récupération de mot de passe assistés par GPU peuvent calculer des milliards de ces hachages par seconde par GPU.

Qu'en est-il de SHA-256 ou SHA-512? Sont-ils en sécurité actuellement? Et dans quelques années?

51
Seppo Erviälä

La question n'indique pas combien de tours de hachage sont effectués. Et toute la réponse dépend de ce point.

Toutes les fonctions de hachage sont dangereuses si vous n'utilisez qu'une seule itération. La fonction de hachage, qu'il s'agisse de SHA-1 ou de la famille SHA-2, doit être répétée des milliers de fois. Je considérerais 10 000 itérations comme minimum et 100 000 itérations ne sont pas déraisonnables, étant donné le faible coût d'un matériel puissant.

Les mots de passe courts sont également dangereux. 8 caractères devraient être le minimum, même pour les cibles de faible valeur (car les utilisateurs réutilisent le même mot de passe pour plusieurs applications).

Avec une carte graphique de 150 $, vous pouvez effectuer 680 millions de calculs de hachage SHA-1 par seconde. Si vous n'utilisez qu'un seul tour de hachage, tout Les mots de passe à 6 caractères peuvent être testés en un peu plus de 15 minutes (en supposant que les 94 caractères imprimables ASCII sont utilisés). Chaque caractère supplémentaire multiplie le temps par 94, donc 7 caractères nécessite un jour, 8 personnages nécessitent 103 jours sur cette configuration. Rappelez-vous, ce scénario est un jeune de 14 ans utilisant son GPU, pas un criminel organisé avec de l'argent réel.

Considérez maintenant l'effet de l'exécution de plusieurs itérations. Si 1 000 itérations de hachage sont effectuées, l'espace de mot de passe à 6 caractères prend presque 12 jours au lieu de 15 minutes. Un espace de 7 caractères prend 3 ans. Si 20 000 itérations sont utilisées, ces chiffres vont jusqu'à 8 mois et 60 ans, respectivement. À ce stade, même les mots de passe courts ne peuvent pas être recherchés de manière exhaustive; l'attaquant doit se rabattre sur un dictionnaire de mots de passe "les plus probables".

61
erickson

Le sel peut être considéré comme public pratiquement par définition .

En ce qui concerne le hachage à utiliser et son degré de "sécurité", je m'en tiendrai aux recommandations du NIST pour les agences gouvernementales américaines. Comme l'article Wikipedia dit:

SHA-1 est à la retraite pour la plupart des utilisations gouvernementales; le National Institute of Standards and Technology des États-Unis déclare: "Les agences fédérales devraient cesser d'utiliser SHA-1 pour ... les applications qui nécessitent une résistance aux collisions dès que possible. et doit utiliser la famille de fonctions de hachage SHA-2 pour ces applications après 2010 "

Vous pouvez spéculer sur la sécurité ou la dangerosité de divers algorithmes, mais pourquoi vous embêter quand vous avez une spécification que le gouvernement américain considère comme suffisamment bonne pour son propre usage?

[Éditer]

Soit dit en passant, votre question semble refléter un malentendu sur la façon dont ces analyses sont effectuées. Il y a bien plus dans une fonction de hachage que son nombre de bits.

Le forçage brutal d'un hachage de 160 bits comme SHA-1 nécessite 2 ^ 160 efforts; cela ne va tout simplement pas se produire, quel que soit le nombre de "GPU" que vous lui lancez. En fait, cela ne se produira probablement pas pendant la durée de vie de l'univers. (Certes, le forçage brutal d'une collision nécessite "seulement" 2 ^ 80 efforts. Mais il nécessite également 2 ^ 80 stockage . Bonne chance avec ça.)

La raison pour laquelle MD5 et SHA-1 sont considérés comme "potentiellement dangereux" est que des faiblesses ont été découvertes dans chaque algorithme qui pourraient réduire le travail, bien en dessous de l'effort de force brute. La raison du passage à un algorithme plus récent (comme SHA-2) est d'éviter ces faiblesses connues; la raison de l'utilisation de 256 bits est de fournir un tampon contre les faiblesses inconnues . Cela n'a rien à voir avec les "GPU"; pour résister aux attaques par force brute, 160 bits suffisent.

Soit dit en passant, des déclarations similaires s'appliquent à toute la cryptographie.

Maintenant, il est impossible de surestimer à quel point les gens de NSA connaissent ce genre de choses que vous ou moi. Ils font des recommandations aux agences gouvernementales américaines et à l'industrie américaine via le NIST. Donc, à moins que votre adversaire est lui-même un gouvernement mondial majeur, les recommandations du NIST sont plus que suffisantes. Ignorez tous les "experts" autoproclamés qui essaient de vous dire le contraire; NSA est meilleur dans ce qu'il fait que vous ne le pouvez) imaginer.

Si votre adversaire est un gouvernement mondial majeur, personne à SO n'est qualifié pour vous aider. Et vous avez beaucoup plus problèmes que la fonction de hachage à utiliser.

[modifier 2]

Bien sûr, je suppose que vous utilisez déjà cette fonction dans le cadre d'un schéma de hachage de mot de passe standard, comme PKCS # 5 (également connu sous le nom de "PBKDF2"), et votre question portait uniquement sur la fonction de hachage utilisation.

PBKDF2 recommande un minimum de 1000 itérations, mais vous pouvez choisir ce que vous voulez. L'effort de force brute de l'attaquant augmente linéairement avec ce nombre, donc 10000 itérations contre 1000 signifie qu'il leur faudra 10 fois plus de temps pour forcer brutalement chaque mot de passe.

17
Nemo

Si l'attaquant connaît le sel, il peut calculer une nouvelle table Rainbow basée sur la valeur du sel.

Cela dépend de l'algorithme utilisé. Selon Coda Hale , MD5 et SHA famille d'algorithmes de hachage sont à usage général et destinés à la vitesse. En bref, il conclut que ceux-ci ne sont pas suffisants pour empêcher les attaques par dictionnaire et que bcrypt est la voie à suivre, car il y a plus de temps de configuration impliqué dans le craquage des mots de passe, ce qui ralentit considérablement un attaquant. Voici un autre article intéressant sur bcrypt .

Qu'en est-il de SHA-256 ou SHA-512? Sont-ils en sécurité actuellement? Et dans quelques années?

Soyez averti, cet argument a deux côtés. Il y a le côté bcrypt et le côté SHA-256 et le côté haut. Si vous croyez ceux du côté de la famille SHA, alors je pense que vous serez en sécurité pendant plus de quelques années avec SHA-256, même certains affirment que SHA-1 avec du sel est toujours assez bien, mais si vous voulez être sûr, je m'en tiendrai au SHA-256. Il y a un forum qui mentionne également que MD5 a encore 5 à 10 ans pour être prouvé "suffisamment peu fiable". Malheureusement, je ne peux pas poster les liens à cela, car j'ai déjà atteint mon maximum de deux.

Personnellement, j'utilise SHA-256 avec un sel, mais je devrai certainement en lire plus sur bcrypt et réévaluer. Espérons que cela aide. C'est un type de question que vous pouvez facilement passer d'innombrables heures à rechercher, mais néanmoins intéressant.

1
SantosLHalper