对您的密码长度保密对安全至关重要吗?

知道您的密码长度为17的人会极大地使密码更容易被暴力破解吗?

评论

在理想的世界中,具有已知的字符集,并且没有字典或其他复杂的方法来生成密码,不知道密码的长度对攻击者来说与在字符集中增加一个字符的代价相同。

大小事项。它越短,您谈论的内容就越少。

保持长度秘密的重要性与长度成反比。

大多数长度不超过17的琴弦正好是长度17(n球的体积接近表面)

@ColonelPanic对于大n

#1 楼

好吧,让我们从数学开始:如果我们假设您的密码由小写,大写和数字组成,则有62个字符可供选择(为了简化数学,实际的密码也使用符号)。长度为1的密码有62种可能,长度2的密码有62 ^ 2种可能性,...,长度为n的密码有62 ^ n种可能性。

所以这意味着如果他们知道您的密码正好是17个字符,那么它们可以跳过所有长度小于17的密码,并且只有62 ^ 17个密码可以尝试。

但是有多少个密码的长度小于17 ,与62 ^ 17相比?

好吧,如果我们将62 ^ n加以62 ^ 17除以得到(从n = 1到n = 16等于62 ^ n)/ 62 ^ 17 = 0.016(链接到计算),因此仅检查长度为17的密码比检查所有长度为17以下的密码仅快1.6%

如果我们有一个密码方案,允许所有95个可打印ASCII字符,那么不必尝试输入少于17个密码的节省就降到了1.06%
(链接到计算)。

关于小于n的密码数目与长度为n的密码数目之比的有趣的数学怪癖是,它实际上并不依赖于n。这是因为我们已经非常接近1/95 = 0.0105的渐近线。因此,无论密码长度如何,攻击者都可以从此技巧中获得相同的相对或百分比时间节省。它总是在1%-2%之间。但是,当然,随着您添加每个新角色,它花费的绝对时间会增加几个数量级。


上面的数学假定一个简单的蛮力将尝试a,b ,c,...,aa,ab,...这是破解适当随机的计算机生成的密码的良好模型,但是对于猜测人为生成的密码却是一个可怕的模型。

真正的密码破解者是基于字典的,尝试使用英语词典中的单词(和单词组合),泄露的密码列表等,因此,这些计算应该花些心思。

另一个效果知道您的长度是因为他们不必尝试任何长度超过17的密码,对于尝试使用字典单词组合的暴力破解算法,实际上可以节省很多。


正如@ SteveSether,@ xeon和@CountIblis所提到的,公开密码的长度(或熵)还会影响攻击者是否甚至试图通过阻止强密码而不是将其吸引到弱密码来破解您的密码。 。因此,如果您知道自己的密码很安全,那就泄露一下!但是,公开系统中所有用户的密码长度(或熵)具有使强密码变强而弱密码变弱的效果。


底线:

告诉别人密码的长度不是您可以做的最坏的事情,但我仍然不会这样做。

评论


“告诉别人密码的长度并不是您可以做的最糟糕的事情,但我仍然不会这么做。”在某些情况下,存储此信息很有用。 (较长的密码->强制重设密码之间的时间更长。)如果数据库受到威胁,则可能会泄漏该数据库。与奖励较长密码的方案相比,〜2%的裂纹优化并不是一个明显的缺点。 (注意:实际上,我将存储zxcvbn熵估计而不是长度,但是也可以将其近似。)

–斯科特·阿西塞夫斯基(Scott Arciszewski)
2015年6月23日14:32



我的意思是:两列密码是bcrypt / password_lock哈希,强度是密码的zxcvbn熵估计值,用于确定何时强制用户执行强制性密码重置(单边30天很烦人,让我们使用巴甫洛夫条件式来奖励更强的密码)。

–斯科特·阿西塞夫斯基(Scott Arciszewski)
2015年6月23日15:04



