2

在创建“忘记密码”机制时,我们可能希望为使用 SHA1 存储的用户创建一个临时密码(请随意建议其他 C# Cryptography 机制)。

我们应该设置多长时间的临时密码?太短了,可能会被暴力破解。太长并且不必要的长度是多余的,因为字符串无论如何都是散列的?(因为 20 个字符和 50 个字符的字符串无论如何都会产生相同长度的哈希)

更新
对不起,如果这是误导。当然我们可以从空中选择一个数字,但我想知道是否有一个很好的数学理由选择 13 而不是 12。

4

7 回答 7

1

我一般用10个字符。没有特别的原因,只是我猜测用户选择的密码长度高于平均长度。

仅仅因为它是随机生成的,它可能比用户选择的任何东西更安全,更难暴力破解。人们选择愚蠢的密码,例如 myspace1、stackoverflow1、12341234 等。

于 2009-04-01T09:45:05.980 回答
1

我认为这是关于临时密码的好建议:

基于表单的网站身份验证权威指南

它谈到避免生成它们以支持用户想要的实际操作。

于 2009-04-01T09:57:03.690 回答
0

如果密码是字母数字字符,则每个字符只有大约 6 位可用数据,因此您错误地认为密码长度超过 20 个字符是没有意义的。

于 2009-04-01T09:45:41.563 回答
0

似乎您担心使临时密码比用户的密码更强大...而实际上,诸如 10 个字符的 base-64(或类似的标点符号等)之类的东西将很难破解并且要强大得多比用户生成的密码....

于 2009-04-01T09:46:54.103 回答
0

也将其设置为可变大小(例如 8-12 个字符),这将使暴力破解变得更加困难……如果攻击者知道您返回 X 字符密码,他们所要做的就是尝试所有带有 N 的密码……假设N 很大,这将是不切实际的,但改变 N 的大小至少会使他们更难。

于 2009-04-01T09:48:58.453 回答
0

Steve Gibson 创建了一个“超高安全性密码生成器”。
在该页面上,他在每个页面显示上生成 3 个不同的密码:

  • 64 个随机十六进制字符(0-9 和 AF)
  • 63 个随机可打印 ASCII 字符
  • 63 个随机字母数字字符(az、AZ、0-9)

他还解释了这背后的原因。这是一个很好的阅读。希望这可以帮助。

于 2009-04-01T09:49:58.417 回答
0

选择您的网站为用户推荐的任何长度。当生成一个随机的 base64 字符字符串时,我会在晚上使用 8 字符密码安全地入睡。但当然我会限制登录尝试每 X 秒一次,并在 Y 次尝试失败后暂时禁用帐户。

并且记住在散列之前添加每个用户唯一的,以阻止基于数据库的攻击。

于 2009-04-01T09:50:24.797 回答