有没有办法将敏感的用户数据存储在数据库中,这样即使服务器和数据库受到威胁,攻击者也无法读取原始数据?您显然可以加密数据,但是服务器必须可以访问密钥以进行解密,并且会与服务器一起受到损害。
编辑:我将使用 linode 等 vps 托管。假设攻击者可以在一小时内获得对服务器(也有数据库和源代码)的 root 访问权限。
有没有办法将敏感的用户数据存储在数据库中,这样即使服务器和数据库受到威胁,攻击者也无法读取原始数据?您显然可以加密数据,但是服务器必须可以访问密钥以进行解密,并且会与服务器一起受到损害。
编辑:我将使用 linode 等 vps 托管。假设攻击者可以在一小时内获得对服务器(也有数据库和源代码)的 root 访问权限。
从管理员用户处获取密钥
仅将密钥存储在服务器的内存中。仅内存副本用于根据需要对数据进行解密。当服务器启动时,它必须从管理员那里获取密钥信息。当然,这有一些变化。管理员可以暂时插入 USB 驱动器。管理员可以提供一个密码,以提供对另一台机器的瞬时访问权限,其中密钥位于数据库或其他任何地方。管理员可以输入密钥库文件的密码,该文件将在服务器上响应控制台上的提示。在管理员登录并选择“输入密钥”选项之前,该网站将无法运行。
这使得攻击者必须先在内存中找到密钥,然后才能解密数据。
第二台机器上的键
使用的第二种方法不如依赖管理员安全,但仍然更安全。将密钥放在网络上某处的第二台机器上。确保它没有与服务器相同的用户帐户。当服务器启动时,它必须以某种方式连接到另一台机器并获取密钥,并将它们仅存储在内存中。同样,您可以依靠管理员为另一台机器上的帐户提供密码,或者在 Linux 中,使用带有存储密钥的 SCP。确保通信安全非常重要,这样攻击者就不能只看到穿过网络的密钥。
在这种情况下,攻击者必须破坏两台机器才能从其中一台机器获取数据并从另一台机器获取密钥。所以它比在同一台机器上拥有钥匙更安全。
其他要点
您可以在网络上找到所有这些以及更多信息。谷歌是你的朋友。
但是请记住一些明显的安全预防措施,以使坏人更难:
您可以尝试使用密钥卡/USB 来保存相关的加密数据,但通常如果物理安全受到损害,所有赌注都将失败。