我正在制作一个社交媒体类型的网站,我存储用户的详细信息,如电子邮件,姓名和其他个人详细信息。
我将使用加密的MAC概念加密个人细节。当用户注册时,将生成一个加密安全字符串作为私有加密密钥。当用户选择密码时,加密密钥将使用该密码进行加密。
密码不会存储在数据库中,而是用来解密用于加密个人详细信息的加密密钥的私钥。唯一知道密码的人是用户。我的问题是:一旦解密,我如何存储加密密钥?
我曾想过有一个表,其中一个列用于IP,另一个列用于加密密钥,但有些人关闭浏览器窗口而不注销,因此,在他们完成网站上的会话后,不可能从数据库中删除条目。
另一种方法是将其存储在cookie中,但在发送回服务器时可以截获。我想知道是否有一种安全的、几乎万无一失的方法来存储加密密钥、客户端或服务器端。
提前谢谢。
编辑:
作为对TheGreatContini的回答的回应--“零知识web应用程序”(在您的博客中)是一个很好的想法,然而,对于零知识,即使是密钥也不能存储在数据库中,这会使事情变得有点复杂,因为这样您就必须使用用户的密码作为密钥。使用密码并不安全,因为验证密码以防止“用错误的密钥被欺骗”的数据传递起来要困难一些。有加密-然后-MAC的概念,但这只是验证数据是否合法,并将假设黑客已经处理了一些数据和数据不能信任,然而,因为你不能实际验证密码(哈希不会存储,因为它是“零知识”),所以密码可能就是错误的。
发布于 2017-09-03 23:10:30
我不确定我是否有答案,但有几个注意事项:
(1)会议需要超时。也许您可以通过定期运行批处理作业来实现这一点,这些作业扫描数据库,寻找缺少活动的会话。这需要将用户最后一次操作的日期存储在db中。
(2)一般来说,键的值高于它们所保护的内容的值,因为密钥的生存期比所保护的单个数据元素的生存期长(因为数据可能会改变,或者可以添加额外的数据)。您可以将解密后的内容存储在数据库中,而不是将密钥存储在db中,而是存储会话的长度。当然,前提是你做到了(1)。
也许除了您已经知道的之外,我并没有添加更多的内容,但是可能值得考虑使用我写的一个关于这个话题的博客。低层次的细节从“所有敏感数据的第二条防线”一节开始。在此之前,它主要激发了这一概念。很高兴看到有人真的这么做。
https://stackoverflow.com/questions/46012756
复制相似问题