注意:这不是我目前的实际情况。

假设您的老板是那些老式的计算机文盲管理人员之一,并且希望以纯文本形式存储密码以简化开发。您有5分钟的时间来解释哈希密码的要点。您还从经验中知道,您的老板可以被一个很好的类比所左右。您会用什么比喻来解释您的老板密码应该被散列?

评论

当技术性对话不明确时,也许是时候开始承担责任了。

@Nate:对于那些老板,您解释说他们对接受责任可能感觉很好,但您却没有,所以,如果他们可以请代表公司签署弃权书,接受技术决定的所有责任(即,不要散列) ),然后您执行了。这使他们不得不思考的时刻变得更短了。

打个比方:曾经有一位国王不想听到他王国中正在发生的事情。他是一个非常重要的人,没有时间思考问题。但是由于他负责,他不得不做出很多决定。如果他让他的顾问们做他们最想做的事,他就不会是国王。因此,他命令其顾问告诉他发明的故事,然后问他将如何处理故事。自然地,他的王国被入侵,他被杀,城堡被夷为平地。但是至少他不必考虑它,他喜欢这些故事。

“因为不这样做,第一次让我生气时,我将在您登录时使用您的密码登录,并将公司的部分资产转移给您。”

因为您是开发人员,所以制作安全软件是您的工作-老板雇用您是因为您了解计算机,而他却不懂,所以您负有道德和专业义务。

#1 楼

简短答案

简短答案是:“因此,您不会受到500万美元的集体诉讼的打击。”对于大多数首席执行官来说,这应该是足够的理由。散列密码便宜得多。

,但更重要的是:仅按照问题中的建议对密码进行散列是不够的。您仍然会提起诉讼。您需要做更多。

为什么需要做更多的事情需要花一些时间来解释。因此,让我们花点时间,以便您了解所要解释的内容,然后我们将为您介绍5分钟的摘要。

哈希仅仅是开始

但是让我们开始吧。假设您以这种方式存储用户密码:

# id:user:password
1:alice:pizza
2:bob:passw0rd
3:carol:baseball


现在,假设攻击者成功地获得了对系统的更多访问权限。在您发现问题并关闭孔之前,他只有35秒钟的时间。但是在那35秒内,他设法锁定了您的密码数据库。是的,您犯了一个安全性错误,但现在已将其修复。您修补了漏洞,修复了代码,更新了防火墙,无论它可能是什么。所以现在一切都很好,对吧?

好吧,不,他拥有您的密码数据库。

这意味着他现在可以模拟您系统上的每个用户。您的系统的安全性遭到破坏。恢复的唯一方法是从新密码数据库重新开始,这迫使每个人都必须更改其密码而不将其现有密码用作有效的标识形式。您必须通过其他某种方式(电话,电子邮件或其他方式)与他们进行带外联系,以验证其身份以重新创建其密码,同时,您的整个操作陷入了困境。

如果您没有看到他窃取密码数据库怎么办?回想起来,您几乎不可能真正看到它的发生。您可能发现的方法是注意到多个用户帐户上的异常活动。也许几个月来,好像您的系统根本没有安全性,您不知道为什么。这可能会破坏您的业务。

所以我们哈希

而不是存储密码,而是存储密码的哈希。现在,您的数据库如下所示:

# id:user:sha1
1:alice:1f6ccd2be75f1cc94a22a773eea8f8aeb5c68217
2:bob:7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53
3:carol:a2c901c8c6dea98958c219f6f2d038c44dc5d362


现在存储的唯一内容是一个不透明令牌,可用于验证密码是否正确,但不能用来检索正确的密码。

差不多了。 Google,我敢问你这些哈希值。

现在我们已经发展到1970年代的技术。恭喜你我们可以做得更好。

所以我们加盐

我花了很长时间回答为什么加盐散列的问题,包括有关其在实际中如何工作的示例和演示。世界。我不会在这里重新散列哈希讨论,因此继续阅读原始内容:

为什么加盐散列更安全?

很有趣,是吗?好的,所以现在我们知道我们必须加些盐,否则我们可能永远也不会哈希密码。现在我们掌握了1990年代的技术。我们仍然可以做得更好。

所以我们迭代

您注意到了我上面链接的答案的底部,对吗?有关bcrypt和PBKDF2的内容?是的,事实证明这很重要。借助当今硬件可以进行哈希计算的速度(谢谢,比特币!),拥有现成硬件的攻击者可以在数小时内浏览整个盐化的哈希密码文件,从而计算出数十亿甚至数万亿的密码。每秒哈希数。您必须放慢它们。

降低它们速度的最简单方法是使它们完成更多工作。不必计算一个哈希值来检查密码,您必须计算1000。或100,000。或任何适合您的数字。您还可以使用scrypt(“ ess-crypt”),它不仅需要大量的CPU功能,而且还需要大量的RAM来进行计算,这使我上面链接的专用硬件几乎没有用。

