首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为多个用户存储加密文档

如何为多个用户存储加密文档
EN

Stack Overflow用户
提问于 2017-07-03 11:21:41
回答 2查看 1.4K关注 0票数 3

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

由于存储的数据需要由系统解密以显示给经过身份验证的用户,但本地系统管理员必须没有办法解密相同的数据,因此最明显的方法是拥有一个秘密密钥,用于使用对称密码加密/解密存储的数据。问题(真正的问题,我正在征求意见)是如何/在哪里存储这个密钥?

通过身份验证的用户不应直接访问密钥,因此需要将密钥以某种方式存储在系统中,并由软件根据需要对存储的文件进行解密,但本地系统管理员也不能了解该密钥,或者可以使用该密钥解密存储的数据。

因此,一种方法是将密钥存储在加密的数据库中,但为了使系统能够对每个用户解密和使用密钥,必须对经过身份验证的用户特有的内容进行加密,例如他们的密码。好吧,到目前为止还不错,但有个问题.

如果钥匙需要更改怎么办?更改密钥的人要么必须知道每个人的密码,这样他们才能针对每个用户帐户加密新密钥(不切实际),要么他们必须将新密钥交给每个用户并要求他们重新输入(不是选项)。

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

有更好的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-05 15:15:20

感谢jonrsharpe把我指向Tom的帖子:https://security.stackexchange.com/a/71915

我们的系统将以以下方法为基础:

  • 文档存储在使用对称密码加密的表中。
  • 上述对称密码的密钥存储在一个单独的表中,对于每一个访问该文档的用户,使用一个带有用户公钥的非对称密码加密一次。
  • 用户的私钥存储在另一个使用对称密码加密的表中,密钥是用户的密码。

这意味着可以通过简单地删除文档密钥表中的用户条目来取消对文档的访问;如果文档被修改,系统只需要删除密钥表中文档的所有条目,然后使用每个用户的公钥将它们添加回加密;可以允许其他用户使用用户的公钥向文档密钥表加密添加一个条目;访问该文档的用户可以使用他们的私钥解密文档的秘密密钥,而私钥则使用他们自己的密码解密。

这正是我们所需要的!

票数 5
EN

Stack Overflow用户

发布于 2017-07-03 12:40:44

一种解决方案是在用户键和DB键之间增加一个级别的密钥。然后,如果数据被重新加密,只需要重新加密一个额外的密钥。还可能需要更改加密密钥,只需更改最后一个密钥,而不是重新加密新密钥下的数据。

但是,也许还可以使用其他更好的解决方案,比如DB角色。

请记住,这只是访问加密数据的用户的密码之一被破坏,数据被泄露,并且随着每个这样的用户而升级。

另一种减少具有访问权限的系统管理员数量的解决方案是将DB放到一个专用服务器上,只有很少几个系统管理员具有两个因素的身份验证,并且没有直接的Internet访问,只保护来自服务器在线服务器的访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44884283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档