web-dev-qa-db-ja.com

パスワードマネージャーのパスワードのリセットを実装する方法

パスワードマネージャーのパスワードリセット機能を実装するにはどうすればよいですか?私は現在、PBKDF2でハッシュされたハッシュ+ソルトマスターパスワードを保存し、マスターパスワード自体でパスワードを暗号化していますが、ユーザーがマスターパスワードを紛失した場合、これはパスワードを復号化できないことを意味します。

マスターパスワードで暗号化されたバージョンのパスワードと、ユーザーのメールで暗号化されたバージョンと、ユーザーがアカウントを作成するときに生成されるランダムトークンを保存することを考えましたが、これは安全ですか?これを行うときにベストプラクティスはありますか?

ユーザーのメールもハッシュとしてのみ保存されます。

私の質問を明確にするために、パスワードが失われた場合にパスワードで暗号化されたデータを回復するためのベストプラクティスはありますか?

[〜#〜]編集[〜#〜]

私の現在のアイデアは、すべてのパスワードを暗号化するための2番目のキーを生成し、ユーザーがUSBに保存できるステガノグラフィーによってこのキーを画像で暗号化することですが、すべてのパスワードはデータベースに2回保存されます(両方とも暗号化されます)。それがリスクかどうかわからない。

編集2

@ A.Herseanの回答を利用した最終バージョン。

すべてのパスワードが暗号化されたキーを生成します。このキー自体は、パスワードとバックアップパスワード(イメージ内に保存されます)で暗号化でき、キーのこれら2つの暗号化はデータベースに保存されます。

7
Dennis van Gils

「質問を明確にするために、パスワードを紛失した場合にパスワードで暗号化されたデータを回復するためのベストプラクティスはありますか?」という質問に答えるには、パスワードを失っても暗号化されたデータを回復しないことがベストプラクティスです。暗号化のポイントはパスワードなしでは解読できないことなので、それ以外の方法で解読できると暗号化スキームが弱体化します。したがって、パスワードを書き留めて金庫に入れるなどして、最初からパスワードを紛失しないようにする必要があります。

「ユーザーのメールで暗号化されたバージョン+ユーザーがアカウントを作成するときに生成されるランダムトークンですが、これは安全でしょうか?」という質問の答えは「いいえ」であり、安全ではありません。トークン(および電子メールアドレスまたはそのハッシュ)を保存する必要があるため、パスワードをクリアテキストで保存するのと同じです。

柔軟性が必要な場合は、パスワードでデータを暗号化しないでください。ランダムに生成された暗号化キーでデータを暗号化し、このキーをパスワードで暗号化して、暗号化された形式でキーを保存します。次に、キーを他のパスワードで暗号化して、おそらく他の場所(保管庫内)に保存することもできます。結果として得られる暗号化の強度は、使用される最も弱いパスワードの1つになることに注意してください。

6
A. Hersean

これは基本的に@MarkoVodopijaの回答のフォローアップです。 暗号化のためのパスワード回復の背後にある根拠は、パスワードまたはキーを安全の場所に格納することです。これは、暗号化ソフトウェアのバックドアまたは重大な欠陥のみがキーなしでデータを読み取る

safeとして受け入れるものに応じて、異なる解決策が導き出されます。マルコによって提案されたものに加えて、あなたは持っています:

  • 紙に書いて、物理的な金庫の密封された封筒に保管します。以前は管理者パスワードの良い習慣でした、そしてそれは本当に安全な方法です...あなたが安全な鍵のすべての所有者を信頼できるなら。
  • 信頼できる人とそれを共有し、それを忘れないように信頼してください...しかし、これは共有シークレットにより適しています。そして、あなたがそれを忘れることができると思うなら、なぜ他の人もそれを忘れることができないのですか?
  • 企業のMicrosoftネットワークでは、暗号化されたフォルダに使用されるキーは、所有者の秘密キーで1回、ネットワーク管理者がアクセスできるキーで1回暗号化して、従業員が最初に離れる場合にシステム管理者がフォルダのロックを解除できるようにするのが一般的です。他人にすべてを与える-たとえば事故の場合。
3
Serge Ballesta

ユーザーパスワードからキーを取得する場合、パスワードのリセット機能を使用する簡単な方法はありません。よく知られている実装の例とパスワードリセットの解決方法については、 this および this を参照してください。

多くの実装には、マスターキーが失われた(またはケースで忘れられた)場合に備えて、回復キー機能があります。 BitLocker はその一例です。

登録時にパスワードリセットキーを作成し、ユーザーのメールに送信することを検討してください。ただし、ユーザーのメールがハッキングされた場合、これは侵害される可能性があります。

その他のオプションは、2人以上のユーザー/管理者間で(たとえば Shamir's Secret Sharing アルゴリズムを使用して)回復キーを共有することです。そのため、リセットの場合、特定のユーザーのパスワードをリセットするために複数の当事者が必要です。 Vault でも同様のことが行われます。

よく知られているいくつかの実装だけでは、特定のベストプラクティスはないと思います。それはすべて、デザインのニーズに依存します。

2
Marko Vodopija