2010-05-21 4 views
2

Nous avons une application de bureau et mobile qui est utilisée pour accéder à de nombreux services tiers. Ces services contiennent des informations potentiellement sensibles - par exemple des jetons d'authentification et, dans certains cas, des noms d'utilisateur/mots de passe en clair.Meilleures pratiques pour le stockage d'informations utilisateur sensibles sur le service à distance

Nous voulons fournir un service pour synchroniser leurs paramètres sur plusieurs ordinateurs et périphériques. C'est-à-dire qu'ils se connectent à un service que nous fournissons, et que cette information est synchronisée partout où ils sont connectés.

Nous n'avons aucun moyen de forcer les applications tierces à cesser d'utiliser des mots de passe en clair.

Il y a quelques approches que nous avons examinées:

  1. Ne jamais envoyer vos mots de passe ou des jetons d'authentification vers le haut.

    Lorsqu'un utilisateur se connecte à un nouveau périphérique, il doit entrer à nouveau/authentifier le périphérique pour chaque service tiers. Avantage: sécurisé, pas de risque de compromission du mot de passe/jeton.
    Inconvénient: Difficile pour les utilisateurs.

  2. Chiffrez les informations sensibles à l'aide d'un certificat client ou d'un jeton matériel. Lorsqu'un utilisateur souhaite se connecter, il fournit le jeton certificat/matériel.

    Avantage: Très sécurisé. Inconvénient: énorme barrière à l'entrée, difficile à impossible pour l'application à but non lucratif à mettre en œuvre.

  3. Crypter les informations sensibles en utilisant un mot de passe que l'utilisateur fournit

    Lorsqu'un utilisateur se connecte sur un nouvel appareil, ils seront invités à fournir un mot de passe.
    Si le mot de passe est incorrect, ils doivent entrer à nouveau/authentifier tous les autres périphériques. Avantage: sécurisé, si l'utilisateur fournit un mot de passe fort. Inconvénient: Si un utilisateur réinitialise son mot de passe, il doit le ré-authentifier pour toutes les applications tierces.

  4. Chiffrez les informations sensibles sur nos serveurs.

    Avantage: Facile pour les utilisateurs. Inconvénient: Seulement un peu plus de travail que du texte en clair pour quiconque saisit les tables de paramètres.

  5. Ne vous embêtez pas à chiffrer quoi que ce soit. (Stockage en texte)

    Avantage: Facile pour les utilisateurs. Inconvénient: Facile pour n'importe qui qui attrape notre DB pour obtenir tous les mots de passe/auth-tokens de l'utilisateur.

Ma question est: Est-il une meilleure approche que nous avons pas encore examiné?

Répondre

0

OK, il s'agit d'une question aux multiples facettes. Vous devez prendre en compte à la fois la sécurité de l'information telle qu'elle est transmise sur Internet et celle de vos serveurs. En ce qui concerne le cas 1, bien sûr, il est bon de ne pas risquer l'exposition des mots de passe, mais l'application que vous avez créée est destinée à être pratique pour les utilisateurs. Si cela est fait correctement, l'information peut être transmise en toute sécurité sans risque d'exposition. Cependant, dans cet esprit, l'implémentation correcte de la cryptographie n'est pas un exploit à prendre à la légère. En fait, quand je dis que vous ne devriez jamais implémenter votre propre cryptographie, mais utiliser des bibliothèques cryptographiques éprouvées par le temps en faisant attention à les utiliser correctement. En ce qui concerne la puce numéro deux, même si vous avez raison de ne pas implémenter la cryptographie vous-même, de nombreux programmes et bibliothèques permettent de générer des clés publiques et privées et de les utiliser pour sécuriser des informations.

Vous avez 100% besoin de crypter les informations stockées dans votre base de données. Chaque serveur n'est pas sûr, compte tenu du temps et de la motivation. Cependant, des informations chiffrées peuvent être impossibles à déchiffrer sans les informations appropriées.