我正在构建一个Web应用程序,到目前为止,它仅收集和存储了低敏感度的数据,在接下来的几个月中,该Web应用程序将需要开始收集更多的敏感数据,因此,我确定需要确保当数据存储在数据库中时,数据将被加密,因此即使数据库受到破坏也无法访问。
我已经读过OWASP Cryptographic Cheat Sheet,其中的大部分内容都很有道理,但是有一点我无法理解。
规则-将未加密的密钥存储在远离加密数据的位置,如果密钥与数据一起存储,那么数据的任何妥协都将很容易妥协密钥。未加密的密钥永远不要驻留在与数据位于同一台计算机或群集。
可能的解决方案:
将未加密的密钥存储为root
,将其加载到应用程序中,该应用程序在启动时会通过环境变量以特权较低的用户身份运行,因此该密钥只能以root用户身份存储。 ---这不满足OWASP规则,因为密钥仍位于服务器上。
加密文件系统上的密钥,并需要第二个密钥(例如密码)以在人类用户启动时对它进行解密。 ---尽管这符合OWASP规则,但在应用程序启动时要求人类用户在场是不切实际的。
是否有针对此问题的推荐或公认的解决方案?
虽然该问题与技术无关,但欢迎使用特定于技术的解决方案,我目前正在使用: