通过比较结果是否可以知道密码猜测是否接近例如,如果真实密码是“ password123”,并且黑客尝试使用“ Password123”,“ password1234”,“ password124”等,则生成的哈希值是否会相似?
让黑客假设他们知道任何盐,胡椒粉,辣椒粉,阿斗波,等等……如果他们尝试使用正确的密码,它们会生成匹配的哈希。
(我认为这可能会根据所使用的哈希函数而有所不同,但我不确定这一点。)
#1 楼
不,您无法确定您对哈希的猜测有多接近。设计哈希函数时要牢记这一点:输入上的单个更改位必须在输出上更改很多位。它称为雪崩效应。下面是一些示例密码的SHA1哈希值:
cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123
b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123
2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124
115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple
abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple
一点点改变将完全改变哈希值结果。实际上,在理想情况下,对于输入的每一位更改,输出的每一位都将以50%的概率进行更改。
评论
这是正确的马力电池钉书钉:)(SHA1 abf7aad6438836dbe526aa231abde2d0eef74d42)
– Reeno
16 Sep 16'7:11
因试图与XKCD配合使用而被巧妙引用,但随后却对其报价错误。
–theonlygusti
16-09-17在14:32
好吧,正确的纠正非常接近,结果不可能有太大的不同
– gcali
2016年9月17日下午16:46
您应该注意,对于加密哈希来说,这是正确的。如果使用例如Java的String.hashCode()方法或其他通用哈希函数,则情况并非如此。
–罗伯特·弗雷泽(Robert Fraser)
16 Sep 18'5:45
@theonlygusti:实际上,将一个单词更改为同义词是相当聪明的;肯定比使用现在每个人都知道的SHA1哈希密码更聪明。
–轨道轻赛
16-09-19在10:27
#2 楼
不,由于雪崩效应,即使输入发生一点点变化也应该在输出中产生巨大的差异。也要讨论诸如md5之类的哈希函数或其他...给定任何输入大小,输出大小不会改变。在md5中,如果输入大小为2位或2000位,则输出将始终为32位的字母数字(十六进制格式)。因此,即使普通用户已经对md5进行了哈希处理,也几乎无法猜测输入的大小,猜测密码已经超出了普通用户的范围,仍然有通过应用算法和大量置换以及高端并行计算的方式。组合,以找出可能具有哈希代码的输入之一...!
md5 Output: password123 = 482c811da5d5b4bc6d497ffa98491e38 Password123 = 42f749ade7f9e195bf475f37a44cafcb password1234 = bdc87b9c894da5168059e00ebffb9077
以上结果显示了雪崩效应。
评论
请不要使用MD5散列密码(如果仅出于“效率太高”的原因)。
– Max Truxa
16-09-17在16:01
仅以md5为例...我知道更好的哈希函数...
– Surendra Patil
16-09-21在3:03
#3 楼
在上面的答案中添加一个额外的元素-哈希函数的全部意义是不浪费问题中的信息种类-如果您可以确定与比较输出的输入相似性的任何信息,则表示失败哈希函数。哈希函数不仅完成某些工作,而且顺便说一句,您无法弄清输入的任何内容,哈希函数的工作是为您提供有关零的信息。输入,如果您可以通过比较两个输出找到有关输入的某些信息,那将违反该原理。
评论
您的意思是加密哈希函数的全部要点。
–熊佳亚诺夫
16-09-19在20:18
@XiongChiamiov是正确的-补充说明,如果您使用非加密哈希函数对密码进行了哈希处理,那么您就搞砸了。
–詹森
16-09-19在21:29
#4 楼
这取决于您使用的哈希函数。由于您指定了密码散列,而明确指定了否,因此您永远都不想对泄漏任何类型信息的密码使用散列函数。哈希应该简单地匹配或不匹配,就是这样。说,提供相似性信息的哈希函数确实存在;此答案提供了更多信息。
评论
只有一个哈希函数不会“泄漏任何信息”,它将所有输入映射到同一输出。
– N.I.
16-09-17在9:42
@NajibIdrissi泄漏有输入的信息。
–用户
16-09-17在13:47
@MichaelKjörling是吗?这实际上不是新信息。我的评论不是在开玩笑,仅供参考...
– N.I.
16 Sep 19 '13:53
@NajibIdrissi-我同意你的看法。过去,哈希函数可能不会泄漏任何信息,并且对于检查密码也很有用。尽管我们可以足够接近以使其实际上等效。
– TTT
16-09-19在14:21
@NajibIdrissi虽然遇到冲突,但特定功能的表现不佳...(j / k)
–杰夫·梅登(Jeff Meden)
16-09-20在14:29
#5 楼
不。与散列函数中输入的数据和结果无关。例如,这里是MD5中的“ hello”:5d41402abc4b2a76b9719d911017c592
这是'Hello':
8b1a9953c4611296a827abf8c47804d7
评论
好吧,一定有关系。关键是这两种方式都不透明。
–安东·舍伍德(Anton Sherwood)
16-09-18在5:08
@AntonSherwood,您当然正确。进进出出之间有关系。如果您将相同的东西放进去并且期望每次都再次出现相同的东西,那一定是必须的。但是,只要散列函数没有受到损害,就应该不可能取出结果并确定输入的内容。因此,输入与输出之间没有明显的关系。
–约书亚猎人
16-09-19在15:10
#6 楼
这有点牵强,但通常不行-无法通过哈希值确定密码猜测的“正确性”。我能想到的最接近的场景是将密码短语的各个部分分割并分别进行哈希处理时,例如LMhash。这种情况将允许攻击者从密码的正确部分中收集信息,但不允许攻击者推断每个段与正确的“接近程度”。其他用户对散列和雪崩效果进行了很好的概述,因此我不再赘述!
#7 楼
是的,您可以,但是您必须存储散列,并将其关联起来,因此在这里和那里的工作和资源以及可能的安全问题。例如,即使在现在,也有可能在Wordpress网站上看到明文密码“尝试”,如果其中任何一个与其他地方的已知高熵密码相匹配,我们都可以知道它是从哪里泄漏出来的。当然,有一些算法可以生成错误键入的数据,由于URL蹲在类似的错误拼写上,因此众所周知,但是您需要分配分数才能确定匹配的接近程度以及需要达到的接近程度提醒。本质上,如果这些是词典单词,则可以按Soundex或类似方式对它们进行排名。评论
您能再解释一下吗?我不知道如何确定两个哈希具有相似的输入。
–熊佳亚诺夫
16-09-19在20:22
在哈希之前确定相似性。鉴于“迪斯尼乐园”是一个低熵密码,因此您可能会为“迪斯尼乐园”和“迪斯尼乐园”生成哈希(以及其他)。除非有冲突,否则您将有一个与密码关联的哈希列表,如果被单击,则可以将其检测到。相似性的标准由您决定,但是您可以通过重复或省略原始字符来存储100个未命中的字符。您无法从哈希中执行此操作,在捕获时需要密码。在企业级别,这可以建立一个黑名单来防止诸如“ Summer01”,“ Summer02”等序列值。
–mckenzm
16-09-20的1:20
可以将其列入黑名单,但最好在指定新密码时检查“是否有足够的区别”。要求用户(重新)输入旧密码,然后为您提供这两个密码的明文(此外,无论如何,在更改过程中都要进行验证的良好做法)。另请参阅Harper的答案和评论。对于加密哈希(原始问题),答案仍然是“否”,因为您实际上是在与其他哈希进行比较(此外,您还基于未哈希/未加密的值在哈希之间创建了链接)。
– BillR
16-10-1在20:22
#8 楼
根据所使用的算法,可能可以计算出密码的接近程度,这会导致碰撞攻击,从而使破解密码的方式比暴力破解的速度更快。我知道MD4就是这种情况。由于此类缺陷,可能会在几毫秒内破解。我没有分析MD4漏洞,但我敢打赌其中嵌入了一个接近方程。
让我们举一个白痴的例子:一个哈希函数,它是密码的ASCII码之和。密码AB和BA将具有相同的哈希值131。如果实际密码为AB,则系统还将接受BA作为实际密码。进行一些逆向工程将显示一种关系:a)将任何字母更改为下一个字母将在哈希中添加一个字母; b)在密码中添加新的A会在哈希中添加65。然后裂缝准备好了。破解返回的密码可能与用户使用的密码不同,但是系统不会知道两者之间的区别。
是的,密码哈希算法的目的是防止这种情况的发生。它应该是不可预测的,因此需要蛮力。但并非总是能按预期工作。数学是无法原谅的。
编辑:由于这些攻击,MD4,MD5和SHA1现在已过时。为了避免这些漏洞,诞生了新的算法。密码检查的作用不仅仅在于散列。新算法的采用并没有我们想要的那么快。对于不断更新的Linux,基本密码应使用现代算法。但是我敢打赌,世界上有很多系统运行的软件已有10年以上的历史了,因为如果使用付费软件,新版本的操作系统可能与较旧的应用程序不兼容,或者仅通过许可费用就不容易。我敢打赌,许多将自己的密码数据库与系统分开的软件的安全性较弱。
评论
但是这些天没有人使用MD4,MD5甚至是盐腌的SHA1,对吗?我们都在使用pbkdf2,bcrypt或脚本吗?正如其他张贴者所解释的那样,即使是古老的MD5也不会对输入产生巨大不同的输出,而输入仅相差1个字符,这意味着不会,相似的密码尝试不会产生相似的哈希值。
– Craig
16-09-19在7:53
添加了对此的评论
–卢卡斯
16-09-19在12:20
MD5和MD5相比都比10年要早得多。 MD5在1993年SHA0发布时已过时,而MD5的一个组成部分在1995年被破坏。SHA1在1995年发布,但是2005年在SHA1中发现了理论上的弱点,并且11年前不再考虑SHA1保护资金雄厚的对手,因此您想使用SHA256或SHA512,但不能单独使用。因此,HMAC函数Pbkdf2,bcrypt,scrypt等全部使用带有熵的哈希函数作为其算法的一部分,但不是JUST哈希算法。
– Craig
16-09-19在14:52
埃尔默克雷格(Craig,Elmer)的问题是关于“假设某人知道所有盐类,以及其他使用的技巧”的哈希。
–卢卡斯
16-09-19的16:36
Elmer的问题是关于密码管理的
– Craig
2016年9月19日下午16:38
#9 楼
不用看哈希就可以了,但是他们可以强行输入接近输入密码的几千个密码。
当然,假设他们可以绕过站点对某人进行多次尝试的任何防御措施。显然,该站点本身具有这种能力,例如,它是否想检查密码是否仅用手指操作,而不将其计入允许的尝试次数之内。)
需要多少次尝试输入n个字符的密码?
n用于测试用户是否对多余的字符进行手指操作。
(n + 1)* 95用于在任何位置测试丢失的字符。
n测试用户使1个字符的小写字母变为小写字母而不是大写字母或移位(#)而不是未移位(3)。
n(n-1)可以测试2个字符的小写/不移位,反之亦然。
<= 6n,以测试用户无意中键入了一个相邻字符而不是此字符。 (即,如果说是F,则用D R T G V C代替)。
12来测试用户的一只手是否应该偏移一个位置,再加上几只手指中间的字符(Y G H B)可能会被两只手击中。
如您所见,这些数字并不是很大,因此这种分析是可行的。
评论
我错过了这个答案的重点。您没有将哈希与真实哈希进行比较以了解其接近程度,而是基于相似的输入构造了一组哈希。此设置可能对验证用户有用(关闭不算入锁定前的最大尝试次数),但如果该设置泄漏(“尝试输入错误的值,但关闭!”或“仅需要尝试一种形式的),也会帮助攻击者例如:“ password”还测试“ Password”,“ password1”,“ password2”,“ passwords”,“ passwordz”,但不测试传统的大写锁定“ PASSWORD”和“ pASSWORD”。
– BillR
16-09-19在6:17
我认为主机没有任何理由告诉黑客/用户他已经接近,这仅是有用的内部情报。如果黑客有哈希值和盐分,这还使他可以轻松地在他可能已经拥有的密码附近测试密码,例如来自入侵其他系统。对于用户而言,这意味着对密码的微小更改根本就不受保护。
–哈珀-恢复莫妮卡
16-09-21在0:56
如果破解者具有一组哈希(实际+闭合),则测试1个可能的哈希密码将消除该组中的所有密码(如果闭合1000个,则计算1个哈希并将其与1001个哈希进行比较,而无需重新计算)。我以为pwd db(带有所有额外的“关闭”散列)泄漏了(但请参阅下一条注释)。
– BillR
16-09-24在22:36
备用破解方案:假设cracker(me)尝试登录到一次3次错误尝试后锁定5分钟,在12次之后锁定1天,并在24次之后要求重置但不算“足够接近”的网页登录。如果我实际上尝试使用任何“关闭”密码,那几乎就像在跟踪锁定时尝试尝试1000。如果“ opensesame”关闭,那么我只需要测试接近opensesame的密码。更糟糕的是,这给试图通过标准登录程序将一个站点的违规行为扩展到其他站点的任何人提供了天赐的礼物,这是因为密码重用(完全或几乎类似)。我可以永远尝试!
– BillR
16 Sep 24 '23:01
评论
简短的答案:不-否则彩虹桌最终会变得小很多散列的目的是尽可能地随机。所以我希望没有。
真的从来没有问过这个问题吗???只需尝试用一个短字符串的MD5哈希,更改一个字母,然后自己寻找! miraclesalad.com/webtools/md5.php
@schroder,您是否将“不应该”与“不”混淆?
@emory您是否将哈希函数与引号取消引号哈希函数混淆?