2010-04-21 16 views
0

Je suis en train de concevoir une application Web qui nécessitera le stockage de clés GPG dans un format crypté dans une base de données.Utilisation d'un mot de passe pour générer deux hachages distincts sans réduire la sécurité du mot de passe

Je prévois de stocker le mot de passe de l'utilisateur dans un hachage bCrypt de la base de données. Ce que je voudrais être capable de faire est d'utiliser ce bCrypt pour authentifier l'utilisateur puis utiliser la combinaison du hachage bCrypt stocké et un autre hachage du mot de passe pour crypter et décrypter les clés GPG.

Ma question est de savoir si je peux le faire sans réduire la sécurité du mot de passe? Je pensais que je serais capable d'utiliser quelque chose comme un HMAC-SHA256 d'une chaîne statique en utilisant le mot de passe et un sel comme clé secrète.

Y a-t-il une meilleure façon de le faire à laquelle je n'ai pas pensé?

Merci

Répondre

0

Si vous allez toujours déchiffrer la clé GPG alors vous pourriez tenir une valeur connue chiffrée avec la clé et l'utiliser pour vérifier le mot de passe de l'utilisateur (si le mot de passe utilisateur a été saisi, la clé GPG décryptée déchiffrera les données stockées à la valeur connue).

Utilisez un algorithme de dérivation de clé standard pour générer votre clé à partir de votre mot de passe, votre bibliothèque de chiffrement doit en inclure une.

+0

EDIT: J'ai mal compris votre réponse le premier, et le second, lire. Cela peut fonctionner bien que cela nécessiterait une charge de processeur plus importante pour essayer de faire un décryptage de deux éléments chaque fois qu'un utilisateur tente une connexion. – Nevins

2

Envisagez d'utiliser PBKDF2 (à partir de PKCS #5). Il prend en entrée une phrase secrète, un salt et un nombre d'itérations. Le nombre d'itérations spécifie le nombre de fois que la phrase secrète doit être hachée à plusieurs reprises. l'utilisation d'un grand nombre pour cela (1000 à 10000 est commun) aide à rendre les attaques par devinettes plus difficiles. Le sel provoque différentes utilisations de la même phrase secrète pour créer des clés différentes. En raison de la conception de PBKDF2, il serait très difficile de deviner un hachage généré avec un sel même si vous connaissiez le hachage généré par la même phrase secrète pour un sel différent.

PBKDF2 est déjà implémenté et disponible immédiatement dans la plupart des bibliothèques de cryptographie. Par exemple, il est disponible sous la forme PKCS5_PBKDF2_HMAC_SHA1 dans OpenSSL (en-tête evp.h).