GDPR(EU一般データ保護規則)の実装では、個人情報を暗号化する必要があります。データを暗号化する方法は2つあります。
暗号化と復号化の責任はWebアプリケーションだけに任せてください。データベース内の実際のデータは完全に暗号化されています。このように、データが盗まれた場合、データは安全です(私の暗号化が適切であると想定)。
データベースレベルで暗号化を有効にし、アクセスするWebアプリケーションを信頼できるクライアントとして追加します。暗号化と復号化はデータベース自体で行われます。このように、データベースの資格情報がわかっている場合、データは失われます。
それでは、パフォーマンスに過度に妥協することなく、最良の方法はどれですか?
データベースに暗号化/復号化を処理させるのは、おそらく最良の方法です。
すでに述べたように、クライアント側の暗号化に有利な点が1つあります。これは大きな問題ですが、上記のメリットを上回るとは思いません。
SELECT * FROM table;
を実行し、すべての行を手動で復号化してフィルター処理する必要があります。これは...うまくいきません。攻撃者が送信できるリクエストへの直接応答として、直接Webアクセス可能なサーバーのメモリにキーを長期間保持します。Kevinpoints out なので、特定のフィールドを暗号化するオプションもあります。たとえば、顧客のユーザー名とクレジットカード番号を保存する場合、後者は確実に暗号化する必要がありますが、前者はおそらく暗号化されません。含めることができます。 a CHECK
制約 暗号化されていないクレジットカードを誤って追加しないようにします。クレジットカード番号は特に良い例です。クレジットカード番号に対して照合を行う必要がないため、データベースから取得またはデータベースに保存するだけなので、できますクライアント側から効率的に処理します。
ただし、優れたセキュリティは1つではないことに注意してください。良いセキュリティが行われていますすべて正しい:
どのようにデータベースを処理しても、これで終わりではありません。 すべてに注意してください。
データベースごとに、またはフィールドグループごとに暗号化を追加することは、暗号化される各フィールドと共にインデックスフィールドも作成されるという条件で、最善のトレードオフのようです。
一度にいくつかの問題を解決します。
最新の傾向は、ハードウェアセキュリティモジュールであるHSMに秘密キーを格納することです。 HSM内からキーをエクスポート不可としてマークするオプションがあります。暗号化する必要のあるデータはHSMに送信されますが、大量のデータの場合はパフォーマンスに影響する可能性があります。キーがエクスポート可能な場合は、エクスポートされ、アプリケーションが暗号化に使用するためにメモリに保持されます。鍵をエクスポートするときは、最初にHSM内の別の公開鍵を使用して暗号化してから、アプリケーションに送信する必要があります。アプリケーションにはプライベートキーがあるため、マスター暗号化キーを復号化できます。ここで問題は、このキーのキーをどこに保存する必要があるかです。アクセスが制限されたデータベースに保存できます。