当前位置: 首页 > 知识库问答 >
问题:

用密码衍生的密钥加密文件…如果用户忘记密码怎么办

祁博涛
2023-03-14

在我的服务器上,我有可以存储和加密文件的用户。

用户的密码是SHA512散列的,所以我不能反向/解密它们。用户的文件是用一个随机的file_key加密的,它是在我的数据库中加密的,要知道文件的file_key的唯一方法是使用用户的密码来解密file_key。之所以这样做,是因为我不想每次用户更改密码时都必须重新加密所有文件,而是使用用户的新密码重新加密file_key,并将其重新存储数据库中。

生成加密用户数据的秘密密钥;将其称为“内容加密密钥”。从用户的密码导出密钥;称之为“密钥加密密钥”。使用“密钥加密密钥”加密“内容加密密钥”。存储加密的密钥以及用于密钥派生的salt和迭代次数。

如果他们更改了密码,则使用旧密码解密内容加密密钥,并使用从新密码派生的密钥重新加密。您应该为新密码选择一个新的salt,并确保您将它与新的加密密钥一起存储。

我想到了一个小(大?)问题,事实上,如果用户忘记了他的密码并要求重新设置密码,我将丢失所有加密文件,因为我不可能访问没有原始密码的加密文件…

共有1个答案

寇景明
2023-03-14

很明显,密钥是从密码派生出来的,整个宇宙中关于密码的所有知识都消失了,密钥以及任何数据都是不可恢复的。

因此,如果您想要一个“忘记密码”类型的函数,您需要保留一些用户密码的知识。显然,这样做会降低用户数据的安全性。首先,如果您(作为运行此类服务的个人)维护用户密码的知识,那么您就维护了对其所有私人数据的访问。其次,您必须将这些密码保存在某个地方,这意味着它们可能会被泄露。

如果经过仔细的分析,您愿意降低安全性,以方便,您将希望谨慎地这样做。

我想如果你有这样的设置,你就可以不需要人类来解密了。这将进一步降低安全性,可能是可接受的,也可能是不可接受的。在这种情况下,您将在加固的服务器上保留私钥,并使用一些代码来解密“丢失”的密码,并在web框上更改密码。当然,这显然不如将私钥完全密封在闪存驱动器上,放在保险箱里或其他什么地方安全

 类似资料:
  • 本文向大家介绍mysql密码忘记怎么办,包括了mysql密码忘记怎么办的使用技巧和注意事项,需要的朋友参考一下 遇到两次mysql密码忘记了?最开始干了最傻的事,卸载了重装。 现在有一个不用卸载也能把密码设置回来的办法。知识来源于网络,我这里稍加整理,遇到同样的朋友,可以试试。 以一下实现都是windows系统上完成。 第一步 在任务管理器中找到mysqld.exe,结束掉该进程。 第二步 找到m

  • 本文向大家介绍MySql5.5忘记root密码怎么办,包括了MySql5.5忘记root密码怎么办的使用技巧和注意事项,需要的朋友参考一下 使用mysql5.5,突然root密码忘记,怎么也登录不了,很急人,该怎么解决呢?下面通过本文给大家介绍mysql5.5忘记root密码的解决办法,需要的朋友参考下吧 方法一: 操作系统:windows操作系统,xp或win7. C:\Users\Admini

  • 本文向大家介绍Mysql忘记root密码怎么办,包括了Mysql忘记root密码怎么办的使用技巧和注意事项,需要的朋友参考一下 MySQL有时候忘记了root密码是一件伤感的事,这种情况下,如何重置root的密码呢? 找到并编辑mysql的my.ini配置文件,在mysqld节点中添加上skip-grant-table. 如下: 保存好修改,重启mysql服务。 现在就能不需要root密码的情况下

  • 问题内容: 我正在使用JConsole访问我的应用程序MBean,并且使用了password.properties文件。但是根据Sun的规范,此文件仅包含明文格式的密码。 现在,我想对密码进行加密并将其用于JConsole的JMX用户身份验证(“远程”部分中的“用户名”和“密码”字段)。我可以使用任何预定义的加密逻辑或自己的加密算法。 是否有人知道将这种纯文本密码更改为加密密码,这样JMX Fra

  • 我正在尝试整合谷歌加登录在我的应用程序,所以我需要SHA1。 所以我试图通过命令行生成

  • 忘记密码时 若要使用此机能,可能需先更新系统软件。 忘记密码时,请遵循以下方法重新设定密码。 1. 进入主选单的(PlayStation®Netrowk)后,选择(账户管理)或(PlayStation®Store)。 2. 显示需输入登入ID(电子邮件地址)与密码的画面时,选择[忘记密码时]。 3. 输入登入ID(电子邮件地址)及出生日期。 4. 选择变更密码的方法。 回答[密码提示问题]来变更密