web-dev-qa-db-fra.com

La mise en œuvre de la crypte AES a entraîné un mot de passe 8192 fois pour générer la clé. Est-ce nécessaire?

J'envisage de crypter quelques petits fichiers (centaines de KB chacun) à l'aide de la mise en œuvre de la référence AES Crypt . En regardant la source, il semble que la clé de cryptage soit dérivée du IV et du mot de passe en concaténant les deux dans un tampon qui est ensuite haché à plusieurs reprises. Donc, l'IV agit comme le "sel" pour le hachage. À plusieurs reprises, je veux dire 8192 fois.

Je comprends que l'avantage de cela consiste à augmenter le temps nécessaire pour générer la clé, rendant plus cher d'effectuer des attaques de force brute pour découvrir le mot de passe. Je comprends également que l'inconvénient est qu'il faut plus de temps pour faire les tâches légitimes de cryptage et de déchiffrement pour les utilisateurs réels. En outre, comme les utilisateurs et les attaquants achètent des machines plus rapides au fil du temps, le bénéfice et l'inconvénient auront tendance à zéro.

Donc, ma question est, étant donné la capacité informatique actuelle et en supposant qu'un attaquant motivé qui ne possède pas de cluster dédié, est de 8192 itérations insuffisantes, surkill ou "juste juste"? Vous avez également raté quelque chose manqué dans mon analyse de cette génération clé: y a-t-il une autre raison de choisir un tel certain nombre d'itérations qui en fait un bon choix?

16
user185

La norme RSA pour la cryptographie basée sur le mot de passe recommande des itérations "au moins 1000", de sorte que le facteur semble être dans le ballon de ballon.

Avec 8192 itérations, vous augmentez essentiellement le temps nécessaire pour compléter une attaque de force brute d'un facteur équivalent à ajouter 13 bits d'entropie au mot de passe ou à 2 caractères alphanumériques uniquement (en ce qui concerne les attaques de la force brute uniquement). C'est un bon moyen de penser à ce sujet, car il est indépendant de l'augmentation de la puissance de calcul.

La question est la suivante: étant donné la sécurité des mots de passe que vous ou vos utilisateurs utiliserez-vous, est-ce que cela est réalisable pour la force de brute? Si vous y ajoutez 13 bits, est-ce que cela est réalisable de le forcer brute?

Si vos utilisateurs utilisent des mots de passe forts, la réponse n'est probablement pas à la fois. Si vos utilisateurs utilisent un mot de dictionnaire, 13 bits ne suffisent probablement pas pour le pousser dans un territoire sécurisé. Vos réponses à ces questions vont changer au fil du temps car les ordinateurs deviennent plus puissants.

18
PulpSpy

