高度な暗号化されたキー設定を処理するための組み込みのMySQL機能は実際にはありません。暗号化ロジックの大部分を独自のPHPおよび/またはブラウザー側(javascript?)コードに実装する必要があります。
しかし、あなたが述べた懸念は少し独特です:あなたの唯一の本当の懸念は、リモートクライアントのデスクトップ/ラップトップワークステーションからのSQLインジェクションまたはブルートフォース(パスワード推測)攻撃だと思われます。これにより、言及されていない他のセキュリティ対策がすでに計画されており、侵害の可能性のある手段を分析したと思われます。
たとえば、承認されていないリモートクライアントIPからのあらゆる種類のアクセスからMySQL / PHPホストを保護するファイアウォールルールがあるとします。私が正しければ、侵害されたユーザーのワークステーションからの攻撃についてのみ心配しているのは理にかなっています。
また、リモートクライアントホストの攻撃者がroot / Admin権限に昇格したり、実際のユーザー自身のアカウントを直接侵害したりできる場合、暗号化やその他の保護手段に関係なく、そのクライアントのデータは保護されないことを理解していると思います。(攻撃者は、ディスクに保存されている任意の場所からキーを読み取るか、ログオン時に実際のユーザーがキーを入力するとキーをスヌープし、キーがデータにつながる可能性があります。)
これらの2つの仮定から始めて、関連する脅威は、A)ブルートフォースパスワードの推測、およびB)SQLインジェクションの試みの2つだけであると結論付けるのは理にかなっています。
- 攻撃者が実際のユーザーのキーを把握していない場合、または実際のユーザーのデータ以外にもアクセスしたい場合は、攻撃者は実際のユーザーまたは別のアカウントに対して総当たりのログオン資格情報を試すことができます。(理論的には、各アカウントを特定のリモートクライアントIPにロックダウンすることもできます。これは、リスクを区分するのにも役立ちます。)
- 攻撃者が実際のユーザーの有効なキーを取得した場合、攻撃者はログオン画面(おそらくセキュリティで保護するのに十分簡単なもの)を通り過ぎて、バグのある可能性のあるアプリコードのやわらかい腹をたどります。実際のユーザーのコンテキストからSQLインジェクションが成功すると、他のクライアントデータへのアクセスも可能になります。
次に、サーバー側の暗号化がこれらの状況にどのように適用されるかについて話しましょう。
- サーバー側の暗号化は、SQLインジェクションの脅威に対して確実に役立ちます。行の値がDBテーブルで暗号化されている場合、攻撃者は他のアカウントに属するデータの意味不明な暗号文しか見ることができません。脅威は隔離され、封じ込められています。
- ただし、ブルートフォースによるパスワードの推測は、サーバー側の暗号化に直面している攻撃者にとって実際には難しくありません。ユーザーのキーがサーバーに保存されているか、パスワードからその場で生成されているかに関係なく、重要なことは、正しいパスワードを持っているかどうかだけです。サーバーは、パスワードが正しいことを確認するために有効な格納されたキーを使用することを許可するか、パスワードがそのキーを生成するための正しい入力であるために有効なキーを計算します。
一方、クライアント側の暗号化は、ブルートフォースパスワード攻撃を実際には無関係にします。適切に構築されたキーを総当たりにすることはできません。クライアント側の暗号化でも、SQLインジェクションに対する保護はサーバー側の暗号化と基本的に同じです。クライアントはログオン時にサーバーにキーを渡し、セッションが終了するまでコピーをメモリに保持します。これにより、サーバーに暗号化CPUの負荷がかかります。または、クライアントはブラウザで暗号化/復号化を単独で処理できます。どちらの手法にも、浮き沈みがあります。
- そのキーをサーバーに渡すと、コーディングと管理がはるかに簡単になり、最適化された暗号コード(おそらくコンパイルされたC)のため、通常ははるかに高速になります。
- 純粋なクライアント側のアプローチでは、セキュリティがさらに強化されます。攻撃者がサーバーでrootになったとしても、暗号化されたデータを読み取ることはできず、読み取ることはできません。考えられる唯一の攻撃方法は、リモートクライアントワークステーションを危険にさらすことです。
最後に、データベース内のデータを暗号化することには、運用上の大きな欠点があることにも触れておきます。暗号化されたデータ表現は基本的にランダムなパターンであるため、インデックス付け、結合などの基本的なデータベース機能は機能しません。クライアントは大きなロジックの負担を引き受け、データベース機能が通常もたらす多くの利点を失う可能性があります。