密码真的应该是随机的吗?

信息安全 密码 随机的
2021-08-31 07:30:32

生成密码时,它应该是“真正随机的”还是我应该通过执行一些规则使其不那么随机?

如果密码是随机生成的,它可能是全小写字母(“密码”),或者仅包含几个重复的字符(“abababab”)。我认为这可能是一个问题,因为暴力破解会更容易。

那么,如何确保密码至少包含多个“类”中的一个字符,例如小写、大写数字?或者确保所有角色都是独一无二的?

4个回答

随机性的目的是收集熵。

举个例子:我从网站的前4位加上字符中选择我的密码!和一个由第一个字母的 ASCII 数字组成的数字。

示例:贝宝 -> payp!70 ;亚马逊 -> 亚马逊!65

这个密码的熵是0。因为方法总是应该是已知的,在这个方案中没有什么是随机的。

如果您交替使用两个密码,则熵为 1 位。(可以选择2个)

相反,如果我使用随机选择的 7 个生成的字母密码,熵会增加到 log 2 (26 7 ) ≃ 32.9

(每个位置可能有 26 个字符,然后以位为单位报告)

添加的可能字符(随机)越多,熵增加的越多。每个“规则驱动”的字母选择不会增加熵(因此对于相同长度的密码,熵较低)。

因此,理论上,第二个密码比使用非字母数字字符的前一个密码强度更大。密码的问题总是一样的:记住密码。这意味着您需要为自己降低熵。上述第一种算法使您能够记住复杂的密码。这种方法给出的“安全性”是对该算法知识的赌注(也称为“默默无闻的安全性”)。这被认为是一种糟糕的安全做法:对您自己的有针对性的攻击(在了解您的方案的情况下)将会成功。但通常这是您为实际使用而做出的让步。

确保密码使用字母数字字符 + 大小写更改 + 非字母数字字符 + ... 是一种实践,其目标是为蛮力攻击(即在密码生成中不考虑特定方案的攻击)制作具有高熵的密码。但是对于每种类型的攻击,您的密码都会有不同的熵,可能是 0。

总而言之,熵仍然是密码强度的理论度量,在现实生活中,破解者将使用基于假设的给定方法。因此,即使一个真正随机的 6 个字符的密码如果只包含小写字母或两者都被认为同样安全,实际上破解者可能会选择一种降低密码的方法。

密码应该有足够的熵。真正随机的密码的任何方面都有助于熵,而没有的方面在熵方面相对没有价值(尽管它们可能有助于记住密码)。

例如,如果您有一个已知来自 1024 个现有单词的字典的密码,那么即使密码本身包含更多位,您也有 10 位熵 (2 ^ 10 = 1024)。OTOH,如果您的密码由一组 64 个字符中的 8 个随机字符组成,那么这就是 48 位熵(6 位 * 8 个字符)。

另请注意,为了保留完整的熵,您需要使用加密强 RNG(大多数通用 RNG 是部分可预测的,这足以严重降低生成密码的强度),并且您必须接受第一个它产生的密码——如果你一直生成密码直到你得到你喜欢的密码,你又在减少熵。

并且一定要阅读 Rory Alsop 链接到的讨论——它非常详细地解释了密码强度和熵。

如前所述,“随机性”的意义在于增加熵。数学支持它,但我们不需要深入研究。我将简单地讨论这个话题。

随着互联网的使用急剧增加,人们开始说“制作一个随机密码”,人们开始使用他们的生日,password1以及其他常见的、易于猜测的单词和短语。

从这个意义上说,随机是指通过对您(或您桌子上的东西)的简单研究不容易推断出的单词和字符,例如现在非常流行的XKCD 漫画correct horse battery staple(字面意思没有任何意义,因此出于密码原因,它是“随机的”)。

直接回答:可能不会。如果您正在考虑“按顺序生成随机字符”,那很好,但您将很难记住它,并且可能不得不做一些不完全安全的事情(比如把它写下来)。重要的是要记住,您不会,而且大多数人可能不应该,生成随机字符并将它们放在一起,而是创建一个主题无法猜测(“随机”)并遵循一些规则(例如长度和不同类型)的密码字符数)

如果您查看密码标签,您会发现很多关于如何制作密码的提示。

大多数人为生成的密码都比平均水平更可预测,其中一些字符和序列更频繁或更可预测的序列,例如字典单词。正因为如此,黑客开发了优化序列的算法来测试暴力攻击中的密码。换句话说,他们首先尝试最常用的密码,然后测试字典单词,然后在末尾附加数字等。

所以最好的密码是伪随机密码。这意味着它是从随机数生成器生成的,然后经过反算法算法,例如。以防 123456 纯属偶然弹出,并确保典型的已知黑客策略无效。

大多数人认为密码越复杂,就越难记住。但在这里我不同意,我邀请您在我的网站上亲自查看。www.passwordgear.com