システムに複数のキーがある
複数のエンコーディング (または暗号化スキーム、キー) がある場合、通常、最初に行うことは、この特定のデータにどのキーが使用されているかを知る必要があるため、ある種のバージョン管理スキームを導入することです。これにはいくつかの選択肢があります。
- タイムスタンプ: データが暗号化されたタイムスタンプをデータと共に保存します。次に、同じキーが使用される一定の長さの間隔に時間を分割します。
- バージョン番号:単純に昇順のバージョン番号を割り当てることもできます。
- キーのフィンガープリント: キーのフィンガープリントをデータと共に保存します
いずれの場合も、データを復号化できるように現在使用されているすべてのキーを保存する必要があります。データを読み取るときは、バージョン識別子と一致するキーを検索して復号化するだけです。書き込み時には、現在アクティブなキーを使用し、暗号化されたデータとバージョン識別子を保存します。データベースにこのキーで暗号化されたデータがないことが確実な場合は、キーを廃止 (削除) できます。
新しいキーのデプロイ
新しいキーにロールオーバーするたびに、このキーを生成してデプロイする必要があります。これは中央方式で行うことも、分散鍵合意プロトコルを使用することもできます。
データを再暗号化する
データを再暗号化する必要がある場合は、次の 2 つの方法で実行できます。
- バックグラウンド プロセス: 古いバージョン ID を持つ N 個のデータ項目を取得し、それを復号化して再暗号化し、結果を保存するバックグラウンド プロセスがあります。システムが過負荷にならないように、実行の合間に少し眠ります。
- アクセス時の更新: データを読み取ったときに古いバージョン ID が含まれていることに気付いた場合は、現在のキーで再暗号化して結果を保存します。これは、データ アクセス パターンによってはすべてを再暗号化しない可能性があるため、追加のバックグラウンド プロセスが必要になる場合があります。
非対称暗号
非対称暗号を使用している場合 (たとえば、クレジット カード番号の保存、暗号化する公開鍵しか持たない Web サーバー、復号化する秘密鍵を持つ支払い処理業者など) を使用している場合、秘密鍵を持つマシンのみが使用されるため、少し注意が必要です。データを再暗号化できます。他のすべての側面は同じです。