web-dev-qa-db-fra.com

Quel est le meilleur algorithme de hachage de mot de passe dans .NET Core?

Quelles sont les considérations lors du choix du meilleur algorithme de hachage de mot de passe dans .NET Core?

J'ai lu que tous les algorithmes de hachage ne sont pas conformes/non vérifiés, donc j'hésite à simplement obtenir diverses implémentations de NuGet. En outre, il n'est pas recommandé de créer votre propre algorithme de hachage, car la vérification nécessite des processus/de l'argent.

Actuellement, j'utilise le hachage de mot de passe .NET Core Identity V3 car au moins c'est quelque chose d'officiel que Microsoft fournit.

J'ai lu que les algorithmes suivants sont les meilleurs:

  1. Argon2
  2. bcrypt
  3. déchiffrer
  4. Catena
  5. PBKDF2 (ce que .NET Core Identity V3 utilise)

J'aimerais idéalement Argon2 ou bcrypt. Cependant, je ne veux pas simplement utiliser la première chose que Google révèle. De plus, comment savoir lesquels sont vérifiés/recommandés?

33
Water

Argon2 est le meilleur de ceux à utiliser. Il a été bien vérifié et fait l'objet de recherches intenses. Il a été choisi comme vainqueur du concours de hachage de mot de passe (PHC) pour remplacer scrypt, qui présente de mauvaises attaques de compromis temps-mémoire (TMTO), et dont la configuration n'est pas aussi flexible.


Argon2 a remporté le PHC et est basé sur une analyse approfondie des attaques de compromis. Il nécessite une quantité configurable de mémoire pour s'exécuter, et un attaquant devra utiliser autant de mémoire par thread de force brute , ou il devra effectuer drastiquement plus de calculs. Chaque passage de mémoire réduit la flexibilité dont dispose un attaquant pour échanger les besoins en mémoire contre des contraintes de temps. Il existe deux modes principaux Argon2, appelés Argon2i et Argon2d. Le premier est conçu pour résister aux attaques par canal latéral, tandis que le second est conçu pour maximiser la sécurité contre les attaques hors ligne. Un hybride, Argon2id, qui utilise Argon2i pour la première passe de mémoire et Argon2d pour les passes suivantes, existe également.

bcrypt est un ancien KDF conçu à partir du programme clé de Blowfish, qui est lent. Il nécessite 4 Ko de mémoire rapide pour le calcul, ce qui le rend inefficace sur les crackers basés sur GPU en raison de leur utilisation de la mémoire contended. En effet, les GPU ont de nombreux cœurs, mais chaque cœur doit partager l'accès à la VRAM principale. Parce que bcrypt lit et modifie un état de 4 Ko pendant son exécution, plusieurs cœurs de GPU parallèles se battront pour savoir qui a accès au bus de mémoire principal, et le résultat est que la plupart des cœurs sont inactifs, attendant jusqu'à ce qu'ils aient accès à la mémoire dont ils ont besoin pour effectuer des évaluations bcrypt.

scrypt est un KDF dur en mémoire, mais il est sujet à des attaques TMTO plus sévères que Argon2. Autrement dit, si un attaquant n'a pas assez de mémoire, il peut exécuter scrypt sur la même entrée avec moins de mémoire que nécessaire en effectuant plus d'opérations. De plus, les besoins en mémoire interne et en temps de scrypt ne sont pas indépendants, il est donc impossible d'augmenter l'utilisation de la mémoire sans augmenter le temps de traitement, et vice versa. Cela peut devenir un problème pour les serveurs qui peuvent vouloir consacrer seulement quelques dizaines de millisecondes à chaque calcul, mais qui souhaitent utiliser plusieurs mégaoctets de mémoire.

Catena était l'un des candidats PHC, mais il n'a pas remporté le concours. Je n'ai pas lu le document, donc je ne peux pas vraiment en dire beaucoup à ce sujet, mais parce qu'il n'a pas gagné, il n'y aura pas autant de recherches à ce sujet, donc s'il y a des problèmes, ils peuvent ne pas être découverts . Ce n'est cependant pas un mauvais choix , car il a encore fait l'objet de recherches importantes et a une base théorique solide. Je ne l'utiliserais toujours pas.

PBKDF2 est l'un des KDF les plus anciens et probablement le plus courant. Ce n'est pas une mémoire difficile, ce qui signifie qu'un attaquant peut effectuer des attaques massivement parallèles contre lui sans rencontrer de problèmes de mémoire. PBKDF2 fonctionne en prenant n'importe quel hachage à clé, généralement HMAC, et en l'exécutant plusieurs fois de sorte que chaque évaluation de hachage dépend de toutes les évaluations de hachage précédentes. Malheureusement, les hachages typiques utilisés dans HMAC ne nécessitent pratiquement pas de mémoire pour le calcul, de sorte qu'un attaquant peut massivement paralléliser les recherches par force brute sur les GPU et les ASIC sans rencontrer les problèmes qu'un KDF dur en mémoire pourrait causer.

31
forest

Même si Argon2 est mon préféré parmi eux, tous sont des choix solides et vous n'aurez probablement pas l'air bizarre de choisir l'un plutôt que l'autre. Ce qui importe le plus, c'est que vous testiez correctement votre système, afin de choisir des paramètres raisonnables.

Avec Argon2, vous devez également sélectionner un mode de fonctionnement. Il y a Argon2i, Argon2d et Argon2id. Sauf si vous savez que vous avez une bonne raison de choisir l'un des deux premiers, vous devez choisir Argon2id.

10
MechMK1

Alors que les autres réponses débattent de l'efficacité de chaque algorithme de la liste, je vais essayer de répondre du point de vue .NET Core. Sauf si les choses ont changé récemment, le seul algorithme de votre liste pris en charge nativement (c'est-à-dire créé par Microsoft) dans .NET Core est PBKDF2. Pour certaines entreprises, cela signifie que c'est votre seul choix. Si vous avez le luxe de pouvoir utiliser n'importe quel package NuGet tiers, vous trouverez de nombreuses implémentations de nombreux autres algorithmes dans votre liste, mais vous devrez décider si vous leur faites confiance. Personnellement, compte tenu du faible nombre de téléchargements, je serais mal à l'aise d'utiliser autre chose que peut-être BCrypt-Official mais même dans ce cas, je pourrais vouloir le rechercher davantage. Il est important de considérer que n'importe qui peut créer un package NuGet (et l'appeler `` officiel '' s'il le souhaite) et qu'il est peu probable que la plupart des packages passent par un processus de révision, c'est donc à vous de faire vos devoirs.

7
Paul Hiles