这是当前的最新技术。祝贺并欢迎您使用今天的技术。

我们完成了吗?

那么,现在攻击者获取您的密码文件时会发生什么。好吧,现在他可以离线进行分析,而无需在线猜测您的服务。不幸的是,除非积极地阻止用户使用,否则会有相当一部分用户(4%至12%)使用密码“ 123456”或“ password”,攻击者将首先尝试猜测它们。

如果要保护用户安全,请不要让他们使用“密码”作为密码。或其他任何500强,就此而言。有可用的软件可以使准确的密码强度计算变得容易(免费)。

但是,多因素身份验证从来都不是一个坏电话。您可以轻松添加到任何项目。所以你也应该这么做。

现在,你的5分钟荣耀

你在老板面前,他问你为什么需要使用PBKDF2或类似的产品散列密码。您提到了LinkedIn集体诉讼,并说:“这是业界法律上预期的最低安全级别。少了一点实际上就是疏忽。”这应该少于5分钟,而且如果您的老板不服气,那么他就不会在听。

但是您可以继续:“实施哈希技术的成本可以忽略不计,而不实施哈希技术的成本可能在数百万甚至更高。” “如果发生违规事件,经过适当整理的数据库可让您将自己定位为运行良好的安全意识组织,而对数据库进行不适当的哈希处理则是非常公开的尴尬,正如历史多次表明的那样,不要被媒体丝毫忽略或忽略。”

如果您想获取技术,可以重新哈希以上内容。但是,如果您正在与老板交谈,那么您应该比这更了解。而且,类比远比仅仅显示无需添加糖衣就可以完美体现的现实生活效果要低得多。

通过讲一个很好的类比,您不会让人戴上安全手套。相反,您将一些午餐肉放入烧杯中,当它在绿色和蓝色火焰中爆炸时,您会说:“这将在您的手指上发生。”

在此处使用相同的原理。

评论


一条评论:我查了Linkedin的那桩诉讼,但被驳回了(尽管驳回的原因不是因为密码散列很差)。我将向我的同事展示它,因为它显示了使用SHA-1的潜在后果。我还发现了一个拥有150亿个SHA-1哈希值的网站,我将以此为进一步的证据。

– Nzall
2014年7月19日在15:59

'通过讲一个很好的类比,不会使人们戴着安全手套。相反,您将一些午餐肉放入烧杯中,当其在绿色和蓝色火焰中爆炸时,您会说:“这就是您的手指会发生的情况。” '用模糊的手指般的东西来证明某人的实际手指会发生什么,实际上是一个比喻。

– David Richerby
2014年7月20日在9:07

2FA / MFA有时可能是“一个坏电话”。如果在低安全性的情况下强迫每个用户一直使用它,则可能很快造成安全疲劳。我不想每次登录Facebook都必须提交虹膜扫描和粪便样本。如果您的数据没有那么高的风险,请选择2FA / MFA。您将使对偏执狂的安全性用户感到满意,而不会花费很多精力,而且您还需要将某些责任转移给选择退出的人员。

–奥利
2014年7月21日在10:28



我用谷歌搜索了第一个哈希。第一个结果是“您怎么说1f6ccd2be75f1cc94a22a773eea8f8aeb5c68217用德语?”

– Dracs
2014年7月22日在2:13

@woliveirajr crackstation.net具有190 GB的数据库,其中包含150亿个MD5和SHA-1的密码和哈希值。他们还拥有一个19 GB的数据库,其中包含15亿个哈希值,可用于许多其他哈希算法。.我已经对其示例哈希进行了测试,并且可以正常工作。

– Nzall
2014年7月22日7:09



#2 楼

该线程在类推上有点短,所以去了:

未加密的密码就像一个透明锁,任何对它有适当了解的人都可以设计匹配的密钥。

评论


我会使用散列=比较键,而无盐=透明锁

–贝尔吉
2014年7月27日11:00

@Bergi我不能从中做出一个简短的句子,考虑到您提供建议的方式,我想您也不能。

–aaaaaaaaaaaa
2014年7月27日14:34

可能不如您想的那么快,但我会尝试:未加密的密码就像备用密钥,可以将其与用户的密钥进行比较。但是,每个获得密钥室访问权限的人都可以复制它们。因此,我们不存储密钥,而是存储需要由用户各自的密钥打开的锁。仍然可以进入更衣室,因为人们可以选择锁,而且由于它们都是透明的并且是同一家制造商的,所以很容易找到可以打开的锁。因此,我们对哈希值加盐,就像使用许多不同的锁模型一样,因此需要单独进行选择。

–贝尔吉
2014年7月27日14:56

不幸的是,即使它几乎超出了评论长度限制,我也无法将其发布为答案:-)

