web-dev-qa-db-ja.com

ユーザーのメールにパスワードを送信しても安全ですか?

電子メールはHTTPSで保護されていないため、電子メールを介してユーザーにパスワードを送信するのはどの程度安全ですか。

それを保護する最良の方法は何ですか?暗号化を使用する必要がありますか?

102
user310291

パスワードを平文で絶対に送信しないでください。ま​​た、平文でパスワードを保存しないでください。 bcryptやPBKDF2などの低速の一方向暗号ハッシュを使用してハッシュする必要があります。ユーザーがパスワードを忘れた場合は、「パスワードのリセット」機能を提供します。これにより、アカウントに1回限りのリセットリンクが送信されます。

次のようなスキームは妥当です。

  • を使用してすべてのパスワードをハッシュする ソルトプラスbcrypt/PBKDF2ここで私の推論 を参照してください。 (編集、2019年3月: Argon2を使用
  • ログイン時にハッシュを検証します。
  • ユーザーがパスワードを忘れた場合は、データベースに保存されているランダムに生成されたリセットトークンを使用して、安全な1回限りのリセットリンクを送信します。トークンは一意かつ秘密である必要があるため、データベース内のトークンをハッシュし、リンクが使用されているときにそれを比較します。
  • トークンは、それを要求したユーザーのパスワードをリセットするためにのみ使用できることを強制します。
  • トークンを使用したら、データベースから削除する必要があり、再度使用することはできません。
  • リセットトークンを含め、パスワードと同等のすべてのトークンを短時間で期限切れにします。 48時間。これにより、攻撃者が後日未使用のトークンを悪用することを防ぎます。
  • すぐにフォームを表示して、ユーザーが新しいパスワードを設定できるようにします。ランダムに生成された一時的なパスワードは使用しないでください。
  • これらすべてをSSL経由で実行します。

安全なログインシステムを構築する方法に関する完全なガイドラインについては、 フォームベースのWebサイト認証の決定的なガイド を一読することを強くお勧めします。

156
Polynomial

メールは安全ではありません。したがって、電子メールでパスワードを送信することはセキュリティ上のリスクになります。リスクを軽減するために、(状況によっては)電子メールで送信されるパスワードが1回限りのパスワードになるようにすることができます。これにより、ユーザーが自分の新しいパスワードを選択する可能性のみが解放されます。

これは、I-forgot-my-password-for-this-Web-siteシステムの優れた機能です。ユーザーが[dammit、I forgot my password]ボタンをクリックすると、URLを含むメールが送信されます(HTTPSを使用) )ランダムなセッション識別子を埋め込み、ユーザーが新しいパスワードを選択できるページを指します。 URL is「ワンタイムパスワード」。このスキームを使用すると、少なくともサーバー側から、URLがいつ使用されたかを知ることができます。

暗号化を行うことができる場合適切に、つまり、ユーザーの公開鍵で暗号化されたOpenPGPまたはS/MIMEメッセージを送信できる場合、ユーザーhas秘密鍵/公開鍵のペア:その場合、なぜパスワードを使用するのですか?

42
Thomas Pornin

ユーザーにパスワードを送信することはお勧めできません。これは、ユーザーのパスワードのクリアテキストのコピーがあることを意味します。

私にはこれをする正当な理由はないと思います。必要なものを達成するための安全な方法は他にもあります。

電子メールのセキュリティに関する一般的な回答については、いくつかの優れた情報がある this リンクをお読みになることをお勧めします。

電子メールで機密情報を送信する必要がある場合は、PGPなどの暗号化技術を使用してデータを保護します。

22
user10211

最初に(登録プロセスを除いて)送信する「クリアパスワード」を持っている場合、それは間違っています。決して平文のパスワードを保存しないでください!ソニー・ミュージックなどの多くの会社は最近それから燃えています。

4
Vaughan Hilts

以前の投稿を繰り返して、電子メールは確かに安全ではないので、機密データ(---)、特にパスワードを電子メールで送信しないでください。特に暗号化されておらず、クリアテキストで検出されるため、誰でも簡単にメールをハッキングして、パブリックネットワーク経由でこれらにアクセスすることができます。

あなたまたはあなたのクライアントがあなたのパスワードを思い出すことに問題があるなら、あなたは安全なパスワードマネージャーを使うべきです。これは、完全に暗号化された保管庫にパスワードのリストを格納するWebサイトです。良いものはKeePassまたはLastPassです。

クライアントに再度パスワードを送信しようとしている会社の場合は、顧客が最初にアカウントを作成するときに回答するセキュリティの質問を設定する必要があります。このようにして、パスワードを忘れた場合、リンクをクリックしてこれらの質問に正しく回答し、パスワードをリセットできます。

ご参考までに、これは有益なブログであり、暗号化を主張し、特定のパスワードの使用を警告します http://www.ziptr.com/blog-last-4-digits-ssn-password = Ziptrから。

3
Katie Campbell