web-dev-qa-db-ja.com

データ暗号化キーをDBに保存します。安全かどうか?

私は現在サービスを引き継いでいますが、DBを調べていると、DBの関数で暗号化キーがハードコードされているDBの関数を使用してデータの一部を暗号化していることに気付きました。

私の知る限り、これは良い習慣ではなく、DBデータの暗号化の目的は、DBが不正な関係者に漏洩した場合にデータを保護することであるため、暗号化はかなり冗長になります。しかし、この場合、DBが危険にさらされると、暗号化キーも危険になり、暗号化は無意味になります。

ここで修正しますか、それとも何か不足していますか?

また、それが間違った方法である場合、サーバーアプリレベルで発生するように暗号化/復号化プロセスを変更する必要がありますか?

1
yhware

経験則では、暗号化されたデータと暗号化キーを可能な限り「離して」おく必要があります。つまり、データが漏洩した場合に、キーも漏洩する可能性を最小限に抑えます。

この素晴らしい答え は、暗号化キーを格納する場所について、1(最高)から7(最低)までのランキングがあります。そして、ご想像のとおり、7番目は「データベース内」にあります。

7。キーをデータベースに保存します。これで試行錯誤することはありません。それでも、憂鬱なほど人気のあるオプション。

したがって、そこにリストされている他の代替案を検討することをお勧めします。つまり、次の条件に当てはまる場合は、関数にハードコーディングして格納する方が、テーブルに格納するよりも優れています。

  1. データベースサーバーは、インターネットから直接アクセスできません。
  2. データベースのWebユーザー(つまり、アプリがログインするユーザー)には、関数のソースコードを読み取る権限がありません(そのため、Webユーザーは暗号化キーを読み取ることができませんでした)。
  3. データベースのバックアップには、関数のソースコードは含まれません。

暗号化キーがDBソースコードではなくアプリのソースコードにハードコードされている場合、暗号化をアプリレイヤーに移動しても、必ずしもそれがはるかに良くなるわけではありません。

2
Anders