–贝尔吉
2014年7月27日在15:03

@Bergi要尝试的要点,但该解释最终几乎与普通密码哈希解释一样复杂。类推的目的不是要取代实际的解释,它更像是那些无法掌握真正解释的人的决策救生艇。为此,简单而令人难忘是极其重要的功能。

–aaaaaaaaaaaa
14年7月27日在16:59

#3 楼

首先,我将提供一个开头:

假设您管理一家银行。您不想让您的客户直接使用这笔钱。因此,您有一个出纳员,只有一台电脑和少量的钱来处理日常的取款和存款。他无法访问所有内容,也无法将机密传递给客户,因为他无法访问这些机密。

出纳员很好,但有时,您有一个想要的人抢银行,他不会真的被柜员阻止。为了解决这个问题,您的地下室里有一个很大的保险箱,里面存放着客户的所有实物。这个保险箱有很多安全装置,例如指纹扫描仪,语音识别,压力开关,三键锁和定时锁。它旨在将不应该出现的人和不知道如何通过安全保护的人拒之门外。

此保险箱可以阻止99%的强盗,但总有1%通过绕过或残酷性地设法克服了所有安全性。万一发生这种情况,银行会将其货币存储在诱饵诱捕的容器中,这会使货币无法使用,例如将其炸掉或在上面喷涂油漆。这样,强盗要么无法使用这些钱,要么需要花费很长时间才能使这些钱再次可用。

一个软件应用程序也具有这些系统:用户使用的程序是出纳员:他无法使其做任何想要的事情,除非他找到了一种甜言蜜语的合作方式。保护程序和数据库的硬件和软件配置是银行保险库:它使那些不知道所使用的安全配置的弱点的人员无法使用。以明文形式存储密码意味着,如果有人通过了程序和安全配置,则他可以自由访问密码。就像银行将钱存放在一个使钱更难使用的容器中一样,对密码进行哈希处理会给破坏密码的人带来巨大的障碍。这也意味着,员工(银行,软件以及我们自己公司的员工)都不会受到压力,胁迫或甜言蜜语地绕过骗子的安全性,因为他们甚至无法直接访问金钱/密码。他们只能访问容器/哈希。

评论


您在哈希密码时迷失了我(是一个巨大的障碍)(通常这就是为什么我不喜欢类推的原因)

– njzk2
14年7月18日在21:15

@ njzk2“ X是一个障碍”,这是一个非常普遍的短语,以至于几乎没有一个类比。这只是一种惯用的说法,“ X使任务变得困难”。

– David Richerby
2014年7月20日在9:12

#4 楼

我喜欢将类比作为解释技术的一种方式,但是在这种情况下,由于类比太复杂了,因此可能不可行。

大多数经理比做正确的事更有动力来避免对自己的职位造成人身危险,因此,我将用一个例子来比喻一个例子,即以纯文本形式存储密码对公司造成严重影响,而不是一个类比。我只想说类似

“以纯文本格式存储密码会使我们看起来很糟糕,冒着声誉风险,并有可能公开接受诉讼。在任何行业中,这都是非常糟糕的做法,并且有一些网站专门用来命名和羞辱以明文形式存储密码的公司。就个人而言,我不想成为站在董事会/老板/ CTO面前的那个人,解释为什么我们没有实施基本的安全控制措施。如果我们对客户的密码进行哈希处理,则数据泄露不会立即导致黑客可以使用的密码泄漏,并且我们将被视为在保护客户的信息。哈希密码可以减轻很大的风险。 >
包括指向纯文本违规者的链接,然后将喜欢的消息发送给诸如丘比特媒体,微软印度商店等的一些新闻报道。

评论


对于纯文字违规者+1-向您的老板展示该公司将在一个公开的网站上被嘲笑,该网站在解释和辩护他们这样做的方面做得很好,看起来很容易。特别是因为实施良好实践非常容易

–nealmcb
2014年7月19日,下午2:35

#5 楼

使用类比功能可能很强大,但是在这种情况下,我认为用简单的语言解释发生的情况会容易得多。像这样的东西应该有效,但可能应该包括带有插图和大型公司字体的PowerPoint幻灯片。如您所知,我们要求人们使用密码,以便我们在使用我们的密码时知道他们是谁。产品。为了使人们能够登录,我们必须跟踪这些密码。问题是,我们无法完全按照输入的密码来存储密码,因为攻击者已经找到了能够看到和窃取密码的方法。

我们也不能仅仅用一个聪明的代码重写密码,并相信我们将是唯一知道如何翻译代码的人,因为这仍然不能保证确定的攻击者无法识别删除代码,它也无法防止组织内部的攻击,例如流氓前雇员。

