gpt4 book ai didi

php - 如何为多个用户存储加密文件

转载 作者:行者123 更新时间:2023-11-30 21:56:47 26 4
gpt4 key购买 nike

一个在线系统(用PHP编写的前端,但不太相关)需要将文本存储在加密的MySQL数据库中,这样本地系统管理员就无法查看数据,也无法在数据库发生故障时查看数据被偷了。系统上有多个用户必须有权访问数据,他们通过标准设置登录/验证,即同一数据库中的用户名和散列密码。

由于存储的数据需要由系统解密以显示给经过身份验证的用户,但本地系统管理员必须无法解密相同的数据,显而易见的方法是拥有一个用于加密/使用对称密码解密存储的数据。问题(实际上是我要征求意见的问题)是如何/在何处存储此 key ?

经过身份验证的用户不应该直接访问 key ,因此需要以某种方式将其存储在系统中并由软件根据需要解密存储的文件,但本地系统管理员也不能获知此 key 或者他们可以使用它来解密存储的数据。

因此,一种方法是将 key 加密存储在数据库中,但为了让系统基于每个用户解密和使用 key ,它必须针对经过身份验证的用户独有的内容进行加密,例如他们的密码。好的,到目前为止一切顺利,但是有一个问题...

如果需要更改 key 怎么办?更改 key 的人要么必须知道每个人的密码,以便他们可以针对每个用户帐户加密新 key (不切实际),要么他们必须将新 key 提供给每个用户并要求他们重新输入(不是选项)。

此外,从安全的角度来看,将此 key 有效地存储在数据库中 n 次(其中 n 是用户数)并使用不同的 key (用户密码)加密是否是个好主意?也就是说,这是否会通过向潜在黑客提供相同加密数据的多个示例来更多地暴露 key ?

有没有更好的办法?

最佳答案

感谢 jonrsharpe 指出 Tom Leak 的帖子:https://security.stackexchange.com/a/71915

我们的系统将基于此方法,如下所示:

  • 文档存储在使用对称密码加密的表中。

  • 上述对称密码的 key 存储在一个单独的表中,每个有权访问文档的用户一次,使用非对称密码和用户的公钥加密。

  • 用户的私钥存储在另一个使用对称密码加密的表中, key 是用户的密码。

这意味着可以通过简单地删除该用户在文档 key 表中的条目来撤销对该文档的访问;如果文档被修改,系统只需要删除 key 表中文档的所有条目,然后将它们添加回去,用每个用户的公钥加密;只需在使用用户公钥加密的文档 key 表中添加一个条目,即可授予其他用户访问权限;有权访问文档的用户可以使用他们的私钥解密文档的 key ,然后使用他们自己的密码解密。

正是我们所需要的!

关于php - 如何为多个用户存储加密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44884283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com