计算机生成的密码是否安全?

记住,作为一台确定性的机器,今天的计算机不能产生随机序列,实际上所有计算机生成的“随机”序列都是伪随机的,不是计算机生成的随机密码不安全吗? 随机按键创build随机密码比使用数字生成algorithm更安全吗?

人类通常在产生随机性方面做得很差。 有可能得到真正的随机数字为计算机生成密码。 一种方法是将您的计算机设置为通过监测大气噪声从random.org生成数字。 大多数人喜欢做一个好的或者更好的工作,那么典型的人可能不太在意密码的随机性。

这些天密码真的没有那么有用。 如果你做search,你可能会罚几个安全专家,认为人们对密码的期望太过分了。 我想你会发现,通过networking钓鱼,键盘logging器和其他types的攻击获取密码变得越来越普遍,其中密码长度和随机性水平完全不相关。

任何devise良好的系统都可以防止入侵者通过使用locking和速率限制authentication尝试来远程运行任何types的字典式攻击。 这个秘密哈希值将被很好的保护,以防拦截。

当然,这与所有与安全有关的事情都取决于风险的大小。 对于具有合理安全防护的低价值系统,计算机生成的密码几乎肯定是好的。 如果你对核武器编码的安全负责,那么你可能会花费更多的精力来devise好的密码。

计算机生成的密码是否安全?

我很抱歉,但安全从来没有,也许永远不会是二元的。 没有什么会处于100%安全的状态。 在许多情况下,正确生成的密码将是更安全的select。

你的论点有两个前提:

鉴于:好的密码是完全随机的
鉴于:由确定性机器生成的密码不是随机的

如果确定性那么不是随机的
如果不是随机的话那就不好

因此:生成的密码不好。 QED。

好的密码是完全随机的前提是不正确的。 经验表明,好的密码有一些特点。 好的密码必须抵制某些types的攻击,其中只有一个是密码猜测。 50多年的密码使用经验表明,好的密码有一些特点:

  • 足够长的随机猜测时间太长。
  • 有足够的熵使每个字符显着不依赖于密码中的其他字符。
  • 能够被记住。

密码的8个字符限制(欢迎)的死亡打开了一个全新的密码良好的可能性。 它也划分了一个很好的密码。

在Solaris上一个好的密码:1ŤŁb$ R =
Windows上一个不错的密码:0123456789abcefBubba2pAantz

第一个有很高的熵八个字符。 第二个可笑的熵达到16个字符,但是之后可以通过熵。 第二个是Solaris的一个疯狂的密码,因为它会在第八个字符之后被截断,如果这个密码散列被发现的话,那么第一个将会在Windows上哀叹(在networking控制器中嗅探到这个密码) )感谢彩虹表。 (我曾经有一篇关于这个问题的博客文章,在跨平台密码策略的背景下详细讨论了这个问题。

所以一个好的密码具有很高的熵和长度。 当你不能使用长度(再次8个字符限制),你被困在高熵。 当你有非常大的长度(512个字符!)密码可以包括相同的攻击阻力显着更less的熵。

对于白人来说,好的密码可以是完全随机的。 不一定

至于你的第二点,关于确定性机器无法产生随机输出。 使用随机input的确定性机器可以产生包含作为input而获得的熵的零的输出,但不引入任何新的熵。 通过这种方式,从/ dev / random(而不是/ dev / urandom)中使用2个字节的熵的密码生成器可以产生40个字符的高表观随机性密码。 当然,如果攻击者知道这两个字节和用于生成密码的algorithm,则可以导出实际的密码。

该algorithm比用于种子algorithm的实际随机字节更容易find。 他们出版得很好,因为高质量的伪随机对每个人都是有价值的。 这意味着攻击者必须在每个允许的长度上尝试(在这种情况下)每个可能的2字节组合。 (另见: 彩虹表 )

对于惠特来说,由确定性机器生成的密码可能具有高度的随机性。

最后,机器生成的密码不好的原因在于它们能够事后推导出来,而是关于什么使得一个好的密码的第三个要点:能够被记住。 机器生成的密码,特别是长的密码,很难记住,这又会导致它们被写在某个不安全的地方。 或者迅速改变成长度/熵强度较小的东西。

随机按键创build随机密码比使用数字生成algorithm更安全吗?

没有。

对于给定长度的密码,从完全可能的符号集中随机生成的密码将比随机按下密钥更安全。

随机按键创build随机密码比使用数字生成algorithm更安全吗?

在实践中,可能是,虽然随机按下按键,但您持有移位的机会是不太可能的:)

对于伪随机密码,这一切都取决于你如何生成它们。 有许多来源可以用作algorithm的input,还有许多algorithm可供使用。 这将导致一个长期的,随机生成的密码较弱的事情披露:

  • 数据用作algorithm的种子
  • algorithm本身

基本上这是一个两件式的谜题,只需要一段时间才能完成。 如果他们有详细的信息,这只是一个时间问题才能被破解。 说到时间,这是伪随机生成中最常用的种子之一。

如果有一个提示,我可以给你一个安全的密码,计算机生成或没有,这将是一个非常长的密码,这将需要很长的时间来破解。 另外,不要使用任何在线工具来生成密码。 在一行简单的代码中,托pipe生成器的人可以将生成的密码插入到数据库中。

你说过,这取决于密码是如何“随机”的。

计算机生成的密码程序如下所示:

string generatePassword(){ return "asdf"; } 

不会很好。

“随机压制”的缺点是你的“特殊”字符(!@#$%^ <>等)的比例会很低,因为你不可能在你同时按下shift键`-0或任何其他非alpha键。

我将支付你200美元的破解我的25个符号密码 22至25个符号密码(长度也是随机的)我在ServerFault上使用。

现在,严重的是,一个黑客可能会发现一个随机生成的密码,如果:

  • 她对计算机安全和用于产生随机数的algorithm有着丰富的知识,
  • 她确切知道应用程序使用目标来随机生成密码,
  • 她可以find密码生成的时间(最高可达μs)
  • 她很幸运。

所以我有一些怀疑,每个黑客都可以做到这一点。

现在,用来破解密码的最明显的方式就是powershell。

如果一个目标在他的键盘上“随机”input密码,那么密码很有可能匹配一个模式:例如,如果input的人的第一个字母在键盘的左侧,第二个字母可能会在右边或是数字或符号。

testing它让人们用四位数字键入一个“随机”的东西是很有意思的。 我的期望是,首先,键入的数字不会是随机的,有些会比其他的更频繁(例如,如果我们被要求input“随机”的东西,我们绝不会input“1234”或“7458”或“3197”或“5555”)。

由于机器生成的密码和人类密码泄露了一些随机性,恕我直言,最好的办法就是将两者结合起来。 例如,密码将从用户input生成,或与之结合使用。 顺便说一下,某种这样的实现是盐(例如,在计算和存储哈希之前,将在网站上提交的用户的密码合并到随机生成的一组符号中:在这种情况下,如果两个用户具有相同的密码,哈希将仍然不同)。