要解决此问题,我们必须使用单向密码哈希。密码哈希类似于使用代码,只是无法解密。*这样,只有用户知道他或她的密码。我们仅存储密码的哈希值,并在用户登录时进行检查。这可以保护我们的用户安全,并减少数据泄露(可能造成严重后果)时的责任。 [包括因不安全的密码存储而被起诉的公司的示例]

* [我知道这并非不可能,但外行可能并不需要那么多的细节。]

评论


为什么没有更多的选票?此外,您可能还应该补充一点,如果密码以明文形式存储,则恶意的内部用户(例如,看起来杂乱无章的家伙在大厅里)可以访问它们,然后使用(或更糟糕的是出售)它们。

– Doktor J
2014年7月18日在20:12



我试图用这种简单的语言向我的妻子解释密码哈希。她陷入了单向功能的概念。关于简单语言的任何想法都可以解释吗?

– Nomic
2014年7月24日在11:29

@Nomic一种单向函数可以解释为通过使用人员的整个外观作为输入从1000个角度生成人员阴影的函数。您可以根据人物的外观完全确定人物阴影的外观,但反之则困难得多。生成从多个方向创建相同的精确阴影的3d形状肯定需要花费大量的时间进行修整和修改(尽管2d切口可在单个角度上起作用。)要获得访问权限,我们必须计算3d形状,因为只有3d形状被接受为输入。仅仅了解所有阴影是不够的。

–艾伦
14年7月24日在16:24

@Nomic试试看是一个好主意!艾伦的类比真的很好。我建议在简单语言上详细说明单向哈希,但出于乐趣,这是我对简单语言的尝试:单向密码哈希需要一些文本并对其进行巧妙的数学运算,以便将其转换为字母和数字非常漫长且难以理解的混乱。它与使用代码不同,因为无法将其转换回原始输入。

–重新打破建筑
2014年7月24日在16:26

@Allen我喜欢您第一条评论的简单性,但是无论哪种方式,阴影都是一个很好的类比

–重新打破建筑
2014年7月24日在16:27



#6 楼

到目前为止,所有的解释都有些长,下面是一个简短的解释:

一些不记得他们的银行密码的人,请在他们的钱包里记笔记。

如果小偷或熟识的人会去看他们有问题的钱包,除非以不识字的方式写别针。

散列基本上是以一种方式写文本没人能读。

评论


可以进行扩展以使您以其他人无法理解的方式编写引脚变得更加切实。

– Dennis Jaheruddin
14年7月18日在14:30

支持投票,因为这是一个很好的快速类比,可以理解其重要性,但是它的含义是,如果您知道“所有者可以读取它的方式”,则可以从注释中恢复PIN,这意味着加密而不是哈希。

– moopet
2014年7月18日15:54



尽管我喜欢简单性,但这种类比无法捕捉到哈希是单向过程的想法,因此它取决于您认为外行需要多少知识。

–重新打破建筑
14年7月18日在16:29

您将哈希与加密混淆了。如果您可以阅读密码,则说明您无法保护用户的私人信息,并冒着巨大的法律风险。

–nealmcb
2014年7月19日在2:36

@nealmcb我意识到这实际上并没有解释哈希,但是确实解释了哈希的要点。因此,我相信它回答了这个问题。

– Dennis Jaheruddin
2014年7月28日在10:03

#7 楼

假设您是俱乐部的保镖。要知道是否允许他人进入,您有一本密码簿,其中包含人们的姓名/别名(有些人比较谨慎,只能通过别名知道)和他们自己的私人密码;您无法通过声音或外貌来认出他们是或不是他们所说的人(人数太多,而且由于别名,ID检查是不可行的),所以您只需要去书本上的内容(Web服务器无法通过看着你来判断你是错误的人)。人们必须告诉您他们的名称和密码才能进入,如果与您的书不符,他们就会被拒之门外。

如果有人得到了您的密码本图片(您的数据库是泄漏),他们可以冒充他们想要的任何人,而您却无法告诉他们他们在说谎。您的一些客户在他们的银行也使用相同的名称和密码(他们的出纳员就像您一样使用密码本),因此他们会被盗钱。然后,您会因为允许这样的重大违规而被解雇,使俱乐部看起来非常糟糕,并给他们造成了损失。

幸运的是,您可以购买一个以其名字命名的黑匣子(哈希函数)(盐)和密码,并为您提供了一个长的随机数字(哈希),该数字对于给定的名称和密码始终是相同的,而对于名称和密码的任何其他组合而言都将不同。因此,现在您的密码簿可以不包含[名称和密码],而只需包含[名称和密码]!当某人想要进入时,他们会告诉您其名称和密码,然后将其输入黑匣子,然后在密码本中查找其名称,以检查黑匣子给您的号码是否与记录的黑匣子匹配。 >
现在,如果有人得到您密码本的照片,他们仍然将无法进入!他们甚至无法判断您一半的人是否使用相同的密码,因为输入到黑盒中的每个[名称和密码]组合都是唯一的。他们像您一样拥有一个黑匣子,可以输入一定的名称和随机密码,直到找到正确的数字为止,但是他们必须分别为每个人这样做。

