web-dev-qa-db-fra.com

L'envoi du mot de passe au courrier électronique de l'utilisateur est-il sécurisé?

La sécurité de l'envoi de mots de passe par courrier électronique à un utilisateur, car le courrier électronique n'est pas sécurisé par HTTPS.

Quelle est la meilleure façon de le sécuriser? Dois-je utiliser le cryptage?

102
user310291

Vous ne devez jamais envoyer des mots de passe en clair, ni les stocker en clair. Vous devez les hacher en utilisant un hachage cryptographique unidirectionnel lent tel que bcrypt ou PBKDF2. Si un utilisateur oublie son mot de passe, vous lui offrez une fonction "réinitialiser le mot de passe", qui envoie un lien de réinitialisation unique à son compte.

Un schéma tel que le suivant est raisonnable:

  • Hachage de tous les mots de passe à l'aide un sel plus bcrypt/PBKDF2. Voir mon raisonnement ici . (EDIT, mars 2019: tilisez Argon2 )
  • Validez les hachages lors de la connexion.
  • Si un utilisateur oublie son mot de passe, envoyez-lui un lien de réinitialisation sécurisé unique, à l'aide d'un jeton de réinitialisation généré de manière aléatoire stocké dans la base de données. Le jeton doit être unique et secret, donc hachez le jeton dans la base de données et comparez-le lorsque le lien est utilisé.
  • Imposer qu'un jeton ne peut être utilisé que pour réinitialiser le mot de passe de l'utilisateur qui l'a demandé.
  • Une fois le jeton utilisé, il doit être supprimé de la base de données et ne doit pas être autorisé à être réutilisé.
  • Tous les jetons équivalents à un mot de passe, y compris les jetons de réinitialisation, expirent après une courte période, par exemple 48 heures. Cela empêche un attaquant d'exploiter des jetons inutilisés à une date ultérieure.
  • Affichez immédiatement un formulaire pour permettre à l'utilisateur de définir un nouveau mot de passe. N'utilisez pas de mots de passe générés aléatoirement temporairement!
  • Faites tout cela via SSL.

Je suggère fortement de lire The Definitive Guide to Forms-Based Website Authentication pour un ensemble complet de directives sur la façon de créer des systèmes de connexion sécurisés.

156
Polynomial

L'email n'est pas sécurisé. L'envoi d'un mot de passe par email est donc un risque pour la sécurité. Pour atténuer le risque, vous pouvez (dans certaines situations) faire en sorte que le mot de passe envoyé par e-mail soit un mot de passe à usage unique, ce qui ouvre uniquement la possibilité pour l'utilisateur de sélectionner son propre mot de passe.

C'est ce que font les bons systèmes j'ai oublié mon mot de passe pour ce site Web: l'utilisateur clique sur le bouton "bon sang, j'ai oublié mon mot de passe", et un e-mail est envoyé, qui contient une URL (avec HTTPS ) qui incorpore un identifiant de session aléatoire et pointe vers une page qui permet à l'utilisateur de choisir un nouveau mot de passe. L'URL est le "mot de passe à usage unique". Avec ce schéma, vous pouvez au moins, côté serveur, savoir quand l'URL a été utilisée.

Si vous pouvez effectuer le cryptage correctement, c'est-à-dire si vous pouvez envoyer un message OpenPGP ou S/MIME crypté avec la clé publique de l'utilisateur, alors l'utilisateur a une paire de clés privée/publique : dans ce cas, pourquoi utiliseriez-vous des mots de passe?

42
Thomas Pornin

Il est déconseillé d'envoyer des mots de passe à l'utilisateur, car cela signifierait que vous disposez d'une copie en texte clair du mot de passe de l'utilisateur.

Je ne vois aucune bonne raison de le faire. Il existe d'autres moyens plus sûrs d'accomplir ce qui est nécessaire.

Pour une réponse générale concernant la sécurité des e-mails, je vous suggère de lire le lien this , qui contient de bonnes informations.

Si vous DEVEZ envoyer des informations sensibles par e-mail, utilisez un schéma comme PGP ou d'autres techniques de cryptage pour sécuriser les données.

22
user10211

Si vous avez le "mot de passe clair" à envoyer en premier lieu (en dehors du processus d'inscription), vous vous trompez. Ne stockez jamais le mot de passe en clair! Beaucoup d'entreprises comme Sony Music et autres ont été brûlées récemment à cause de cela .. et laissez-moi vous dire que les consommateurs ne sont pas satisfaits.

4
Vaughan Hilts

Faisant écho aux messages précédents, le courrier électronique n'est certainement pas sûr et vous ne devez jamais envoyer de données sensibles , en particulier des mots de passe. D'autant plus qu'ils ne sont pas chiffrés et que nous les trouvons en texte clair, il est extrêmement facile pour quiconque de pirater votre courrier électronique et d'y accéder via le réseau public.

Si vous ou votre client avez du mal à vous souvenir de vos mots de passe, vous devez utiliser un gestionnaire de mots de passe sécurisé. Il s'agit d'un site Web qui héberge une liste de vos mots de passe dans un coffre-fort entièrement crypté. Les bons sont KeePass ou LastPass.

Si vous êtes une entreprise qui essaie d'envoyer à nouveau son mot de passe aux clients, vous devez configurer des questions de sécurité auxquelles les clients répondent lorsqu'ils créent initialement leur compte. De cette façon, s'ils l'oublient, ils peuvent cliquer sur un lien qui les envoie pour répondre correctement à ces questions et réinitialiser leur mot de passe.

Pour votre propre connaissance, il s'agit d'un blog informatif, qui plaide en faveur du chiffrement et met en garde contre l'utilisation de certains mots de passe http://www.ziptr.com/blog-last-4-digits-ssn-password = de Ziptr.

3
Katie Campbell