web-dev-qa-db-fra.com

Est-ce que PBKDF2 basé sur System.Cryptology.rfc2898GeiveBytes () "Mieux" pour le hachage de mot de passe Unicode que les méthodes traditionnelles?

Quand est-il approprié d'utiliser RFC28981DERIVEBYTES par rapport à un hachage typique?

Mise à jour

Je comprends maintenant qu'un KDF est généralement utilisé pour créer une clé symétrique pour une utilisation éventuelle pour crypter un flux. Je comprends aussi maintenant que PBKDF2 obsolètes mot de passe de passe de passe de passe . L'intention de cette question est d'explorer la possibilité de réutiliser le KDF comme moyen forte de stocker un mot de passe haché. Le contenu que j'ai l'intention de chiffrer est une chaîne unicode qu'un humain peut se souvenir et taper dans un ordinateur.

La raison pour laquelle je suis intéressé par le KDF est parce que c'est

  1. Ralentissant et donc coûteux cher à créer une table arc-en-ciel
  2. La bibliothèque de base en .NET est FIPS approuvé et il est possible d'utiliser ce KDF avec Recommandations NIST Si nous utilisons SHA-256

Question

Quels sont les arguments pour/contre l'utilisation d'un KDF de cette manière par opposition à la méthode de hachage normale? (Disclaimer: Qu'est-ce que est la méthode de hachage normale?)

15
goodguys_activate

PasswordDeriveBytes implémente la fonction de dérivation de clé PBKDF1. Un KDF est une fonction qui transforme une pièce de données secrètes (ici, un "mot de passe", c'est-à-dire le type de données qui convient à un cerveau humain et peut être saisi avec des doigts humains) dans une séquence de bits adéquate pour les algorithmes qui ont besoin d'un Touche symétrique (par exemple, cryptage symétrique). Un KDF n'est pas destiné à autre chose, en particulier de stockage de mot de passe.

Une fonction de hachage peut être utilisée comme KDF, à condition que la clé symétrique dont vous avez besoin n'est plus que la taille de la fonction de la fonction de hachage. Cependant, un tel KDF serait très brut. Une caractéristique que la bonne KDF devrait fournir est d'être de manière adéquate. En effet, les "mots de passe" sont, par nature, vulnérables à la recherche exhaustive (également appelée "attaque de dictionnaire": les utilisateurs ont tendance à choisir comme des mots de passe plutôt des mots simples ou des combinaisons simples qui peuvent être devinés avec seulement quelques millions de millions ou de milliards de dollars). Dans un système donné, on peut généralement tolérer une KDF relativement lente: un utilisateur essayant d'authentifier ne verra pas la différence entre 1 μS et un délai de 1 ms pour la fonction de dérivation de clé; Mais un ralentissement de 1000x est mortel pour l'attaquant: il convertit un effort de rupture d'une journée en trois- ans effort de rupture.

PBKDF1 comprend un "compte d'itération" qui est un paramètre signifiant exactement pour cela: rendre la dérivation de la clé adéquate de manière adéquate, de manière configurable. Une fonction de hachage simple est trop rapide pour cela. Utilisation en tant que KDF est précisément où vous préférez PBKDF1 sur une fonction de hachage. En fait, PBKDF1 n'est pas recommandé; PBKDF2, à partir du même standard , est censé être plus robuste.

Les fonctions de hachage sont beaucoup plus génériques que KDF et ont de nombreux autres usages, que KDF ne remplissent pas.

Ce que vous voulez faire n'est pas clair: vous utilisez le terme "signature", qui signifie normalement "signature numérique asymétrique" comme avec RSA ou ECDSA; Certaines personnes ont tendance à utiliser le terme "signature" pour désigner une vérification d'intégrité symétrique, telle qu'un MAC (en appelant une "signature" est inappropriée. , mais répandu). Cependant, cela implique un morceau de secret à un moment donné, une clé et une fonction de hachage est moins clé.

16
Thomas Pornin