如果发现它,被泄露,您仍然应该让客户更改其密码以最大程度地提高安全性,但是攻击者将很难轻松进入。

评论


这个密码本是用盲文写的?

–PaŭloEbermann
14年7月22日在20:18

是。 ;)实际上我想把它放进去,但这很容易引起“有人窥视您的密码本/您的密码本”的类比。如果有帮助,则该书以盲文书写,但带有清晰可见的点,并且全部在一张纸上。 (QR码盲文?)

– Tim S.
2014年7月22日20:20



或者,如果您愿意,您可以看到,但该俱乐部是化装俱乐部,每个人进入时都戴着口罩。在这个宇宙中存在化装舞会。别问了! ;)

– Tim S.
2014年7月22日20:23



@PaŭloEbermann我已经删除了盲区。最后,我认为该类推论并没有增加太多,因此削弱了它。

– Tim S.
2014年7月23日在16:41

#8 楼

从防御的角度来解释它。

显然,您将尽一切努力确保代码安全。但是事实是,您的服务器不仅会运行您编写的代码,而且您无法控制其他人编写的代码。即使机器上的所有其他代码都是开源的,您也需要雇用2-3个全职开发人员来负责您自己的所有分支。由于“让我们自己别开玩笑”,这整个事情应该被认为是一项削减成本的措施,所以这是行不通的。

因此,即使您对自己的代码有绝对的信心,仍然有很多地方可以出错。因此,您需要一种方法来确保即使攻击者进入计算机,您的密码仍然是安全的。这就是“散列”(用引号引起来的原因,因为在当今时代使用的正确算法本身并不是真正的散列算法,但它仍然是一个有用的通用术语)发挥作用。

就军事而言,这实际上就是(以及为什么)建立多道防线的方式。没有哪位将军将整个军队放在同一位置,因为您需要考虑未预见到的某些事情会导致您的前线被击败或绕过的可能性。散列是您的家庭警卫:当其他所有操作失败时,它将保护您的密码的事情。您希望永远不需要它,但是在需要时不提供它的代价太高了:数百万美元的诉讼只是开始。

#9 楼

如何解释。


人类是人类,它们的现代化程度如何并不重要。密码将是诸如出生日期或女友/男友/宠物动物的名字等之类的。

因此,以明文形式保存密码是一种威胁。任何人都可以阅读。


哈希可以使人(包括忠实的系统管理员)无法读取它们。

密码一旦被散列,几乎是不可能的找回来。因此,不必担心您的密码会被他人窃取。即使有人得到了哈希,它也是没有用的。


我们可以说,如果密码是一个“水果”,那么它的哈希将是“果汁”。因此,当用户尝试登录时,汁液足以验证用户密码。

密码哈希的缺点是:
没有人可以获取原始密码。在这种情况下,系统必须要求用户输入
新密码



评论


imo,这根本不是缺点。这应该是标准的。

–马丁(Martijn)
14年7月18日在13:27

我认为没有必要类推。解释散列的真正好处是唯一的方法:散列密码很容易,看看是否有任何散列匹配。几乎不可能使用哈希来查找密码。并且要求用户输入密码,而不是哈希。

–CoffeDeveloper
14年7月18日在16:05

@Martijn对用户来说是一个缺点。

–布莱恩·奥尔蒂斯(Brian Ortiz)
14年7月18日在17:09

我仍然不同意。永远无法获取密码已成为常识。这样,当您找回密码时,就应该担心。

–马丁(Martijn)
14年7月18日在18:49

@BrianOrtiz为什么用户要关心您输入的密码是新密码还是旧密码?他们显然不记得以前的密码,也没有将其存储在任何地方,因此,他们所有人都知道,他们选择的新密码与旧密码相同。

– Paul
2014年7月21日,0:48

#10 楼


说明密码一直被盗,一旦发生这种情况,如果密码采用明文形式,公司就会真的很尴尬并可以提起诉讼。
说明今天哈希很容易做到。
/>现在进行类比:

单向哈希函数与非技术人员的最佳类比就是仅使用数字查找类比-无需复杂的密码学。当用户最初为您提供密码时,您会使用黑框为该密码分配一个唯一的数字,然后将该数字存储为用户的密码,而不是原始密码。

当用户稍后再次向您提供密码进行身份验证时,您会将给定的密码传递到黑盒中并获取一个数字。现在,您可以将该数字与之前保存的数字进行比较-如果两个数字匹配,则密码相同;如果两个数字不匹配,则密码也不相同。

每个唯一传递到框中的密码将获得自己的唯一编号,并且每次将相同的密码传递到黑盒中时,都会产生相同的编号。

