我需要在我的数据库中存储一些数据,这些数据只能由所有者(特定用户)或我的应用程序(某些后台批处理)读取。 但是,这些数据非常敏感,而我,开发人员,甚至不希望能够检索它。 所以:
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
如果您想让用户加密某事,只有他能解密,那么您需要一个密钥来执行此操作。
您可以使用用户密码执行此操作,也可以使用其他内容(单独的加密密钥)。
现在关于密码,你无论如何都不应该访问它;如果您需要应用程序才能访问,那么您应该为其提供某种访问令牌,这样可以让用户获得所需的访问权限,而无需以明文形式保存密码。只有在令牌不再有效时才会输入密码(由于超时,手动取消/注销,或由于某些不规则事件可能因安全原因而触发取消)。
在这样的制度下,如果您不需要密码,则不使用密码作为加密密钥的原因就会消失。
请注意,无论您在此处使用什么密钥,只要您在服务器端进行加密,就会始终存在信任问题;如果你需要你的用户提供一个密钥来加密/解密你的服务器,那么他们有什么保证你不会简单地窃取那个密钥并读取他们的数据 - 或者更容易,根本就不真正加密它?
我意识到与使用单个服务器端密钥相比,此解决方案是的改进,因为您现在将为每个用户分配单独的密钥,以及未存储在服务器上的密钥(万一有人能够未经授权访问您的数据库),但如果可能的话,更好的解决方案就是让您的用户在客户端加密数据。这样,您的服务器端逻辑将只能看到加密数据,甚至不必处理加密逻辑或密钥或其中任何一个。