Si le mot de passe est un mot de dictionnaire, les tables arc-en-ciel peuvent être générées rapidement et efficacement. Avec des mots de passe salés, les exigences de taille/temps pour générer des tables arc-en-ciel utiles augmentent. Plusieurs itérations de hachage (sel + passe) sont un moyen facile de diminuer considérablement l'utilité des tables arc-en-ciel. Je pense que le schéma de MD5 salé de Apache le fait 1000 fois. Le nombre est totalement arbitraire, il s'agit simplement de la barre de la barre pour la quantité de matériel que vous devriez jeter au problème pour vaincre le mécanisme de hachage. En utilisant un meilleur mécanisme de hachage (et cela signifie aller au-delà de SHA-1, remarquez que cela n'est même pas dans la suite B plus) est une solution. Il existe également des algorithmes qui vous permettent de choisir combien de temps vous voulez que cela puisse emprunter quelque chose, ce qui répondrait directement à la "Crypto Veating Speep Freep" à la suite de la loi de Moore.

5
Marcin

Si vous choisissez des packages de cryptage, je recommanderais GPG ou PGP sur la crypte d'AES. GPG et PGP ont reçu beaucoup de tentations prudentes de la communauté de la cryptographie. Autant que je sache, AES Crypte n'a pas. Par conséquent, je voudrais faire confiance à GPG ou à PGP plus que la crypte d'AES.

En ce qui concerne le nombre de fois pour itérer le hachage de mot de passe, il est basé sur la durée pendant laquelle vous êtes prêt à attendre pendant le cryptage/décryptage et la vitesse rapide de la fonction Hash. Premièrement, décidez combien de temps vous êtes prêt à attendre: Dites, 100 msec. Ensuite, choisissez un certain nombre d'itérations qui provoqueront le processus de hachage itératé de prendre 100 msec sur les ordinateurs que vous utilisez. Terminé.

comme @pulpspy a expliqué avec précision , si vous ithérapez le hachage n Times, cela augmente l'entropie effective du secret par des bits d'environ LG (N), où LG représente le logarithme de base-2. Par exemple, 8192 = 2 ^ 13 Les itérations correspondent à 13 autres bits d'entropie efficace. Il n'est pas facile de le traduire en une longueur efficace de la phrase secrète. (Contrairement à ce que @pulpspy a écrit, 13 bits d'entropie ne se traduisent pas directement en 2 caractères, car aucun caractère de chaque passhrasque n'a la même quantité d'entropie. Comme @NealMCB explique correctement, l'entropie par caractère d'une phrase secrète varie, mais est probablement typiquement compris dans la plage de 1-2 bits par caractère, cela pourrait donc correspondre à une augmentation de la longueur de la phrase secrèse quelque part dans les environs rugueux de 8 caractères.)

Enfin, je vous avertirai que choisir votre clé cryptographique d'une phrase secrète est généralement considérée comme une pratique risquée. Les phraséphrases choisies humaines ne fournissent souvent pas d'entropie suffisante pour protéger contre les attaques de la force brute sur le cryptage. Par conséquent, je ne recommande pas de phrases phraséphrases choisies humaines pour des mesures à haute sécurité (ou si vous devez utiliser une phrase secrète choisies humaine, utilisez un logiciel pour vous aider à choisir une phrase secrète de haut entropie). Le meilleur logiciel cryptographique a tendance à utiliser le véritable aléatoire pour ses clés de crypto où jamais possible, plutôt que des phraséphrases choisies par l'homme.

3
D.W.

Le nombre d'itérations doit être ajusté en fonction de votre pouvoir disponible, de sorte que le temps de traitement s'inscrit toujours sous la contrainte difficile de la patience limitée de l'utilisateur; Vous voulez toujours rendre le nombre aussi élevé que possible.

Avec mathématiques: si le traitement d'un mot de passe prend du temps [~ # ~] t [~ # ~ ~] sur votre système (par exemple 1 seconde), mais l'attaquant est prêt à dépenser T ' Pour craquer un mot de passe (par exemple 3 semaines) et avoir accès à des machines, collectivement, [~ # ~] p [~ # ~] fois plus puissant que le vôtre , alors l'attaquant a un avantage d'un facteur t '* p/t sur vous. La défense contre qui est l'entropie de mot de passe: si un mot de passe a entropié e bits, alors l'attaquant est (en moyenne) vaincu si et seulement si T '* P/T < 2e-1. En supposant [~ # ~ # ~] t [~ # ~ ~] = 1 seconde, t ' = 3 semaines et P = 100 (l'attaquant dispose de cinq ordinateurs GPU, pour un budget de moins de 3000 $), le mot de passe doit alors avoir entropié au moins 27,4 bits. Vous voulez probablement avoir un peu de marge de sécurité et aller pour 30 bits. Vous peut, en tant que personne informée, choisissez un mot de passe plus fort que cela (il y a un peu de discussion sur ce sujet dans cette question ); Mais il semble très optimiste de s'attendre à ce que la plupart des utilisateurs fassent également.

Dans les équations ci-dessus, le nombre d'itérations est utilisé pour alter [~ # ~ # ~] t [~ # ~]. Bien que le nombre approprié dépend en définitive de votre puissance disponible et de votre patience moyenne de l'utilisateur, il y a des chances que 8192 itérations sont trop peu nombreuses; Basé sur votre description du processus de transformation du mot de passe (hachage répété - ceci ressemble à une version réduite de PBKDF2 ), le nombre d'itérations sur un PC typique doit être compté dans Millions.

Parmi lesquelles, une technique de traitement de mot de passe personnalisé doit être un avertissement rouge puissant: ce n'est pas bon. Il est beaucoup préférable de s'appuyer sur des algorithmes standardisés éprouvés tels que PBKDF2 ou BCRYPT (ces derniers doivent être préférés car il réduit le "facteur de puissance de traitement" [~ # ~ ] P [~ # ~] d'un attaquant qui utilise GPU - voir cette réponse pour plus de détails).

3
Thomas Pornin

Ce n'est pas "nécessaire", mais cela fait des mots de passe fissurés plus difficiles. Il s'appelle "Renforcement des essences" - il s'agit logiquement de l'ajout de deux caractères (symbole de numéros inférieur/inférieur) à la fin du mot de passe. C'est assez courant. Par exemple, le WPA qui protège votre point d'accès hachait le mot de passe 4000 fois.

2
Robert David Graham