我正在构建一个包含健康信息的应用程序。这个面向消费者的应用程序对我来说是新的。我想要一种方法来完全消除隐私问题。当我回顾保护可公开访问的数据库中的敏感数据的方法时,我经常遇到数据库半透明的概念。有原书 http://www.wayner.org/books/td/关于这个主题和来自 Oriellynet 的关于该主题的优秀教程 http://www.oreillynet.com/pub/a/network/2002/08/02/simson.html.
我担心的是,在我认为非常现代的编程网站(比如这个)上,我看到的关于这一想法的信息很少。维基百科上似乎没有关于这个想法的文章。这里没有关于该主题的问题,也没有关于该主题的最新教程或文章。简而言之,其想法是某些数据对于系统的某些用户来说是清楚的,而其他用户则通过加密方式被阻止访问该数据,即使他们具有管理员访问权限。
我在提供半透明数据访问的原型数据库上做了大量工作。我遇到了一个相当大的问题:要真正做到半透明,就不能有密码恢复机制。如果管理员可以重置用户密码,那么他们就可以短暂访问用户数据。为了真正实现半透明,用户绝不能丢失密码。
我们这些在日常生活中使用强加密来保护私人数据的人(当然是技术人员)在使用这些强加密系统时已经习惯了这个问题。如果“河豚”这个词是您日常词典的一部分,那是一回事,但是一个以消费者为中心的网站呢?我担心用户不愿意将他们的思想集中在真正的数据库半透明性隐含的“真正为您加密”的概念上。我害怕以“我丢失了密码”开头并以“我无能为力”结束的支持电话。
我的问题:我应该在我的应用程序中实现这个方法吗?是否有其他开源应用程序沿着这条路线进行比较数据库设计(特别是使用 php/MySQL)?我还有其他人追求这种真正安全但确实不方便的功能集吗?是否有另一种我错过的更流行和现代的数据库安全模型?数据库半透明是一种时尚还是一种我应该接受的合法数据库设计方法?虽然我总是很欣赏讨论,但我更喜欢可以在设计中利用的客观答案。
所以,我最近一直在研究类似的东西,并遇到了同样的问题。我正在考虑实施的解决方案如下:
- 注册后,为用户创建一个唯一的、安全的(长)密钥,并使用它来加密他们的数据。
- 使用例如用户的密码加密此密钥AES 并将其存储在数据库中。
此时,您仍然处于这样的情况:如果用户忘记了密码,他们已经拥有了密码。
- 创建代表您的组织的公钥/私钥对,并将公钥存储在服务器上。
- 将密钥的私有部分分成几个部分,并将每个部分交给对公司的持续成功拥有重大利益(最好是财务利益)的人(例如公司的董事)。这样做使得任何两个或任何三个人都可以在需要时聚在一起并恢复完整的私钥。使用每个人自己的密码加密他们的密钥。
- 当用户注册时,以及使用密码加密其密钥时,使用组织公钥对其进行加密并将其存储在某处。
- 创建一个密码重置表单,记录重置用户密码的请求,以及用户身份的一些证明(例如质询/响应)。
- 在数据库中记录这些重置请求(可以选择再次使用公钥加密)。
- 每小时/每天/每周/每月一次,将必要的密钥持有者聚集在一起,并使用他们的组合密钥来处理累积的重置请求,解密成功证明自己身份的用户的密钥。
这其中有很多挑战和考虑。我对其中大多数有一些想法,但也对其他人的意见感兴趣:
- 如何在多人之间安全地分割密钥,以便没有人可以解密存储的密钥。
- 如果“万能钥匙”真的落入坏人之手,如何最大限度地减少暴露的钥匙数量。
- 如何确保(但愿不会)您的密钥持有者丢失了密钥,那么(a)不存在数据暴露的风险,并且(b)不存在突然永远失去重置密码的能力的风险。
- 如何成功验证某人是否确实是他们所说的人,而不会使这成为整个安全方法中的明显漏洞。
毫无疑问,您在该领域实现的任何操作都会降低半透明数据库方法的安全性,但这可能是值得的妥协,具体取决于数据的性质。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)