在线系统(前端用 PHP 编写,但不太相关)需要将文本存储在加密的 MySQL 数据库中,这样本地系统管理员就无法查看数据,也因此在数据库被盗的情况下也无法查看数据。系统上有多个用户必须有权访问数据,他们通过标准设置登录/验证,即同一数据库中的用户名和哈希密码。
由于存储的数据需要由系统解密以显示给经过身份验证的用户,但本地系统管理员必须无法解密相同的数据,显而易见的方法是拥有一个用于加密/解密存储的密钥使用对称密码的数据。问题(实际上是我要征求意见的问题)是如何/在哪里存储此密钥?
经过身份验证的用户不应直接访问密钥,因此需要以某种方式将其存储在系统中并由软件按需解密存储的文件,但本地系统管理员必须无法学习此密钥,否则他们可以用它来解密存储的数据。
因此,一种方法是将密钥加密存储在数据库中,但是为了让系统在每个用户的基础上解密和使用密钥,它必须针对经过身份验证的用户所独有的东西进行加密,例如他们的密码。好的,到目前为止一切顺利,但有一个问题......
如果需要更改密钥怎么办?更改密钥的人要么必须知道每个人的密码,以便他们可以针对每个用户帐户加密新密钥(不切实际),要么他们必须将新密钥提供给每个用户并要求他们重新输入(不是选项)。
另外,从安全的角度来看,让这个密钥在数据库中有效地存储 n 次(其中 n 是用户数),并用不同的密钥(用户密码)加密,这是个好主意吗?即,这是否会通过向潜在黑客提供相同加密数据的多个示例来更多地暴露密钥?
有没有更好的办法?