2017-12-29 63 views
0

クライアントの情報を保存する必要のあるアプリケーションを作成しています(私のサービスに他の機密情報とともにアクセスするにはAPIキーAPI Secretのように)。暗号化された機密ユーザー情報をデータベースに格納する方法は、実行時に解読する必要がありますか?

今、データベースでは、これらを暗号化された形式で保存します。これに関して、私は対称鍵暗号AESで詳細を暗号化することに決めました。

しかしセキュリティ上の理由から、別のAES暗号化キーをクライアントごとに使用したいので、DBが侵害されても、すべてのデータを単一のキーで復号化することはできません。

しかし、明白な理由のために私は自分の秘密鍵を暗号化された情報でDBに保存したくありません。

私は鍵を保管する方法を決めることができません。特に、どの鍵がどのクライアントに属しているかのバインディングが必要です。

これをどのように達成できますか?このようなシナリオでは、どのアプローチが最適ですか?

+0

これは本当に代わりにsecurity.stackexchange.comサイトに属しています。 stackoverflowで言語やランタイム環境を指定せずにセキュリティタグを使用する傾向がある場合は、それを赤い旗のように見なければなりません。 –

答えて

2

KDFを使用してユーザーのパスワードから暗号化キーを取得し、このキーを使用して個人情報を暗号化します。

APIシークレットやその他のプライベートデータを保存する必要がある操作を行う場合は、ユーザーのパスワードを要求してから、再度キーを派生させ、そのキーを使用して解読します。

ユーザーがパスワードを変更できるようにするには、ユーザーごとに仲介のランダムキーを追加し、このキーを使用してデータを暗号化します。パスワードから派生した鍵を使用して、ランダム鍵を暗号化します。その後、ユーザーのパスワードを変更するときは、ランダムキーを復号化して再暗号化するだけで済みます。

関連する問題