web-dev-qa-db-ja.com

データベース関数またはコードを使用して暗号化を実行することは望ましいですか?

私がよく知っているいくつかのデータベースには、暗号化のための関数またはモジュールが用意されています。例には、Oracleデータベースの場合は dbms_crypto が含まれ、MySQLの場合は組み込みの functions が含まれます。

一般的に使用されているプログラミング言語のほとんどには、暗号化ライブラリが用意されています。

セキュリティの観点から、どちらか一方を選択することにつながる問題はありますか?ある方法が他の方法よりも非常に望ましいですか?

12
user10211

暗号化を行う場合は、暗号化するデータと暗号化に使用するキーを、ジョブを実行するマシンに転送する必要があります。フロントエンドで暗号化を行う場合、データベースを「信頼する」必要はありませんが、複数のフロントエンドがある場合、これにより状況がさらに複雑になる可能性があります。データベースで暗号化を行うと、悪意のあるデータベースのハイジャックによって裸のままになります。例えば成功したSQLインジェクション攻撃はさらに壊滅的です。

一般的に言って、フロントエンドで暗号化を行うか、データベースで暗号化を行うかを区別する場合は、一方が侵害され、もう一方が侵害されるシナリオを想像する必要があります。逆に、両方のマシンが「同等に堅牢」であると考える場合、問題はパフォーマンスのみに関するものです。

3
Thomas Pornin

提供されるアルゴリズムはほとんど同じです。どちらを選択するかは、ユースケースによって異なります。考慮すべき事項:

  1. 暗号化がサーバー側で行われる場合は、クライアント側での暗号化を検討して、回線を介したクリアテキストの送信を回避します。
  2. データのタイプに基づいて、可逆または非可逆暗号化を決定します。
  3. 元に戻せない暗号化の場合、改ざんを回避するため、または後続の比較としてハッシュを使用するためだけのハッシュですか?
5
Akber Choudhry