0

ユーザーがパブリックキーとプライベートキーを取得して情報にアクセスし、パブリックキーがデータベースにアップロードされ、プライベートキーがユーザーパスワードで暗号化されるデータベース構造を作成しました。彼はそれにアクセスすることができます。この構造で「パスワードを忘れました」を実装するには、秘密鍵を新しいパスワードで暗号化するオプションを提供するUnserに電子メールを送信する必要があります。私はプライベートキーやパスワードをデータベースのどこにでも保存したくないので、プライベートキーをどこかに保存することを考えましたが、それはセキュリティ全体を脅かすでしょう。だから、今私が問題になっているのは、元のパスワードなしで秘密鍵にアクセスできないため、新しいパスワードでユーザーに再暗号化できるようにすることです。セキュリティで保護されたデータベースのパスワードを忘れた

答えて

1

パスワードを変更するためのオプションを追加するために元のパスワードは必要ありません。そしては非常に危険ですは、元のユーザーのパスワードを回復する方法を作成します。私があなたの場合は、SHA-256のようなハッシュアルゴリズムを使用し、その結果をユーザーのパスワードとして保存します。

質問に答えると、このパスワードのユーザー変更を達成する1つの方法は、UserテーブルにUUIDを作成することです。ユーザーが自分のパスワードを変更しようとすると、そのUUIDのリンク先のページにリダイレクトされます。このUUIDは、ユーザーがパスワードを変更できるようにする一時的なキーとして機能します。

例。

表:ユーザー

id | name | UUID 
1 | John | f39a33c3-e7f5-455a-afad-dcf845eb04a1 

ユーザーがパスワードを変更したい場合、あなたは彼の電子メールのリンクを送信:

だから、
http://yoursite.com/recover-password?UUID=f39a33c3-e7f5-455a-afad-dcf845eb04a1 

、ユーザーが新しいパスワードを入力してくださいページを開いて情報を送信すると、このUUIDが取得され、実際にそのユーザー用に生成されたUUIDであるかどうかが検証されます。パスワードの変更が発生する可能性があります。

+0

ハハXD私はそれがパスワードを格納するクリープに危険であることを知っています、病気は、より具体的に、1秒の質問を更新します。 – Luis

+0

uuid関数はどのようにして – Luis

+0

@luisなのでしょうか?これはほとんどすべての言語で利用できるアルゴリズムです。 javaで: 'java.util.UUID' – Dherik

0

これを達成する最も簡単な方法は、秘密鍵を現在のパスワードで復号化し、新しいパスワードで再暗号化し、データベース内の新しいパスワードを更新することです。

+0

しないでください。パスワードは決して暗号化されるべきではありません。代わりにDherikの提案にしたがって、安全なハッシュを使用してください。ユーザーのアカウントが明らかに攻撃の兆候なしに侵害された場合、潜在的な容疑者のリストに登録することは望ましくありません。また、単一の違反(または不正な管理者)がすべてのアカウントにアクセスできるようにする必要もありません。 – SQLmojoe

関連する問題