@ScottArciszewski博览会。实际上,您为每个密码保留了两个“哈希”:bcrypt哈希和zxcvbn熵。由于zxcvbn的计算速度比bcrypt快得多,因此,如果zxcvbn分数完全匹配,攻击者只需对候选密码进行100,000次(或wtv)盐和哈希值迭代。对于攻击者来说,这是一个巨大的优势。由于zxcvbn是开源的,因此建议您稍微修改一下算法,以便至少db中的熵值与标准实现所计算的值不完全匹配。

–麦克·恩斯沃思(Mike Ounsworth)
2015年6月23日在15:12



@ScottArciszewski与存储熵估计相比,我认为存储计算的到期时间要好得多。此外,像Mike所建议的那样,进行一些随机化将确保设法弄清楚密码的确切允许生存期的攻击者不会弄清楚确切的熵估计。

–卡巴斯德
15年6月23日在17:35

@MikeOunsworth我并不是要说存储(int)log($ entropy,2)是安全的,但是如果zxcvbn($ password)是浮点数,那么存储第一个可能更安全,因为您要截断精度很高。这减少了攻击者可用的数据量。这就像说“这里是我的密码的crc32”和“这里是我的密码的crc32的前两位数字”之间的区别。两者都可能是个坏主意,但第一个要糟得多。另一方面,在不更改精度的情况下调整zxcvbn会因模糊而带来安全性。

–帕特里克M
15年6月23日在21:20

#2 楼

除了@Mike详细介绍的数学方法外,还要考虑到密码长度到处都是泄漏:


输入时,偷偷摸摸的旁观者可以通过计数' *”或听击键(在后一种情况下,他可以用智能手机录制声音并在闲暇时播放)。
在经典的“ Web浏览器”方案中,用户名和密码将通过一些HTTPS POST发送到服务器。 SSL层将加密数据,但SSL不会隐藏数据长度,因此被动网络观察者还将了解密码长度。
用户侧接口和接收系统都将使用函数的执行时间和内存访问模式将取决于密码长度。可以采取计时措施的攻击者通常可以从这些措施中推断出密码长度。

,因此,一种明智的方法是将密码长度视为公共数据。一些攻击者将无法访问它(这种攻击者只是获取了服务器数据库的副本)。别人会知道的。很难知道密码长度有多少“秘密”,并且由于安全性全在于量化事情,因此最好只是假设所有攻击者都可能知道密码长度。认为您可以对其保密,并根据该概念评估安全性将非常危险。

评论


TLS和SSH经常使用块密码,这意味着更长的密码只会在块溢出(例如8字节边界)时使加密消息更长。但是,如果将密码键入为交互式会话的一部分(通过SSH的终端,或通过SSH的VNC,...),则每次击键都会发送一个数据包,该数据包几乎公开了与用户按键音频相同的信息,点击。

–大卫
15年6月23日在18:07

使用TLS的现代方式是使用没有填充的AES / GCM密码套件-因此可以以最高的精度推断纯文本长度。

–汤姆韭菜
15年6月23日在20:05

@TomLeek您缺少一个关键点。用户名,CSRF令牌和广告等其他数据将更改内容长度。在这种情况下,监听此类流量毫无用处。同样,某些站点在客户端本身上计算bcrypt(不确定),从而从请求数据中提取长度。

–xyz
15年6月24日在18:06



@ prakharsingh95:在有人试图破解您的密码时,用户名可能不是秘密(但是,如果攻击者不知道用户名,那么您是正确的,它将试图根据密码的大小确定密码长度用于登录的https发布请求)。 CSRF令牌通常是给定站点的固定长度,攻击者可以仅通过使用站点来确定该长度,但是毫无疑问,会有一些例外。从用户到服务器的https请求通常不包含广告。

–史蒂夫·杰索普(Steve Jessop)
2015年6月25日在8:34



@ prakharsingh95:Tom的观点是,它泄漏的方式太多了。即使您可以解决这一漏洞,也仍然不能让您依赖密码长度的保密性。通常,对于HTTPS,可以肯定的是,将长度混在一起可能会造成一些麻烦,并防止一些更简单的信息泄漏。例如,如果您有一个网站提供10,000个不同长度的文档,则您可能会认真考虑攻击者的含义,从而推断出每个访问者都查看哪些文档。