黑盒进行数字查找的方式非常简单。众所周知,黑匣子的任何问题都由行业解决-任何漏洞由行业解决-如果黑匣子有问题,您的公司不承担任何责任。

最后,如果该号码是从公司数据库中窃取的,那么众所周知的黑匣子将不能反向工作-您无法获取一个被盗的号码并取回密码(假设原始密码很强)。

#11 楼

我还没有看到任何人直接陈述过最基本的答案,那就是,任何有能力发现密码的人的行为都不能与合法所有者的行为可靠地区分开。如果希望能够证明合法所有者执行了某项操作或通过自己的行为将密码暴露给了未经授权的人,则必须确保绝不要求合法所有者做任何让他人确定的事情。密码。

如果Fred的密码以一种无法恢复的方式存储在数据库中,则Fred可以声称自己的密码可能已被某人使用或泄露,从而可以反驳任何不当行为。可以访问密码数据库。除非使用专门的硬件来存储密码,否则将无法反驳Fred的反诉。

请注意,出于真正的安全考虑,Fred绝不应将其密码暴露于防篡改设备以外的任何设备上。他有理由信任。否则,就有可能会以某种方式篡改Fred键入其密码的设备,从而将未加密的密码泄露给某些对手。

评论


是的,这是最根本的答案。但是,这不是类推,并且在向不认识的人进行解释时不是很有用。

–emory
2014年7月20日在22:20



也许我的回答有些冗长,但是“如果您的系统管理员可以访问用户的密码,那么对他人的任何不当行为的指控将是他对管理员所说的”,这一想法应该是可以理解的。

–超级猫
2014年7月21日15:36



#12 楼

假设您是Scrooge McDuck。您已经将您的一大堆钱保存在一个大型保险库中已有一段时间了,但是这样做有一个问题:如果一个小偷能够进入保险库,那么您的所有金钱将一口气丢失!不好因此,您就是聪明的鸭子,您决定将您的钱分成很多小堆,然后将每个堆放在自己的单独保险库中。现在,如果小偷获得了使用一个保管库的权限,则只会损失一小部分钱,您可以轻松地更换受损的保管库。好多了!除了现在,您还有一个新问题:如何记住所有这些不同保管库的组合?您不能只为每个人使用相同的组合,因为如果小偷得到了他们的帮助,他们将有机会使用您的所有资金,而且与将其留在一个巨人中一样,您的生活也不会比这更好

您决定在一张纸条上写下所有组合(以及每个文件所对应的文件库),然后将其放入单独的文件库中。现在,您只需要记住一种组合,但是您的钱仍然分开存放。这是一个改进,但是仍然存在问题,因为如果小偷曾经设法找到并用纸箱打开保险箱,他们仍然可以拿走您所有的钱。你不希望这样的事情发生!

那你怎么办?好吧,理想的解决方案是用某种代码写下组合。您想要一个代码,小偷不能使用它来找回所有原始组合,但仍然可以用它来获取您的资金。不幸的是,实际上没有一种方法可以在金库中赚钱。幸运的是,受密码保护的用户帐户是可能的,因为我们实际上不需要知道用户的密码-我们只需要知道他们知道密码即可。

将钱存放在一个巨大的保险箱中,就像为整个系统使用一个主密码一样。将钱存放在不同的保险箱中并记下所有组合就像将用户的数据保存在受密码保护的帐户中一样,然后将所有密码以纯文本格式保存在一个位置:只要攻击者知道或可以猜测该位置是的,它与拥有一个主密码并没有什么不同。您需要一种方式来对密码列表进行编码,以使您仍然可以使用它来验证用户是否具有正确的密码,同时确保攻击者无法使用该列表自己取回密码。简而言之,这就是哈希的作用。

评论


有趣的是,在某些情节中,Scrooge的Money Bin的密码很简单。

–Ángel
2014年7月20日在18:37

#13 楼

假设您的密码数据库已泄漏或被盗:

如果密码是纯文本格式,则您的所有密码均属于我们。

如果密码被哈希化,则所有密码仍位于必须破解的共享银行保险库中。

如果密码经过哈希处理和加盐处理,则每个密码都在其自己的私人银行保险库中。

评论


除此之外,当每个密码都是其自己的保管库时,弱密码就是弱保管库。使用“共享银行保险库”,至少银行对所有密码都应用了高安全性标准。最好的做法是同时应用这两种方法:弱密码具有共同的保护,而强密码本身具有额外的保护。

–吕克
18-10-13在11:52

#14 楼

比喻时间:


存储纯文本密码就像将房子解锁。
加密密码数据库就像将密钥存储在门垫下。
哈希密码就像使用所有用户共享的3位数数字锁。
对密码哈希值加盐会为每个用户分配自己的数字锁。
PBKDF会为这些数字锁赋予更多数字。

