作为在处理加密的用户数据时处理密码重置功能的问题的一种后续,是否有任何好的方法可以在不使用安全问题的情况下在加密的 Web 应用程序中重置用户密码?
从安全的角度来看,问题归结为需要第二个密钥来解锁数据,以防第一个(密码)丢失,留下:
安全问题
出于安全和用户体验方面的考虑,我宁愿不实施这些(根据我的经验,要么问题太模糊以至于用户可能不记得它们,要么答案将是公开可用的信息,从而打败了整个目的)
这当然是大多数用户都熟悉的方法,如果我找不到任何其他好的解决方案,我也会采用这种方法
备用密钥
一个示例是 Apple 的“恢复密钥”,当您为 Apple ID 启用双因素身份验证时,您应该打印出来
这是一个额外的步骤,用户要么不会采取,要么会采取并随后丢失他们的恢复密钥,从而导致混乱和糟糕的用户体验
其他可能性包括用户移动设备上的一个应用程序,该应用程序在需要时存储第二个密钥,但这对我来说似乎有点矫枉过正,并且可能是用户会忘记的一个步骤,导致当他们获得一个应用程序时不会重新安装例如新手机
某种形式的密钥托管
- 我在这里的第一个想法是允许用户将外部帐户与 OpenID Connect 连接,但没有一个常见的提供程序(例如 Google 或 Facebook)返回任何类型的唯一、稳定和秘密值,这些值可用作第二个密钥进入帐户(与 Google 最接近的是唯一的帐户标识符,每个请求访问其 Google 帐户的站点都会收到该标识符)
有没有我在这里忽略的选项,或者任何人能想到的不涉及安全问题的聪明解决方案?
编辑:为了澄清,对于这个特定的应用程序,要求我(或系统的任何其他开发人员或管理员)在任何时间点都不能访问任何未加密的数据。这意味着诸如发送一次性代码之类的方法是不够的,因为它要求在某些时候我可以访问密钥来解密数据。(此限制不包括当用户提交密钥以解密其数据时密钥在内存中的短暂时间。我更关心数据转储的脱机解密,而不是应用程序本身被泄露/存储键)