–史蒂夫·杰索普(Steve Jessop)
2015年6月25日在9:04



#3 楼

揭示密码长度可以揭示有关密码强度的一些信息。因此,从本质上讲,您是在向别人暗示猜测的难度。

因此,如果您的密码很长(示例中为17个字符),则基本上是无用的信息。如果密码短(6个字符),它会告诉攻击者您可能值得攻击。攻击者追赶最简单的目标。

评论


我几乎不称那些可以节省大量附加时间的信息“无用” :)

–克苏鲁
15年6月24日在8:25

结果是:如果可能,请宣布一个比实际密码大得多的密码长度。如果攻击者忽略它,则不会造成任何伤害。如果他们相信,他们可能会放弃尝试破解您的密码(甚至尝试使用错误的密码长度)。

–杜布
15年6月24日在14:25

或者说它更短,攻击者会认为它很容易破解,并花了几个月的时间产生热量,却什么也没产生。

–显示名称
15年6月25日在9:34

或撒谎浪费精力:我有18个工作长(实际上是16岁,反之亦然)

–WernerCD
15年6月28日在18:05

#4 楼

我不同意接受的答案。的确,如果所有密码都是由机器随机创建的,则密码长度几乎是无用的。
如果密码是由人以通常的方式创建的,则密码长度不再适用:根据一个或多个词典单词,将大写字母与小写字母混合使用情况下,用数字或特殊字符替换某些字符,并添加前缀和后缀(例如“!1”)等。
让我们看一下两种情况,一种是我们有10'000'000密码散列并且想要为这些哈希找到尽可能多的匹配密码。另一个是一个密码哈希,我们想破解它。在这两种情况下,差异都非常明显。像往常一样,即使乍一看似乎也不会滥用所有信息。
方案1:利用有限的资源破解了1万个密码散列中的许多信息。
如果我们不知道密码长度,我们可以尝试对所有密码散列进行暴力破解攻击,而无法区分它们。
如果我们使用详尽的暴力破解(保证可以找到密码),则必须知道密码长度只会带来很小的收益。为什么?蛮力破解所有7位数字密码大约需要1-2%,而蛮力破解所有8位数字密码。通过知道长度,我们唯一得到的是,如果我们已经知道密码具有8位数字,则无需强行使用所有7位(或更小的)密码。除了蛮力攻击需要接近无限的资源(计算能力和/或时间)之外,因此我们不能或不会做。
相反,我们针对每个密码长度测试一系列“可能”的密码。一种方法是使用字典攻击。测试可能的密码比使用穷尽的蛮力便宜几个数量级,但是它有一个巨大的缺点:一旦我们针对密码哈希尝试了所有“可能”的7位密码,但是没有找到匹配的密码,我们就不会知道此密码哈希的匹配密码是否超过7位数字。因此,除非我们确定密码长度不超过7位,否则我们仍然必须针对所有“可能的” 8位数字密码,9位数字密码,10位数字密码等对密码哈希进行测试-并且在测试可能的密码时,就像详尽的暴力破解,测试更长密码的成本成倍增加。由于我们现在知道密码的长度为7位,因此我们不必针对可能的8位,9位,10位,11位,12位甚至更长的密码进行测试,从而节省了大量工作。
更好。一旦测试了所有可能的密码(最多20位数字),我们现在就可以将剩余资源用于对密码哈希很短的那些密码哈希进行蛮力攻击,而以前的搜索“可能”的密码不会破解。假设我们还有2'000'000个完整的密码哈希,其中100'000的密码少于6位数字。请记住,我们的预算有限。 6位数字的密码很容易破解。但是,因为我们知道哪个100'000是6位或更小的数字,所以我们现在需要暴力破解100'000 6位密码才能破解100'000,而不是强行强制2'000'000密码破解100'000 6数字密码。获得相同结果的工作量就是这笔费用的5%!
如果我们综合考虑所有好处,从知道密码长度中获得的确切收益取决于我们测试“可能”密码的方法的速度,针对每种密码长度测试可能的密码的方法的成功率,我们想要破解的密码哈希集合中密码长度的分布,以及我们可用的资源量(计算速度,时间)。但是通过知道密码的长度,我们可以轻松地将给定资源量的密码数量增加几倍-如果密码对我们有利,我们可以减少破解30%密码的资源成本。密码数量级或更高。
方案2:在有针对性的攻击中破解单个密码
不知道密码的长度,我们需要在蛮力地用短时间强制所有密钥之间分配资源长度,并测试可能更长的密码。假设我们在每种资源上花费了一半的资源,那么知道密码长度就可以使我们完全通过2种资源中的一种,从而使我们的可用资源增加一倍。
我们还获得了其他信息,这些信息对于有针对性的攻击非常有价值:


