パスワードマネージャーのウェブアプリを開発しています。それはただの楽しみのためです。私は誰のパスワードも公開していません。
私の考えはハッシュ+ソルティングを使用することでした、そしてそれは私がマスターパスワードのためにしたことです。しかし、私はそれらを使用するためにアカウントのパスワードを取得する必要があることを理解しました(そして、私は少しばかげたと感じました)ので、ハッシュはオプションではありません。
この場合、復号化キーに同じ問題があるため、対称暗号化は明らかに役に立ちません。また、非対称暗号化はオプションになる可能性がありますが、あまり実用的ではありません(ユーザーは秘密鍵を持っているため、パスワードを取得するたびに使用する必要があります。実用的ではありません)。
これらの暗号化ツール(またはその他のツール)を使用してこの問題を解決する方法を知りません。
概要:パスワードをデータベースに保存する必要がありますが、プレーンテキストで取得できる必要があります。
パスワードマネージャの通常のメカニズムは、ある種の「マスターキー」を用意し、そのキーで(対称的に)データを暗号化することです。あなたの場合、マスターキーは 適切なパスワードハッシュ を介してマスターパスワードから導出されます(つまり、この場合、パスワードベースのキー導出)。したがって、bcryptまたはPBKDF2を使用して、ユーザーのマスターパスワードをキー[〜#〜] k [〜#〜]に変換し、すべてのデータを保持しますそのユーザーは[〜#〜] k [〜#〜]で暗号化されています。
Webアプリケーションとしてそれを作成することは、疑わしい知恵です。 JavaScriptですべてクライアント側で実行したとしても、そのJavaScriptはサーバーから送信されるコードであり、すべてのユーザーのすべてのパスワードを確認するコードであるため、サーバーは非常にデリケートでジューシーなターゲットになります(サーバーが敵対的な制御下に置かれた場合) 、それはパスワード盗用の乱交に変わります)。
あなたは 銀行がおそらくそれを行う方法 を見ることができますが、セキュリティは実際には最も弱いリンクに依存しており、個人的にはWebセキュリティ(XSS、CSRFなど)にもっと注意を払います。
フロントエンドが復号化を担当するので、マスターキーとクリアテキストのパスワードの両方がサーバーのメモリやネットワークに存在しない場合は、はるかに優れています。ただし、これにより、バックエンドデータベースに配置できるトリックの量が制限されます。