我担心的是,我已经看到关于这个想法的信息很少,我会认为非常现代的编程网站(像这样).关于维基百科的想法似乎没有文章.没有关于这个问题的问题,没有关于这个问题的最近的教程或文章.为了简明扼要,这个想法是某些数据对于系统的一些用户是清楚的,而其他用户即使具有管理员访问也被密码地阻止访问该数据.
我在提供半透明数据访问的原型数据库上做了大量工作.我遇到了一个相当大的问题:为了真正的半透明,没有密码恢复的机制.如果管理员可以重置用户密码,那么他们可以简单地访问用户数据.为了真正的半透明,用户永远不会松开密码.
在使用这些强大的加密系统的时候,我们这些使用强力加密来保护我们日常生活中的私人数据(技术上是可以肯定的)的人们被用于这个问题.如果“河豚”这个词是你日常词汇的一部分,那是一个消费者关注的网站?我担心用户将不会愿意围绕着真正的数据库半透明隐含的“真正加密的”为您提供的概念.我害怕以“我失去了密码”开始的支持电话,结束于我说“我没有什么可以为你做的”.
我的问题:我应该在我的应用程序中实现这个方法吗?有没有其他开源应用程序已经下了这个路由,我可以比较数据库设计(使用PHP / MysqL)?我有其他任何人追求这些真正安全的功能,但真的不方便的功能集?还有另一个数据库安全模式比较流行和现代,我错过了吗?数据库半透明是我应该拥抱的时尚还是合法的数据库设计方法?虽然我一直很感激讨论,但我更喜欢客观的答案,我可以利用我的设计.
解决方法
>注册后,为用户创建一个唯一,安全(长)的密钥,并使用它来加密他们的数据.
>使用用户密码加密该密钥. AES并将其存储在数据库中.
在这一点上,您仍然处于这样的情况:如果用户忘记了密码,他们已经拥有了密码.
>创建一个表示您的组织的公钥/私钥对,并将公钥存储在服务器上.
将密钥的私有部分分成几个组成部分,并将每个人(例如贵公司的董事)分配给拥有公司持续成功的重要股份(最好是财务).这样做,使任何两个或任何三个人可以聚在一起,并在需要时恢复完整的私钥.用自己的密码加密每个人的密钥.
>当用户注册并使用密码加密密钥时,使用组织公钥对其进行加密并存储在某个地方.
>创建一个密码重置表单,其中记录了重置用户密码的请求,以及用户是他们所说的(例如,询问/响应)的一些证据.
>在数据库中记录这些重置请求(可选地使用公钥加密).
>每小时/日/周/月一次,将所需的密钥持有者合并在一起,并使用它们的组合密钥来处理累积的重置请求,解密成功证明他们是他们所在的用户的密钥.
在这方面有很多挑战和考虑.对于大多数这些问题,我有一些想法,但也会对其他意见感兴趣:
>如何在多个人之间安全地拆分密钥,以免任何人都能解密存储的密钥.
>如果“主键”真正落入错误的手中,如何最大程度地减少将被暴露的按键数量.
>如何确保(天堂禁止)您的钥匙持有人丢失钥匙,那么(a)没有暴露数据的风险,(b)突然重置密码的能力永远不会丢失的风险.
>如何成功验证某人是否真的是他们所说的,而不是使您在整个安全方法中成为一个明显的洞.