如果密码足够短以至于无法强制使用,我们可以对密码获取的时间上限进行上限。这可能会导致我们尝试一些本来不会考虑的攻击。<​​br />

我们还可以计算出完全破解密码的可能性。如果我们知道我们不太可能破解该密码,则可以将我们的资源用于寻找其他破坏系统的方法。


如果同一用户有两个不同的密码,我们可以查看是否它们实际上是相同的密码。如果它们仅相差2-3位数字,我们就可以推测出较长的密码可能与较短的密码相同,外加前缀或后缀。


如果我们获得有关密码的更多信息,则可能会获得比单独的两个密码大得多的增益。例如,如果我们发现密码是牛津词典中的一个单词,那么例如,如果我们每分钟只能暴力破解一个密码,您仍然有机会保持密码安全。但是,如果我们也知道密码长度为17位数字,那就结束了。



评论


看起来您对Mike Ounsworth的已接受答案的不同之处很大程度上在于:他假设密码是从整个字符串集中随机选择的,但是您没有这样做,而是假设人们以这种方式选择了密码人们做。我认为,如果您突出假设的差异,那将对您的情况有所帮助。

–路易斯·卡西利亚斯(Luis Casillas)
16年8月25日在20:31

#5 楼

显示密码的长度确实会产生影响。如果您的密码很弱(短密码),则攻击者可能会着重于破解它。如果密码是强密码(长密码),则攻击者可能会探索其他攻击媒介。因此,了解密码的长度可以使黑客在节省时间的同时选择更好的策略。

#6 楼

除了可以很好地概述您的问题的答案之外,还需要考虑另一件事:在进行风险评估时,您必须假设攻击者了解您用于构建密码的方法的所有知识。 >
换句话说,如果您的密码是由四个粘合在一起的普通英语单词组成的,所有小写字母(àla xkcd),那么您必须假设(不同的是xkcd这样做,顺便说一句)攻击者将获得相关的字典并仅尝试四个单词的组合。

现在,您有一个关键空间(可能性数量),您可以根据[特定技术和环境相关的数量]尝试中检查其元素所需的时间投入/秒-这样就可以统计出密码在攻击中幸存下来的时间。

现在,您可以根据自己的标准(密码生命周期,人们使用该帐户的时间,宇宙的年龄,...)


如果我们把xkcd的例子,那就是


英语使用者的平均词汇量约为12,000个单词。让我们将其减半(所以6,000)
这使6000 ^ 4 =〜10 ^ 15组合
假设在线攻击的测试速度为1000次/ s-这是10 ^ 12秒= 20,000年< br离线攻击会更有效。多少取决于很多事情,专门的GPU破解可以攻击速度为10 ^ 9测试/秒的散列,因此将这种密码的时间缩短为15天。但是,这假定哈希设计不正确(哈希密码需要很长时间)


评论


我们可以使用Diceware词典作为指导。那是6 ^ 5 = 7,776个单词。 log2(7776)〜12.9(位)。 Diceware假定单词是以独立,随机,均匀分布的方式生成的(通常使用物理骰子,因此使用名称)。

–用户
16 Mar 7 '16 at 14:55



#7 楼

如Steve Sether在回答中所指出的那样,故意公开密码的长度(假设您仅使用非常长的密码)将使黑客尝试猜测密码的可能性降低。因此,通过有意泄漏有关密码的信息,实际上可以增强安全性。

