一つの可能性は、データへのアクセスを得るために使用されるキーからのデータを暗号化するために使用されるキーを切り離します。注意深く行うことで、ユーザーはデータベース内のレコードを1つだけ変更しながら、必要に応じて頻繁にパスワードを変更することができます。これとは別に、データを暗号化しているキーの変更をスケジュールすることができます。
どのように動作しますか?
- あなたがランダムに生成された鍵、K U、DとユーザUのデータDを暗号化します。
- あなたはランダム塩、(あなたがの記録を保存)S1 Uと、ユーザーのパスワードP1 U(から生成された別のキーK1 U、KとキーK U、Dを暗号化しますあなたは追跡しても、追跡しなくてもよい)。暗号化されたキーは、E1 Uです。
- ユーザーがデータにアクセスしたいときに、S1 UとK1 U、Kを保存します。
- ユーザーUが自分のデータにアクセスする場合、彼らは自分のパスワード、P1 Uをご提供し、あなたはS1 Uを検索し、そのデータからK1 U、Kを再生成し、E1を復号化するためにそれを使用 Uとなり、もう一度K U、Dとなり、実際のデータを復号化します。
- 与えられたパスワードが正しいことを検出できるので、ユーザーが間違ったパスワードを入力した場合にバイナリの不調を吐くことはありません。
このレベルのインダイレクションの利点は、ユーザーがパスワードを変更したいときです。これに類似したテクニックを使用しない場合は、古いパスワードと新しいパスワードを取得して検証し、古いパスワードですべてのデータを復号化し、新しいパスワードですべてを再暗号化する必要があります。間接的なレベルで
、あなたはまだ自分の古いパスワード(P1 U)のために、ユーザとその新しいパスワード(P2 U)を求め、それらを検証していますが、唯一のE1 Uを復号化する必要があるとSUと新しいパスワードP2 U、Kと新しいパスワードPUから新しい鍵K2 Uを再暗号化します。暗号化されたデータに触れる必要はありません。間接的なレベルで
、システムSは、システムのパスワードで暗号化されたデータ鍵K U、D、第二暗号化されたコピーを維持することができます。データを暗号化するために使用される鍵を変更する必要があるかまたは望ましい場合、システムは暗号化された鍵のコピーを使用してそれを行うことができます。ユーザーがキーに最後に記録したキーの記録を保持することができるので、ユーザーがデータを見に戻ったときに、保存されたキーK2 U、Dを変更することができますパスワードは残ります(残りの時間はありません)。
これはKevin Kenanの "Cryptography in the Database: The Last Line of Defense"のアイデアの一部に軽いバリエーションです。 Kn U、Kのキーは、KEK(Key-Encrypting Key)の例です。また、暗号化されたデータの管理に役立つ主要なファミリーについても読むことができます。
暗号化された鍵はどこに保存されますか?アプリケーションサーバー上のメモリ内、またはデータベースサーバー上の物理ストレージ内にありますか? – dimiguel
@dimgl信頼できる永続的なストレージにバックアップを保存しています。確かに記憶にない。内容が停電によって取り返しがつかなくなるかどうか気にしない限り、 – erickson