4

各Webサーバーがワークグループに属するWebファームで実行されるASP.NETMVC3アプリケーションがあると仮定します(共有アカウントを持つドメインに割り当てます)。Webファームも自動スケーラブルです。つまり、インスタンスの数は負荷に依存します。機密データは、データベースに保存/データベースから取得されるときに暗号化および復号化されます。対称キーと非対称キーは各マシンに保存され、ACLで保護され、DAPIを使用して暗号化されます(マシンキーを使用)。

コンプライアンスとセキュリティ上の理由から、キーは定期的にローテーションする必要があります。システムをオフラインにすることなく、一定の間隔でキーを自動的に回転させるようにシステムをどのように設計/変更しますか?キーを使用して暗号化された任意の数の列を持つ任意の数のテーブルがあると想定します。

多くのQ&Aは、使用するアルゴリズムとキーの保護方法に関連していますが、特にデータベースを共有する動的環境(自動スケーリング環境)で、これらのキーをローテーションできるようにするアプリケーションを設計および実装する方法を実際に扱っているものはほとんどありません。

4

2 に答える 2

3

システムに複数のキーがある

複数のエンコーディング (または暗号化スキーム、キー) がある場合、通常、最初に行うことは、この特定のデータにどのキーが使用されているかを知る必要があるため、ある種のバージョン管理スキームを導入することです。これにはいくつかの選択肢があります。

  • タイムスタンプ: データが暗号化されたタイムスタンプをデータと共に保存します。次に、同じキーが使用される一定の長さの間隔に時間を分割します。
  • バージョン番号:単純に昇順のバージョン番号を割り当てることもできます。
  • キーのフィンガープリント: キーのフィンガープリントをデータと共に保存します

いずれの場合も、データを復号化できるように現在使用されているすべてのキーを保存する必要があります。データを読み取るときは、バージョン識別子と一致するキーを検索して復号化するだけです。書き込み時には、現在アクティブなキーを使用し、暗号化されたデータとバージョン識別子を保存します。データベースにこのキーで暗号化されたデータがないことが確実な場合は、キーを廃止 (削除) できます。

新しいキーのデプロイ

新しいキーにロールオーバーするたびに、このキーを生成してデプロイする必要があります。これは中央方式で行うことも、分散鍵合意プロトコルを使用することもできます。

データを再暗号化する

データを再暗号化する必要がある場合は、次の 2 つの方法で実行できます。

  • バックグラウンド プロセス: 古いバージョン ID を持つ N 個のデータ項目を取得し、それを復号化して再暗号化し、結果を保存するバックグラウンド プロセスがあります。システムが過負荷にならないように、実行の合間に少し眠ります。
  • アクセス時の更新: データを読み取ったときに古いバージョン ID が含まれていることに気付いた場合は、現在のキーで再暗号化して結果を保存します。これは、データ アクセス パターンによってはすべてを再暗号化しない可能性があるため、追加のバックグラウンド プロセスが必要になる場合があります。

非対称暗号

非対称暗号を使用している場合 (たとえば、クレジット カード番号の保存、暗号化する公開鍵しか持たない Web サーバー、復号化する秘密鍵を持つ支払い処理業者など) を使用している場合、秘密鍵を持つマシンのみが使用されるため、少し注意が必要です。データを再暗号化できます。他のすべての側面は同じです。

于 2012-06-19T11:25:16.863 に答える
0

Google の Keyczarはそのようなフレームワークを提供しますが、.Net バージョンはありません。

たぶん、C++ バージョンを .Net ラッパーでラップできますか?

于 2012-06-19T11:18:42.860 に答える