评论


我猜这在技术上是正确的,但是安全性的提高几乎为零,因此我通常会对其加以抵销。

–布赖恩·诺伯劳赫(Brian Knoblauch)
15年6月24日在13:50

否则他们可能会尝试以其他方式对其进行破解。所有密码<= 8的蛮力,密码> 8的社会工程学。

–emory
15年6月24日在15:47

#8 楼

攻击者不会尝试暴力破解,而是尝试所有可能的密码,而是先尝试更可能的密码。完全随机的八字母密码可能比简单的十七字母密码更难破解。

因此,攻击者不会首先尝试所有短密码,而是在整个攻击过程中尝试各种长度的密码。因此,如果您有一个十八字母的密码“ hellohellohello123”,则不安全;完全随机的八个字母的密码可能更安全。

很难猜到硬的8个字母的密码,因为攻击者在检查所有8个字母的密码之前还会尝试“ hellohellohello123”之类的事情。如果您告诉攻击者密码长度,则可以进行更正。因此,损失要比之前提到的1.26%严重得多。

评论


一般来说,这是正确的,但是8位密码很容易被蛮力破解,因此在这里并不是一个很好的例子。 (如果使用各种字符,则为3天;如果仅使用小写拉丁字母和数字,则为11分钟)

–显示名称
15年6月25日在9:39

@Sarge根据哈希函数,其参数以及破解它的可用计算资源,强行强制使用8位密码可能需要从(几乎)零到(几乎)无穷大的时间。无法做出一般性声明,即破解3位数字的密码需要3天。如果某人使用的哈希可以由现实的攻击者在11分钟内破解8位数的密码,那么他们显然选择了错误的哈希。

–彼得
2015年6月27日在16:53



@SargeBorsch:你从哪里得到的?例如,一部iPhone需要大约0.1秒的时间来检查一个密码,而这绝对不可能。即使是8位数字也需要3个月才能破解。

– gnasher729
15年6月29日在14:29

iPhone不是一个例子,它们的硬件较弱,并且可能存在人为限制。我是从howsecureismypassword.net获得的

–显示名称
15年6月29日在15:34

@ gnasher729您是否曾经在GPU上运行过蛮力应用程序? 4年前,在我的旧GPU上,它每秒散列40亿个密码。 iPhone的速度很慢,是的,但夸张的是0.1秒,可能接近0.1毫秒。

– Aidiakapi
15年6月29日在15:42

#9 楼

降低密码熵的任何措施都会降低其强度。

也许即使您公开了密码长度,可能的剩余密码池仍然足够大。

关于一个具体示例,所有长度为密码的密码的集合17几乎足以抵抗几乎所有攻击。前提是您没有透露其他详细信息,例如“我的长度为17的密码包含我没人知道的猫咪的名字。”

长度17表示272843561753653169767435615050624325866274580142388791900214521038955085904904188409449281281578168966401组合(考虑80个可能的字符-添加字母数字和特殊字符)。考虑到我们当前的处理能力,我很确定这已经足够。上面的数字是一个数字量级,后跟980。

#10 楼

是。这非常关键。一个名为Crunch的程序会为您生成单词表。 1-17个字符的范围将占用15610 PB!但是,如果黑客知道您的密码恰好是17个字符,则花费的时间会少很多。这就是为什么它至关重要的原因。

评论


恰好17个字符与包括17个字符在内的所有内容所存储的数据量相同。与17的大小相比,所有1到16个字符都是舍入错误。

–布莱恩·博特彻(Bryan Boettcher)
15年6月29日在18:14

哦。我不知道

–破碎的王牌
15年6月29日在18:52

搜索空间为17个字符的密码非常疯狂。考虑一下,如果您有17个字符(每个空间62个可能的字符),则第17个空间中的62个字符每个都有1-16。根据定义,所有1-16个字符最多仅占17个字符空间的1/62。

–布莱恩·博特彻(Bryan Boettcher)
15年7月1日在14:27