web-dev-qa-db-ja.com

PHPで回復のためにパスワードを解読する方法

ユーザーがサインアップしてサインインできるWebサイトを持っています。復号化されたパスワードを送信するパスワード回復システムを実装したいと思います。ユーザーがサインアップすると、パスワードはユーザーの一意のユーザー名でソルト処理され、秘密鍵が付けられ、SHA256でハッシュされます。

秘密鍵、ユーザーのユーザー名、ハッシュ結果、および暗号化方法がわかっている場合、これを行う方法はありますか?

1
DMVerfurth

あなたは私たちに自分を足で撃つ最善の方法を求めています。 Peter Harmann が言うように、パスワードを復号化して電子メールで送信することによってパスワードを回復する正当な理由は絶対にありません。パスワードを復号化できる場合、攻撃者は同じことを行う可能性があります。パスワードハッシュの要点はそれを避けることです!さらに、電子メールは非常に安全な媒体ではないため、パスワードで人々の受信ボックスをポイ捨てすることは良い習慣ではありません。

代わりに何をすべきか?パスワードを回復する従来の方法は、パスワードリセットリンクをユーザーにメールで送信することです。リンクには、ユーザーに接続された安全でランダムな長いトークンが含まれています。このトークンを使用すると、リンクをクリックした人がパスワードを1回変更できます。トークンは妥当な時間内に期限切れになるはずです。詳細を知りたい場合は、Troy Huntに いい記事 が載っています。

あなたがそれをしている間、あなたのパスワードハッシュを改善するためにあなたがしなければならないいくつかの重要な事柄があります:

  • 最も重要なことであり、これは主要な取引であるため、SHA-256の単一ラウンドを使用しないでください。これはほとんど十分ではありません。 bcryptなどの遅いアルゴリズムを使用する必要があります。 この質問 を参照してください。
  • ユーザー名を使用するよりも、ランダムなソルトを使用する方が適切です。これは上記のポイントほど重要ではありませんが、それでも良い方法です。
8
Anders

定義上、ハッシュは一方向です。これは暗号化されていないため、復号化できません。これは仕様によるもので、[〜#〜] never [〜#〜]メールを使用してユーザーパスワードを送信する必要があります。しないでください。あなたが持っていると思う理由が何であれ、それは十分ではありません。パスワードをハッシュ解除できる場合は、システムが壊れていることを意味します。

3
Peter Harmann

あなたは確かにハッシュをクラックしようとすることができます。ハードウェアがない場合、これは遅くて非効率的なプロセスであり、成功する保証はありません。他のユーザーがすでに述べたように、パスワードが解読可能である場合、システムは壊れています。私がお勧めすることは、新しいパスワードを生成し、それをユーザーにメールで送信することですが、それは私の2セントにすぎません。

0