2010-08-18 10 views
0

Je construis un service Web qui prend les informations d'identification pour d'autres services et les interroge au nom des utilisateurs. C'est à dire - pensez à un service d'agrégation d'emails - interrogez vos comptes auprès de différents fournisseurs de messagerie, et regroupez-les dans une seule liste.Quel encodage pour stocker les mots de passe décodables?

Dans ce scénario, les mots de passe fournis par l'utilisateur doivent pouvoir être décryptés par la webapp, afin qu'ils puissent être transmis à divers services pour authentification.

Comment conserver ces mots de passe? J'ai lu divers articles sur SO sur le stockage des mots de passe dans DB (la réponse est toujours "ne pas".), Mais dans ce cas, je ne peux pas voir une alternative. (suggestions bien accueillies)

Répondre

0

Clarifions quelque chose ici: Le serveur doit pouvoir récupérer le mot de passe en clair.

Tenir compte des choses que vous pourriez faire:

  • Crypter les mots de passe avec une clé. Stockez la clé dans un fichier de configuration.
  • Chiffrez les mots de passe avec une carte à puce/boîte noire.
  • Crypter/décrypter les mots de passe à l'aide d'un autre serveur en envoyant des requêtes HTTPS.
  • Chiffrer la clé avec une clé dans la RAM. Utilisez mlock() pour l'empêcher d'être transféré sur le disque. J'espère que vous n'avez pas à redémarrer.

Aucun d'entre eux vous aider si l'attaquant a la racine (mais rien ne le fait). La plupart d'entre eux ne vous aident pas si l'attaquant coupe le pouvoir et vole les cases (la RAM n'est pas aussi volatile que vous le souhaitez).

À quelles attaques voulez-vous vous défendre? Quelles attaques ignorez-vous?

Une possibilité est de crypter les mots de passe avec une clé dérivée du mot de passe de l'utilisateur (comme le trousseau d'OSX, et le mot de passe-stockage équivalent de Windows que personne n'utilise). Lorsque l'utilisateur est connecté à votre service Web, vous pouvez conserver la clé dans la session (ou l'extraire avec un pad unique et stocker le pad dans un cookie, et ne récupérer la clé que lorsque l'utilisateur envoie une requête). Cela rend le vol de mots de passe externes à partir d'une sauvegarde de base de données au moins aussi difficile que la fissuration du mot de passe de l'utilisateur. Cela n'aide pas beaucoup contre les autres, cependant.