半透明数据库

时间:2010-01-21 13:22:53

标签: database security translucency

我正在构建一个包含健康信息的应用程序。这个应用程序将面向消费者,对我来说是新的。我想要一种让隐私问题完全放心的方法。当我查看在公共可访问数据库中保护敏感数据的方法时,我经常遇到数据库半透明的概念。该主题有the original bookexcellent tutorial on the subject from Oriellynet

我担心的是,我所看到的非常现代的编程网站(就像这个网站)上看到的关于这个想法的信息很少。在维基百科上似乎没有关于这个想法的文章。这里没有关于这个主题的问题,也没有关于这个主题的最新教程或文章。简而言之,这个想法是某些数据对于系统的某些用户是清楚的,而其他用户在加密时无法访问该数据,即使他们具有管理员访问权限。

我在提供半透明数据访问的原型数据库上做了大量工作。我遇到了一个相当大的问题:要真正半透明,就没有密码恢复机制。如果管理员可以重置用户密码,则他们可以短暂地访问用户数据。要真正半透明,用户绝不能丢失密码。

在使用这些强大的加密系统时,我们这些使用强加密来保护日常生活中的私人数据(技术人员确定)的人会习惯这个问题。如果“河豚”这个词是你日常词汇的一部分,那是一回事,而是一个以消费者为中心的网站?我担心用户不会愿意围绕真正的数据库半透明隐含的“真正为你加密”概念。我害怕以“我丢失了密码”开头的支持电话,最后跟我说“没有什么可以为你做的”。

我的问题:我应该在我的应用程序中实现此方法吗?是否有其他开源应用程序沿着这条路走下去,我可以比较数据库设计(特别是使用php / MySQL)?我还有其他人在追求这些真正安全但非常不方便的功能集吗?是否有其他数据库安全模型更流行和现代,我错过了?数据库半透明是我应该拥抱的时尚还是合法的数据库设计方法?虽然我总是喜欢讨论,但我更喜欢在设计中可以利用的客观答案。

4 个答案:

答案 0 :(得分:7)

所以,我最近一直在寻找与此类似的东西,并遇到了同样的问题。我正在考虑实施的解决方案如下:

  • 注册后,为用户创建一个唯一的,安全的(长)密钥,并使用它来加密他们的数据。
  • 使用例如用户的密码加密此密钥。 AES并将其存储在数据库中。

此时,您仍处于如果用户忘记密码的情况下,他们已经拥有了密码。

  • 创建代表您的组织的公钥/私钥对,并将公钥存储在服务器上。
  • 将密钥的私密部分拆分为多个组件,并将每个组件分配给贵公司持续成功的人(例如贵公司的董事),他们拥有大量股份(最好是财务)。这样做可以使任何两个人或任何三个人聚在一起并在需要时恢复完整的私钥。使用自己的密码加密每个人的密钥。
  • 当用户注册并使用密码加密密钥时,请使用组织公钥对其进行加密并将其存储在某处。
  • 创建一个密码重置表单,记录重置用户密码的请求,以及一些用户是他们所说的人的证据(例如质询/回复)。
  • 在数据库中记录这些重置请求(可选择使用公钥再次加密)。
  • 每小时/每天/每周/每月一次,将必要的密钥持有者聚集在一起,并使用他们的组合密钥处理累积的重置请求,解密成功证明他们是他们所声称的用户的密钥。< / LI>

这有很多挑战和考虑因素。我对其中的大多数都有一些想法,但也会对其他人的意见感兴趣:

  • 如何在多人之间安全地拆分密钥,以便没有人可以解密存储的密钥。
  • 如果'主密钥'真正落入坏人之手,如何最大限度地减少暴露的密钥数量。
  • 如何确保如果(天堂禁止)你的钥匙持有人丢失钥匙,那么(a)没有暴露数据的风险,以及(b)没有突然重置密码的能力丢失的风险永远。
  • 如何成功验证某人确实是他们所说的人,而不会在整个安全方法中成为一个明显的漏洞。

您在此领域实施的任何内容都会降低半透明数据库方法的安全性,毫无疑问,但根据数据的性质,这可能是一个值得妥协的方法。

答案 1 :(得分:2)

我应该在我的应用程序中实现此方法吗? 就像生活中的其他事情一样,有一个折衷:)它可能更安全但更难建造。

是否还有其他开源应用程序沿着这条路线走下去,我可以将数据库设计与(使用php / MySQL)进行比较?

不知道,我想这些工具可以自己做:)

还有其他人在追求这些真正安全但非常不方便的功能集吗?

是的,但似乎它仍处于不成熟状态,就像您描述的有关丢失密码的问题一样。

是否有其他数据库安全模型更受欢迎和现代化,我错过了?

基本上有两种数据库连接。一个选项为用户提供真实的数据库帐户,另一个选项是对数据库使用单点登录。在网络出现之前,在客户端/服务器领域都支持这两种模型,但在Web开发人员中,单点登录方法正处于领先地位。

数据库半透明是我应该拥抱的时尚还是合法的数据库设计方法?

不要这么认为,例如,UNIX密码数据库是基本半透明数据库的一个很好的例子;)

这里有一些内容可以阅读link text

答案 2 :(得分:1)

Re:半透明数据库。我想,你可以使用指纹。烧伤的受害者,或最终失去指纹的人呢?哎呀。是否值得这么小的用户?

熟悉HIPAA,特别是在技术方面。 请记住,除了天网*之外,没有任何系统是真正安全的,看看发生了什么!人类负责。当您在医疗公司工作时,您签署了一份NDA,表明您不会将您学到的任何信息作为职责的一部分发布,因为它是保密的。 将有人重置人们的密码。这就是它的方式,因为不是每个人都具备技术能力,这就是它现在的方式。 你只需要实现安全性,HIPAA说。

  • 实际上,还有另一个真正安全的系统:它从网络和电力中拔出,并且已经关闭。

答案 3 :(得分:0)

稍有不同的解决方案,您可能需要查看cryptdb:

http://css.csail.mit.edu/cryptdb/