密码最大长度与bcrypt,河豚

dav*_*dav 6 encryption passwords password-policy password-storage password-encryption

我的问题来自于 如何使用河豚散列长密码(> 72个字符)

我使用bcrypt(河豚)来哈希密码.所以,正如我从这个问题中发现的那样 https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length

它的字符数限制为72.

所以,我开始考虑限制密码的最大长度,但是在这些问题及其答案之后

https://security.stackexchange.com/questions/33470/what-technical-reasons-are-there-to-have-low-maximum-password-lengths

为什么要限制密码的长度?

我应该在密码上加上最大长度吗?

所有人都说是反对的.提到的东西,比如

  • 节省存储空间
  • 旧的Unix系统经验
  • 与不支持长密码的旧系统交互
  • 公约(即"我们总是这样做")
  • 简单的天真或无知.
  • 以明文存储
  • 此外,a maximum length specified on a password field should be read as a SECURITY WARNING通过这个答案 - /sf/answers/6980711/
  • 等等

所以,我认为我不符合其中一个案例.当然,我同意愚蠢的限制,例如最大长度10,甚至更糟,8或6,但不是30,40或更长的密码(盐渍)被认为是安全的?从这篇文章(虽然有点旧),但它说

it can make only 71,000 guesses against Bcrypt per second
Run Code Online (Sandbox Code Playgroud)

http://arstechnica.com/security/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/

这适用于8个字符的密码.因此,我想象自定义彩虹表会蛮力一个30个或更多字符密码(考虑到每个密码都有自己的盐),因为彩虹表大小呈指数增长

引用同一篇文章的评论

每次在密码中添加一个字符时,都会以指数方式增加通过暴力破解所需的难度.例如,8-char密码的密钥空间为95 ^ 8组合,而20-char密码的密钥空间为95 ^ 20组合.

因此,对于一个20长度密码与bcrypt根据那将是必要95 ^ 20 /(71 000*3600*24*365)~10年28度(如果我做对了)

qsn1:现在,在这种情况下,使用blowfish有一个意思是不要将密码最大长度限制为72,因为在任何情况下都会被截断,因此这里没有额外的安全性增益.

qsn2:即使存在salt(每个用户都是唯一的并保存在db中),毕竟我想在密码中添加pepper(在应用程序中硬编码而不是保存在db中).我知道是否会增加一些额外的安全性,但我认为以防万一db(或db backup)只是泄露,胡椒将是有用的. https://security.stackexchange.com/a/3289/38200 所以,为了能够添加20个字符胡椒,我需要将密码最大长度设置为50左右.我想这样:让我们说用户是使用70个字符,在大多数情况下(如果不是全部),它将是一些短语或类似的,而不是生成强大的字符,因此将用户限制为50最大长度并添加另一个20-22更安全字符胡椒肯定更安全/随机.另外,让我们说黑客正在使用"常用短语"的彩虹表,我认为有更高的机会,这72 character common phrase将被黑客攻击,而不是50 character common phrase + 22 character random string.那么,这种方法是胡椒和50最大长度更好,或者我做错了,最好留72最大限制(如果qsn1没问题)?

谢谢

BTW:

根据Owasp,密码的合理最大长度是160 https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Do_not_limit_the_character_set_and_set_long_max_lengths_for_credentials

谷歌的密码最大长度为100

在此输入图像描述

Wordpress的最大限制为50

https://signup.wordpress.com/signup/

mar*_*kli 6

问题1:完全没有理由限制密码长度,尽管仅使用72个字符,但BCrypt可以使用更长的密码。您根本没有优势,但是从理论上讲,您将阻碍使用更长密码的密码管理器人员。如果将来改用其他算法,则限制可能会有所不同,因此没有理由限制为72个字符。

问题2:最好不要使用其他方法:用服务器端密钥对密码哈希进行加密。添加胡椒的原因是,攻击者必须在服务器上获得特权,因为没有密钥,攻击者将无法开始对哈希进行暴力破解(SQL注入或丢弃数据库的备份不会这样做)。与加密(双向)哈希相同的优势。

  1. 这样,您无需为Pepper保留字符,可以使用密码中的所有72个字符。
  2. 与Pepper相比,只要有必要,就可以交换服务器端密钥。Pepper实际上成为密码的一部分,并且只有在下次登录时才能更改。
  3. 另一个讨论的观点是,辣椒理论上可能会干扰哈希算法。