这种方法有什么缺点?
首先,这是一个额外的步骤,其他身份验证方法已大大减少。这对您的用户来说是额外的努力。密码……很容易忘记,这可能会成为一个违背密码目的的问题。最重要的是,与现实脱节的强密码规则是不安全的。
你可以通过那些在某个论坛上尝试最常用密码的人观察到这一点,结果发现他们因为忘记了一些晦涩、异常的规则而弄错了,所以他们继续鹦鹉学舌般的用户名和密码组合他们曾经使用过登录字段。如果您只是要与这样的随机陌生人共享密码,那么密码的意义何在?
每当我注意到这样做的网站时,我怀疑他们可能会巧妙地尝试通过网络钓鱼来获取其他网站的密码。就我而言,除非您现在是银行机构,否则如果您想被视为合法,您可能应该避免存储密码。有更好的方法,更可靠,更安全。
详细说明:除非您的用户有需要保护的东西,否则让他们使用任何他们想要的密码作为密码。也就是说,如果您决定使用密码,即使是空白密码也是可以接受的。
所有网站都不使用这种方法有充分的理由吗?
我运行某些人通常认为的“站点”,有时我允许其他人访问这些“站点”,而且我根本不存储密码或强制执行密码要求;我使用证书进行身份验证(就像任何现代技术都应该使用的那样),人们可以(如果他们选择)用密码来保护这些证书。
我的网站是服务器,我不想存储其他人的密码是有充分理由的。如果我的一位用户设法获得对我的服务器的管理访问权限,他们可能会获得其他密码哈希。
同样,您可以看到这个站点,您可能不需要输入密码,因为您已经登录到 StackExchange 网络...... StackExchange 网络允许您使用 Facebook 或 Google 登录,所以也有.
证书认证并不是什么新鲜事;它已经在 PAM 中使用多年了,不需要密码验证,而且对于银行机构来说,使用起来肯定比密码更强大。
生成一个长(32+ 字符)、随机(具有良好随机性)密码
您可以这样做,但是当您忘记或错误组织密码时,您最终会将某些服务的密码提供给其他服务。如果你对此感到满意,那就这样吧。如果您的银行账户被破解,世界不会停止旋转。
抱歉,您不会找到任何人争辩说生成一个长的、随机的密码比生成一个用于签署一些随机数盐并且从不直接存储在服务器端的长的、随机的私有证书更安全。
向用户展示一次
您不应该向用户显示(除非密码是不重要的,例如您的互联网论坛),而是您的 SSH 密钥生成器应该在生成密钥时要求用户重复他们的密码。这与视觉验证具有相同的效果(可能甚至更强大),除了您没有以纯文本形式显示您的“密码”以供任何在您肩上观看的人看到......
用 SHA256 散列它
人们甚至可能会建议使用盐。问题是,您仍在存储摘要,并且您的用户可能仍会为您提供其他服务的密码。“忘记密码”问题的解决方案不是尝试使用您曾经使用过的每个密码,从而大大削弱您的安全性,而是消除密码(从您的服务器)。
重置密码会生成另一个长的随机密码
由于某些其他技术,例如电子邮件或手机,即使是最强大的基于密码的身份验证方案也存在长期缺陷;当其中任何一个成为最薄弱的环节时,您会发现密码选项完全崩溃。
隐私和安全方面的前进方向是使用加密密钥进行身份验证,而不是使用电子邮件、电话号码、密码和 PIN 码。
事实上,如果站点不向用户显示密码,而是简单地显示一个填写密码字段的表单,以便浏览器和/或密码管理员可以记住它,那么这种方法甚至可能会得到增强。用户只需提交表单,就不必看到它。
解决方案是将密码存储在内存中的某个位置,这样人们只需访问该内存位置即可找到它?这对我来说似乎不是一个解决方案。使用物理的东西,例如 USB 笔式驱动器上受密码保护的 GPG 密钥。