我的问题来自于如何用blowfish散列长密码(>72个字符)
我正在使用bcrypt(blowfish)对密码进行散列。因此,我从这个问题中发现https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximal-password-length
它的字符限制为72。
所以,我开始考虑限制密码的最大长度,但在这些问题和他们的答案之后
https://security.stackexchange.com/questions/33470/what-technical-reasons-are-there-to-have-low-maximal-password-lengths
为什么要限制密码的长度?
密码字段上指定的最大长度应被读取为安全警告
,此答案-https://stackoverflow.com/a/99724/932473所以,我不认为我符合其中一个案例。当然,我同意愚蠢的限制,比如最大长度为10,甚至更糟,8或6,但长度为30、40或更长的密码(加盐)不是被认为是安全的吗?从这篇文章(虽然有点旧),但它说
it can make only 71,000 guesses against Bcrypt per second
http://arstechnica.com/security/2012/12/25-GPU-cluster-cracks-every-standard-windows-password-in-6小时/
这是8个字符的密码。因此,我可以想象,当彩虹表的大小呈指数增长时,自定义彩虹表将会有多大,仅强制执行一个30个或更多字符的密码(考虑到每个密码都有自己的salt)
引用同一篇文章的评论
每次在密码中添加一个字符,就会成倍地增加通过强力破解的难度。例如,8字符密码的密钥空间为95^8个组合,而20字符密码的密钥空间为95^20个组合。
因此,对于一个20长度的bcrypt密码,根据这将需要95^20/(71000*3600*24*365)~10的28度年(如果我做得对的话)
QSN1:现在,对于blowfish,不限制密码的最大长度为72是有意义的,因为在任何情况下,在此之后,所有内容都将被截断,因此在这里没有额外的安全增益。
QSN2:即使存在salt(对于每个用户来说都是唯一的,并且保存在db中),我还是希望将pepper(在应用程序中硬编码而不是保存在db中)添加到密码中。我知道if会增加很少额外的安全性,但我认为如果db(或db备份)只是泄露的话,pepper会很有用。https://security.stackexchange.com/a/3289/38200所以,为了能够添加20个字符的pepper,我需要使密码的最大长度约为50。我是这样想的:假设用户使用了70个字符,在大多数情况下(如果不是全部),它将是类似的某个短语或smth,而不是生成的强字符,所以将用户最大长度限制为50,并添加另一个20-22个字符的pepper,这肯定更安全/随机,不是更安全吗?另外,假设黑客正在使用“常用短语”彩虹表,我认为72个字符的常用短语
被黑的几率比50个字符的常用短语+22个字符的随机字符串
高。那么,是使用pepper和50最大长度的这种方法更好,还是我在做smth错误,最好保留72最大限制(如果qsn1可以的话)?
谢谢
顺便说一句:
根据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
https://signup.wordpress.com/signup/
问题1:没有理由限制密码长度,BCrypt可以使用更长的密码,尽管只使用72个字符。您将没有任何优势,但理论上,您将阻碍使用密码管理器的人使用更长的密码。如果将来切换到另一个算法,限制可能会不同,所以没有理由限制为72个字符。
问题2:您可以更好地使用另一种方法:用服务器端密钥加密密码散列,而不是胡椒式的。添加pepper的原因是,攻击者必须获得服务器上的权限,因为没有密钥,他就无法开始强制哈希(SQL注入或丢弃数据库备份都不行)。与加密(双向)哈希的优势相同。
本文向大家介绍密码哈希函数 Bcrypt的最大密码长度限制详解,包括了密码哈希函数 Bcrypt的最大密码长度限制详解的使用技巧和注意事项,需要的朋友参考一下 密码哈希函数 Bcrypt的最大密码长度限制 Bcrypt是一个很流行的密码哈希算法,是Niels Provos和DavidMazières基于Blowfish加密算法设计的密码哈希算法,于1999年在USENIX协会上提交。Bcrypt在
密码\u默认值和密码\u BCRYPT之间有什么区别?他们都使用河豚加密算法吗?算法的成本是多少?如何在PHP中设置密码\u散列生成255个散列长度而不是60个?
问题内容: 我已经将我的Elasticsearch集群从1.1升级到1.2,并且在索引一个较大的字符串时出现错误。 索引的映射: 我搜索了文档,但没有找到与最大字段大小有关的任何内容。根据核心类型部分,我不明白为什么要为某个字段“校正分析仪” 。 问题答案: 因此,您遇到了一个术语的最大大小问题。当您将一个字段设置为not_analyzed时,会将其视为一个术语。基本Lucene索引中单个术语的最
控制器文件只是调用服务方法。 服务类别: 我想密码是在行中散列后验证的: 如何在散列和保存之前验证此密码? 如有任何帮助,不胜感激。提前谢了。
问题内容: 当我尝试过时如何设置可以使用swift输入到UITextField中的最大字符数?,我看到如果我全部使用10个字符,我也无法删除该字符。 我唯一能做的就是取消该操作(一起删除所有字符)。 有谁知道如何不遮挡键盘(以便我不能添加其他字母/符号/数字,但可以使用退格键)? 问题答案: 对于Swift 5和iOS 12,请尝试以下协议实现方法的实现: 该代码最重要的部分是从()到()的转换。
配置最大长度为数据存储提供了有关示意,示意其为给定属性使用合适的数据类型。最大长度仅被应用于数组数据类型,比如 string 和 byte[]。 注意 Entity Framework 在将数据传递给数据库提供程序之前不会做最大长度验证。是否合适是由数据库提供程序或数据储存验证的。比如,使用的是 SQL Server 时,超出最大长度将由于底层数据列的数据类型不允许数据超出而导致异常。 惯例 按照