没有人应该根据类推实际上决定安全事项,但这可能有助于向外行解释为什么采取预防措施很重要。

#15 楼

对于哈希函数,在足球或汽车领域尚无现成的类比。我们能做的最好的就是泄露实际情况。

亲爱的老板,

在一个完美的世界中,用户将具有安全意识,并且永远不会使用相同的东西(甚至两个或多个不同站点或服务的相似密码)。在那个完美的世界中,密码对于攻击者而言几乎没有任何价值。在破坏了用户数据库并学习了密码之后,这些密码对于访问其他系统将无用。

在现实世界中,用户重复使用密码,因此密码的保密性必须
即使在违反系统的情况下,也可以继续受到保护,以限制损害。

哈希有助于保护密码,因为从哈希中获取密码的唯一方法是暴力破解力计算需要时间。该计算将首先破解短密码或基于词典单词和常用短语的弱密码。破解强密码需要花费更长的时间,但是如果有足够的时间,这些密码也将掉落。

但是,由于破解散列密码需要花费时间,因此受到攻击的系统用户往往会重新使用密码或使用类似的密码,在攻击者尝试访问其帐户之前,可能有足够的时间被警告并在其他系统上更改其密码。 (不幸的是,那些密码非常弱的用户几乎没有时间,因为弱密码会很快从哈希中“破解”。针对系统的防御措施是防止用户使用弱密码。)

没有散列,攻击者可以在从受感染系统窃取密码后立即继续访问其他系统。到管理员甚至了解该漏洞时,其他系统已经被访问,至少对于那些重用密码的用户而言。还有第二个威胁:秘密访问的威胁。这甚至影响那些不重复使用密码的用户。假设系统的密码数据库已泄漏,但是未检测到此事件。攻击者可以在破解后数月或数年内使用密码秘密访问系统。攻击者不仅窃取了事件发生时的最新信息,而且只要不更改密码,只需登录具有密码的帐户,即可继续窃取信息。 >
哈希密码有助于防范这种威胁,特别是与常规密码更改策略和强密码结合使用时。哈希密码很强,可确保攻击者必须执行冗长的计算才能从哈希中发现密码。密码更改策略有助于确保在执行此计算时,发现的密码可能已经无用,因为它已被更改。

#16 楼

打个比方:作为一个锁匠,我可以(在客户许可的情况下)保留我为他们所做的工作的记录,包括他们的钥匙的详细信息。但这使我冒着闯入自己的商店并偷窃清单的风险(或这样做是邪恶的雇员)-在这种情况下,骗子可能会为许多房屋制造钥匙,我将为此承担责任更好的信息。

密钥的解决方案是永远不要以明文形式存储密钥信息。将其加密存储,切勿写下解码该数据所需的信息。如果有人窃取了加密的列表,则不会对其造成任何损害。

当然,对于计算机而言,“从不写下”就意味着它无法解码密码。但是,我们可以通过创建一个实际上不必对其进行解码的系统来解决该问题。取而代之的是,我们获取用户键入的密码,对其进行编码,然后将编码版本与我们存储的编码密码进行比较。如果它们匹配,则用户键入正确的密码。有一些“代码”(加密散列)允许编码但不能解码,因此可以确保其安全性。

有时仍然可以破解散列的密码列表,但这样做的成本高得多-而且重要的是,您可以证明您在保护用户数据方面做出了合理的努力,因此您承担的责任少得多。

#17 楼

散列的技术重要性被高估了。

您需要散列的实际原因是因为其他所有人都在做;它被认为是“最佳实践”。如果您有违规行为,则可以很容易地捍卫与同行一样的职位。即使做对了,做些不同的事情也很难捍卫。因此,即使我认为网站很笨拙,我也始终建议网站遵循标准的哈希方法。

为什么为什么哈希的重要性被高估了呢?让我们首先考虑一个使用非哈希密码的网站。密码将以纯文本格式存储在数据库中。数据库是安全的-在物理安全的服务器上,全盘加密,防火墙,安全管理中,并且受到Web服务器上应用程序逻辑的保护。这些密码基本上是安全的。

我们为什么要完全散列?它提供了最后一道防线。假设所有这些防御措施都受阻。美国国家安全局(NSA)可能使用了零日浏览器漏洞,将恶意软件从sys-admin的工作站上获取,等待他登录数据库,然后从那里进行了远程控制,并提取了所有数据。在这种情况下,NSA将获得所有明文密码。这就是哈希的用处:如果使用哈希,则NSA仅获得哈希,它们必须进行蛮力攻击才能获得密码。

,这就是人们建议哈希的原因。但这有缺陷,其原因有以下三个:


