我手头有一个有趣的加密问题.我不知道是否可以解决,但是这里:
数据库将包含敏感的用户信息.因此,用户信息必须被加密(双向加密).用户有一个登录/密码,这些可以用于双向加密.现在,加密的设计方式应使得即使是查看数据库表的管理员也不应该能够理解用户信息.
但是,设计必须照顾用户忘记密码的情况.如果密码用于加密,则忘记密码意味着信息丢失 – 不需要.如果用户密码本身使用脚本中硬编码的密钥使用双向算法(而不是单向散列)存储在数据库中,管理员可以通过查看脚本来发现硬编码的密钥(管理员当然有权限到脚本).
有人知道有什么办法吗?
PS:这是一个真正的问题.我的公司是绝对的安全狂热(ISO 27001和全部),我被委托设计一个具有上述功能的系统.顺便说一句,我正在使用PHP脚本和MysqL.
你想要的是恢复代理.加密所有数据两次:一次用用户密钥,一次用恢复代理(公共)键;至少后者需要是不对称的.使用正式的访问协议(例如四眼原则)将恢复代理密钥保存在pyhsical安全.通常,管理员无法访问加密数据,但是如果用户丢失密钥,并且恢复被授权,则获得恢复密钥.
还有一种方法来加密恢复代理的密钥,以便m-out-of n人必须同意使用它.
编辑:一个实现策略是加密一次两次.或者,对于需要独立恢复的每个数据集,创建一个新的对称密钥,并仅加密该密钥两次;原始数据仅使用会话密钥进行加密.这种方法可以扩展到多个独立的读者;它需要每个阅读器的非对称密钥(以便您可以使用所有读取器的公钥加密会话密钥 – 一个是恢复代理).
我复制了微软Encrypting File System的术语,该术语已经实施了.