1

我想为正在注册或更改密码的用户推荐自动生成的密码。如何解决这个问题?

首先,提供生成密码的原因是为了防止用户使用弱密码(例如monkey)。我可以(并且仍然会)对密码实施某些限制:它们必须同时包含小写和大写字母、数字和标点符号,并且必须足够长。强制执行这些类型的规则仍然会导致糟糕的模式,例如简单地将所需字符附加到原始弱密码(例如Monkey3!)。还存在其他常见模式(例如m0nk3y)。

完全随机的密码(例如I1ZkFdt5OOX35RpB13v}lo90m%~zrY)很难记住。它们通常最终写在一张纸上。如果可以选择,用户在遇到这样的怪物时会回到自己的弱密码。

但是,如果足够长(是的,相关的 xkcd),简单的密码可以很强大。我想生成这样的密码,以便它们在仍然强大的同时很容易记住:

MooseCoolSuggestionDude
RegisterAmericaFoolDinner

假设我有一个存储在某处的单词列表,那么该存储可能会受到损害。获得该列表的任何人都可以生成我提供给用户以用作密码的所有可能组合。所以这是一个潜在的安全风险。

我考虑了一些额外的随机化。如果我在生成的密码中添加随机数和标点符号,例如

Moose5CoolSuggestion-Dude
Register.America31FoolDinner

这可以作为一种安全的方式来提供令人难忘的自动生成密码吗?还有其他想法吗?

4

4 回答 4

3

在我看来,这是一条死胡同,除非您正在创建一个专门用于生成密码的网站。简而言之,这与其说是发展问题,不如说是个人问题。

从安全的角度来看,我不喜欢这样,因为你有我密码的明文版本。我不在乎你要散列它,我只知道如果我选择一个,你有一个明文版本,你可以选择不散列它。我知道这确实总是一个问题,但这会让我感到更加不安。我不知道你为我选择的这个密码有多“随机”。也许每个人都得到相同的清单?如果我被锁定在我的帐户之外,我唯一希望我用来生成密码的网站可能是临时密码。

此外,为了让您与我共享此密码,您必须在我的屏幕上显示文本,从用户体验的角度来看,这可能是一件好事,也可能不是一件好事。如果您决定这样做,请注意我可能不希望公开显示我的密码,并且一些用户可能会在不知不觉中将他们的密码暴露给旁观者。默认隐藏。

我会选择一个涉及其中一些事情的解决方案:

  • 不要给用户对密码的疯狂要求。它不会产生很好的密码,而且从用户的角度来看它令人沮丧。

  • 显示一些好的示例密码(只是不要让他们使用示例密码)

  • 设置多重身份验证

  • 以某种方式指示(请参阅下面的第一个 UX 链接)他们的密码有多强。

相关链接

于 2013-10-16T15:09:03.463 回答
1

为了增加@Gray 的优秀答案,我坚信网站密码应该很难记住:http ://www.troyhunt.com/2011/03/only-secure-password-is-one-you -cant.html

于 2013-10-18T15:59:23.800 回答
1

我是https://passwordcreator.org/的作者,它具有您正在寻找的功能。除了带有多个单词的 XKCD 样式密码外,该站点还生成“假单词”和传统的随机数字和字母字符串。

您可以在您的网站上嵌入一个iframe密码,以便在您的帐户创建页面上为您的用户提供密码建议。这是一个屏幕截图:

随机密码建议

这样做的代码是:

<h3>Suggested Passwords:</h3>
<iframe src="//passwordcreator.org/suggest.html#securitylevel=good"
style="width:355px;height:193px;"></iframe>

可以将iframe其调整为小至 100x100 像素。在较小的宽度下,它只会生成由随机数字和字母组成的较短密码。当它更高时,它会显示更多密码。提供五个密码强度级别:“差”、“低于标准”、“好”、“好”、“惊人”。

密码是由 JavaScript 使用现代浏览器的安全随机数生成器功能生成的。密码永远不会通过网络传播,也不会被生成密码的用户客户端计算机以外的任何计算机看到。该站点支持 HTTPS 以提高安全性。

于 2015-03-20T15:15:19.473 回答
-1

这只是一个想法,您可以在它之上构建(在 PHP 中):

<?php

function newRandPass() {
    $wordList = array('Moose','Cool','Suggestion',
                      'Dude','Register','America',
                      'Fool','Dinner','Hello');
    $passWords = array();
    for ($i = 0; $i < 3; $i++) {
        $passWords[] = $wordList[mt_rand(0, sizeof($wordList))];
    }
    return implode(mt_rand(1,999), $passWords);
}

echo newRandPass();

?>

输出:

Dinner455Hello455Moose
Suggestion495Register495Hello
Fool590Dude590Cool
Dude956Register956Hello
于 2013-10-16T14:22:45.690 回答