我需要安全地加密数据库中的数据,以便如果数据库被转储,黑客也无法解密数据。
我计划在另一台机器上创建一个简单的密钥服务器,并允许数据库服务器访问它(受密钥服务器上的 IP 地址限制以允许数据库服务器访问)。密钥服务器将包含加密/解密数据所需的密钥。
然而,如果黑客能够获得数据库服务器上的 shell,他们就可以从密钥服务器请求密钥,从而解密数据库中的数据。
我该如何防止这种情况发生(假设所有防火墙都已安装到位,数据库未直接连接到互联网等)?即我可以使用某种方法来保护从数据库服务器到密钥服务器的请求,以便即使黑客在数据库服务器上有 shell,他们也无法发出相同的请求?来自数据库服务器的签名请求可以使发出这些请求变得不那么简单 - 我想这有助于增加破坏密钥服务器所需的时间,而黑客可能不会有太多时间。
据我所知,如果有人能获得 DB 服务器上的 shell,那么一切都会丢失。可以通过在 DB 中为每个数据项使用一个密钥来缓解这种情况,这样至少就不只有一个“主”密钥,而是黑客需要访问的多个密钥。
有什么安全的方法可以确保从数据库服务器到密钥服务器的请求是真实的并且可以信任?
答案1
然而,如果黑客能够获得数据库服务器上的 shell,他们就可以从密钥服务器请求密钥,从而解密数据库中的数据。
我怎样才能防止这种情况发生[...]?
基本上,你永远不可能做到,除非你从一开始就设计了一个可以缓解这种攻击的系统。当前的 PC 架构不允许这种应用。下一代安全计算基通过将执行代码路径的能力限制为仅“必要”的路径,旨在解决类似的任务。
端到端加密(其中加密/解密密钥由客户端管理,数据库服务器根本不了解密钥)可能代表另一种选择。尽管不给数据库服务器留下足够的信息(如索引)可能会大大削弱其预处理数据的能力,从而降低其对应用程序的价值。