データベース内のデータの暗号化に関する最大の問題に遭遇しました:
➽鍵はどこに保管しますか?
暗号化はデータの保護の問題を解決することはできず、データをキーに「集中」させることしかできません。キーを保存する場所はどこでも、アプリケーションはデータを復号化できる必要があるため、攻撃者が行う可能性があります。私が知っているこの問題には2つの解決策があります:
- できるだけ安全な場所に鍵を置きます。つまり、サーバー上のアクセスできないディレクトリのwww-rootディレクトリの外に必ず配置する必要があります。データの重要性に応じて、暗号化を別の専用サーバーにアウトソーシングすることも検討できます。
- キーをまったく保存せず、ユーザーパスワードから取得します。サーバーでさえデータを復号化できないため、これが唯一の本当に安全な方法です。もちろん、短所は、ユーザーがサービスを使用するたびにパスワードを入力する必要があることです。ユーザーがパスワードを変更した場合は、すべてのデータを再暗号化する必要があります。ユーザーがパスワードを忘れると、データは失われます。
P.S. 前にデータを暗号化することをお勧めします MySQL AES_ENCRYPTはIVなしでECBモードを使用するため、データベースに保存します。これにより、特定の値を検索できますが、安全性は低くなります(パスワードで検索したくないと確信しています)。