web-dev-qa-db-fra.com

Pourquoi un mot de passe serait-il haché avant d'être utilisé pour crypter quelque chose?

En lisant de la documentation sur la sécurité d'un produit, j'ai constaté que le fournisseur utilise le SHA-2 d'un mot de passe pour crypter les données (AES-256), au lieu d'utiliser directement ce mot de passe.

Y a-t-il des avantages à le faire?

Un attaquant ne va pas casser les données chiffrées à l'aide de cette clé SHA-2-as-a-password, mais plutôt épuiser l'espace de clé du mot de passe (si possible) et essayer son hachage. Par conséquent, la seule raison à laquelle je peux penser est qu'il existe une étape de calcul supplémentaire (la création du hachage). J'aurais plutôt augmenté l'entropie des mots de passe si le but est de complexifier informatique l'attaque.

53
WoJ

Cela ressemble à une version primitive d'un fonction de dérivation de clé (KDF) , en particulier, ils auraient probablement pu éviter de réinventer la roue en utilisant PBKDF2 .

Il existe plusieurs raisons pour lesquelles vous ne souhaitez pas utiliser le mot de passe directement comme clé AES.

  1. Pour distribuer les bits. La propriété principale ici est que la sortie d'une fonction de hachage est, statistiquement parlant, uniformément distribuée. Les gens ont tendance à choisir des mots de passe qui ne sont pas entièrement aléatoires, en particulier, la plupart des mots de passe ne contiendraient que des caractères que vous pouvez taper sur un clavier. Lorsqu'elle est utilisée comme clé de chiffrement, une clé non statistique non aléatoire peut exposer des faiblesses dans la fonction de chiffrement.

  2. Pour adapter les clés à la longueur de la clé de cryptage. La plupart des mots de passe vont être plus longs ou plus courts que l'espace clé de la fonction de cryptage. En hachant votre mot de passe, la longueur exacte de la clé sera exactement la taille de la clé d'entrée de votre fonction de cryptage. Bien que l'entropie de la clé dérivée n'augmente pas, cela évite la probabilité d'exposer une faiblesse dans la fonction de cryptage si vous simplement simplement mettez à zéro le mot de passe ou pire tronquez le mot de passe.

  3. Pour ralentir le déchiffrement de la dérivation des clés. Selon votre description, le logiciel n'utilise qu'une seule ronde SHA256, ce qui n'est pas beaucoup. Mais avec un KDF basé sur un mot de passe approprié, comme PBKDF2, il y a généralement des dizaines de milliers ou des centaines de milliers de tours de la fonction de hachage sous-jacente. Cela ralentit le calcul des clés, augmentant la force effective des mots de passe sans augmenter leur longueur.

  4. Pour conserver le mot de passe en texte brut de l'utilisateur en mémoire, empêchant ainsi qu'il ne soit accidentellement vidé sur le disque pendant l'hibernation ou le vidage sur incident. Bien que cela ne protège pas le hachage d'être utilisé pour déchiffrer les données que vous chiffrez, cela empêchera le mot de passe d'être réutilisé pour déchiffrer d'autres fichiers (qui utilise vraisemblablement un sel différent) ou d'être essayé sur vos comptes en ligne ou d'autres appareils qui tu utilises.

97
Lie Ryan

SHA-256 générera un hachage de 256 bits à partir de mots de passe de longueur arbitraire. Ce hachage peut techniquement (comme c'est la bonne longueur) être utilisé comme clé pour AES-256.

Sans plus de contexte, je suppose qu'ils ont opté pour le moyen le plus simple de générer une clé 256 bits.

Comme vous l'avez mentionné, le point faible ici est le mot de passe et un seul SHA-256 du mot de passe est trop bon marché pour empêcher les attaques par force brute sur le mot de passe.

À la place, on devrait utiliser une fonction de dérivation de clé basée sur un mot de passe (PBKDF). Il ne faut pas non plus utiliser directement la clé, mais plutôt l'utiliser pour crypter les clés générées à l'aide d'un meilleur CSPRNG.

Vous pouvez trouver une très bonne discussion de ce sujet dans https://crypto.stackexchange.com/questions/22678/how-secure-is-it-to-use-password-as-aes-key =.

14
Marc

Sans aucun contexte, il est difficile de répondre. Cela pourrait simplement être un mécanisme d'extension de mot de passe naïf ou cela pourrait être autre chose. Par exemple, il se peut qu'une autre partie doive déchiffrer les données et donc stocker la clé nécessaire.

En utilisant un hachage, il fournirait alors un certain niveau de protection pour le mot de passe de l'utilisateur d'origine. Pas grand-chose, mais faites bien mieux que de simplement stocker le mot de passe lui-même.

5
Stephane