个人数据-该网站保存您的密码,并且还保存个人数据。无论是消息,照片,购物记录。首先使用密码的原因是为了保护您的个人数据。散列可以保护密码,但不能保护您的个人数据。
实时捕获-尽管数据库中仅存储散列,但每次有人登录时,其密码都会发送到Web服务器。 NSA可以静静地坐在服务器上,以捕获每个人的密码。哈希无法防止这种情况发生。
密码重用-避免其他原因导致的密码重用很重要。因此,当LinkedIn被黑客入侵时,无论是否获得我的密码都无关紧要。黑客已经从LinkedIn获得了我的个人数据。如果他们恢复了我的密码,则仅使他们可以访问LinkedIn,并且他们已经拥有了该数据。

鉴于所有这些,密码哈希的好处是微不足道的。我不知道为什么InfoSec社区会继续进行密码哈希处理,首先集中精力防止数据库泄露会更明智。通常,散列的成本相对较低,但是有一个例外:高度迭代的散列。这样的技术成本很高,而收益却很低,因此,该建议被严重误解了。不过,我还是建议人们遵循它,因为它是“最佳实践”。

评论


错,错,错。您拥有密码的原因是为了保护控制数据的能力。数据库转储使攻击者可以访问您现在拥有的信息。纯文本登录凭据使攻击者能够代表您采取行动随意更改数据。仅仅对密码进行散列是不够的,但是还没有听说过两次进行散列(并且NSA嗅探加密流量的能力被大大夸大了)。而且,您可以告诉人们不要重用您想要的所有密码。他们仍然会这样做,如果受到威胁,那仍然是IT的错。

– KeithS
14年7月23日在17:25

@KeithS-您是否有数据来支持您声称大多数违规行为是只读违规行为的说法?您似乎也似乎不了解嗅探加密流量与从受感染主机进行本地嗅探之间的区别。当您的评论以操场上的三个居高临下的词开头时,这并不让我感到惊讶。

–paj28
2014年7月23日在18:42

您自己断言,如果攻击者获得数据库的副本,则无论是否具有您的凭据,他们都将拥有您的个人数据。您似乎忽略了自己的陈述,这意味着他们会将其复制到自己的系统上以进行离线分析。在没有某人的凭据或至少没有一个真正好的主意的情况下,初始数据泄露始终是只读的。如果有足够的时间,您可以嗅探数据流或提起数据存储,然后再对数据进行分析以获取凭证并造成实际损坏。

– KeithS
2014年7月23日在18:49

而且,我确实了解嗅探加密流量和在受感染主机上侦听之间的区别。这就是为什么有关NSA破解加密算法的新闻报道过分夸张的原因。那不是他们在做什么。但是,如果攻击者在您的计算机上具有物理或电子状态,则可能会失败。那天第一天。大多数攻击者没有这种访问权限,因此仅由于一个政府实体有可能看到它们被传输而无法保护存储的密码,就像没有锁您的前门一样,因为存在锁匠。

– KeithS
2014年7月23日在18:55

@KeithS-尽管细节难以掌握,但我知道大多数漏洞是由于数据库或应用服务器受到攻击,并且攻击者具有读/写访问权限。确实发生了诸如某些SQLi之类的只读违规,但这种情况很少见。很多时候,黑客只对读取数据(例如信用卡号)感兴趣,尽管银行系统对此有所不同。无论如何,散开了,我没有打扰,但是我使用高熵站点专用密码(与pw管理器一起使用),所以我不在乎您是否也这样做。

–paj28
2014年7月23日19:01

#18 楼

告诉老板的事情:“这是问题所在。我是一位经验丰富的软件开发人员,我告诉您,在绝对不可原谅的愚蠢程度下,存储未加密的密码是有风险的。即使在未授权的情况下存储未加盐的密码也有风险。我刚刚告诉你,可以命令我存储未加密的密码,我会这样做,但是如果遇到麻烦,我会告诉任何想听的人,这不是因为我不称职,而是因为您命令我这样做,但要遵循认真的建议。在那一点上,我保证您将承担个人责任,并且在您要自己拥有的每一分钱之后都会有律师。

评论


这比直截了当地解决问题的方法更容易受到谴责或开除。这将是一个非常不正常的方法。

– Xander
14年7月18日在23:43

哦,我应该指出,这也是完全错误的。中级经理大约有0%的机会会因泄露而对数据丢失承担个人责任。被解雇了。不太可能,但可能。个人承担经济责任?没有机会。

– Xander
2014年7月18日在23:47

好吧,我为此而被解雇的地方会给我一个相当舒适的解决方案。

– gnasher729
2014年7月19日下午0:06

那完全无关紧要。问题在于如何让非技术老板了解密码哈希的重要性。不是如何让非技术老板解雇你。这是无答案的。

– Xander
2014年7月19日,0:12



@ gnasher729你住在哪里?我从未听说过无法将开发人员因能力解雇的司法管辖区

–emory
14年7月20日在22:23