麻省理工学院的课程“计算机系统安全”。 讲座17:用户认证,第1部分

麻省理工学院。 讲座课程#6.858。 “计算机系统的安全性。” Nikolai Zeldovich,James Mickens。 2014年


计算机系统安全是一门有关开发和实施安全计算机系统的课程。 讲座涵盖了威胁模型,危害安全性的攻击以及基于最新科学研究的安全技术。 主题包括操作系统(OS)安全性,功能,信息流管理,语言安全性,网络协议,硬件安全性和Web应用程序安全性。

第1课:“简介:威胁模型” 第1 部分 / 第2 部分 / 第3部分
第2课:“控制黑客攻击”, 第1 部分 / 第2 部分 / 第3部分
第3讲:“缓冲区溢出:漏洞利用和保护” 第1 部分 / 第2 部分 / 第3部分
讲座4:“特权分离”, 第1 部分 / 第2 部分 / 第3部分
讲座5:“安全系统从何而来?” 第1 部分 / 第2部分
讲座6:“机会” 第1 部分 / 第2 部分 / 第3部分
讲座7:“本地客户端沙箱” 第1 部分 / 第2 部分 / 第3部分
讲座8:“网络安全模型” 第1 部分 / 第2 部分 / 第3部分
讲座9:“ Web应用程序安全性” 第1 部分 / 第2 部分 / 第3部分
讲座10:“符号执行” 第1 部分 / 第2 部分 / 第3部分
第11课:“ Ur / Web编程语言” 第1 部分 / 第2 部分 / 第3部分
讲座12:网络安全性第1 部分 / 第2 部分 / 第3部分
讲座13:“网络协议” 第1 部分 / 第2 部分 / 第3部分
第14课:“ SSL和HTTPS” 第1 部分 / 第2 部分 / 第3部分
第15课:“医疗软件” 第1 部分 / 第2 部分 / 第3部分
第16课:“侧面通道攻击” 第1 部分 / 第2 部分 / 第3部分
讲座17:“用户身份验证” 第1 部分 / 第2 部分 / 第3部分

因此,让我们开始吧。 有了您的回来,我希望所有人的假期都成功。 今天我们将讨论用户身份验证。 因此,讲座的主题是找出用户如何向程序证明其身份? 特别是,本节旨在作为今天的课程,涉及了安全社区存在的基础。 认证比密码还有什么更好的选择吗?



在最高级别上,密码似乎是一个糟糕的主意,因为密码的熵极低并且攻击者很容易解决它们。 我们用来恢复忘记的密码的秘密问题比密码本身的熵甚至更少,这似乎也是一个问题。

更糟糕的是,用户通常会在许多不同的站点上使用相同的密码。 这意味着一个容易猜到的密码中的漏洞危及用户在许多站点上的工作。

我喜欢今天这篇演讲中的以下引文:“在所有其他用户身份验证方法中,密码的持续主导地位是安全性研究的主要障碍。” 因此,安全研究界希望拥有比密码更好的替代方法。 但是,尚不清楚是否确实存在可以完全替换密码,同时更方便,更广泛和更安全的身份验证方案。

今天,我们将考虑三个问题。 首先,我们来看一下现有密码的工作方式。 之后,我们将讨论任何身份验证方案的全局所需密码属性。 最后,我们看一下有关度量或身份验证功能的讲座文章,以及如何比较其他身份验证方案与密码的效率。



那么什么是密码? 密码是用户和服务器的共享机密。 因此,密码方案的原始实现基本上应该只具有一个将用户名映射到其密码的服务器端表。

这是想象一种身份验证方案的实现的最简单方法-用户输入其名称和密码,服务器在此表中查找它们,将密码与名称进行比较,如果一切都匹配,则对用户进行身份验证。 显然,问题在于,如果攻击者闯入服务器,那么他只需查看此表并接管所有密码即可。 因此,这显然是一件坏事。

解决此问题的方法也许是将表存储在服务器中,如下所示:用户名不对应于密码本身,而是密码的哈希。 在这种情况下,用户以纯文本形式输入密码,服务器将检查其哈希码并将其与表中的值进行比较。 该方案的优点在于,这些散列函数的设计方式使得散列难以转换为密码。 如果该表丢失,发生数据泄漏,或者攻击者入侵了服务器并占有了它,那么他将看到随机字母数字字符串而不是文本密码的字符串,这将使他很难恢复其原始图像。

至少从理论上讲,使用散列是一件好事。 但是现在在实践中,攻击者将不必使用蛮力攻击来确定哈希值的反像。



攻击者实际上可以利用实际上密码分布不均的事实。 分布不均,我的意思是……让我们知道所有密码的长度最多为20个字符。 实际上,用户不会使用整个范围,而是喜欢使用123,todd或类似的密码。 但是,经验研究表明这种密码是如何工作的,并且发现大约20%的用户使用5000个最流行的密码。 换句话说,这意味着,如果攻击者拥有这5,000个密码的数据库,则他可以轻松地对它们进行哈希处理,然后在查看被盗的密码表时,只需匹配哈希即可。 因此,从经验上讲,黑客将能够恢复服务器表中大约20%的密码。

雅虎专家发现,密码包含10到20位的熵和10-20位的随机性。 实际上,这还不算什么。 考虑到创建哈希函数的复杂性,现代机器每秒计算数百万个此类哈希。 因此,哈希函数在设计中必须易于计算,以便计算机可以轻松哈希密码。 但是,此事实与密码随机性不足相结合意味着,从原则上讲,此方案并不像看起来那样安全。

您可以尝试利用某种方法使黑客的生活复杂化-这是生成密钥的复杂功能。 在这种情况下,我的意思是将密码哈希用作源数据,服务器将基于此密码生成存储在服务器上的密钥。



这些密钥生成功能的优点在于它们具有可自定义的复杂性,也就是说,您可以旋转某个旋钮,以使此功能变慢或变快,具体取决于您要在过程性能上节省多少。

假设您要生成一个密钥。 一个示例是PBKDF2密钥生成标准,或者可能是BCrypt,您可以从Internet了解更多有关它们的信息。 假设这些密钥生成函数之一需要一秒钟而不是几毫秒的时间来计算。 实际上,这将使攻击者的工作更加困难,因为尝试生成5000个“最高”密码的值将花费更长的时间。

在内部级别,这些密钥生成功能通常通过重复调用哈希,多次访问哈希来工作,因此一切都非常简单。 但是使用耗时的密钥生成过程是否可以解决我们面临的安全性问题? 答案是否定的,因为问题之一是对手可以制造出称为彩虹桌或“彩虹桌”的东西。 彩虹表仅是密码如何与哈希值匹配的映射。 因此,即使系统使用这些昂贵的密钥生成功能之一,攻击者也可以一次计算这些表之一。 这可能有点复杂,因为每个密钥生成功能的处理都是相当缓慢的事情,但是攻击者可以创建该表一次,然后使用它来基于相同的密钥生成功能算法破解所有后续系统。 这些彩虹表就是这样工作的。

我再说一次-为了最大程度地创建彩虹表,经济上的好处是,攻击者可以利用我之前提到的密码分配不均的优势。 因此,攻击者只能为所有可能的密码中的一小部分建立这样的表。

学生:可能“盐腌”会使难度增加很多?

教授:是的,是的。 我们将在几秒钟内进行“盐腌”。 通常,如果您不使用加盐功能,则彩虹表允许攻击者在离线模式下进行一些工作,以计算该表,然后受益于基于完成的工作来计算基本密码的功能。

您可能想改善的下一件事是加盐。 如何运作? 基本原理是在密码生成方法中引入一些其他随机性。 您使用此哈希函数,在其中放入“盐”,然后输入密码,所有这些都存储在服务器上的表中。



什么是盐? 这只是一个长字符串,代表此哈希函数的第一部分。 那么,为什么使用这种方案更好呢? 请注意,“盐”实际上以明文形式存储在服务器端。 您可能会想:好吧,如果此“盐”以明文形式存储在服务器端,并且攻击者可以窃取用户名表作为密码,那么为什么他也不能窃取此“盐”呢? 这样的解决方案有什么用?

学生:因为如果您选择了最常用的密码,则不能只使用一次并找到新用户。
教授:绝对正确。 基本上,盐的作用是防止攻击者创建可用于所有哈希的单个彩虹表。 原则上,您可以考虑使用“盐”来使相同的密码唯一。 实际上,许多系统都使用“加盐”的概念。

实际上,“盐”使得可以向该伪密码添加尽可能多的位,因为位越多越好。 需要做的其他事情是考虑到,每当用户更改密码时,“盐”也必须更改。 因为做出此决定的原因之一是希望多次使用相同密码的用户的懒惰。 更改“盐”将确保即使将一个密码替换为完全相同的密码,存储在密码数据库中的内容实际上也会有所不同。

观众:为什么叫“盐”?

教授:这是一个很好的问题,我不能肯定地回答。 但是,我确信这是有道理的。 为什么将cookie称为cookie? 互联网可能知道原因,但我不知道。

学生:也许是因为“盐”为哈希添加了一些“味道”?

教授:好吧,我很高兴我们正在拍摄这部影片,因为我们显然有机会获得电影奖。 我确信Internet上会有某种答案,所以我稍后会查找。
因此,上述方法非常简单。 我假设用户以某种方式将密码发送到服务器,但未指定如何发生。 那么我们如何传递这些密码?

首先,您可以简单地通过网络以明文形式发送密码。 这很糟糕,因为网络上可能有一个入侵者监视您发送的流量。 他只需分配一个密码即可模拟您。

因此,我们总是从一个稻草人开始,然后再向您展示其他稻草人,这些稻草人当然也存在致命缺陷。 因此,您可能要考虑的第一件事是以明文形式发送密码。 从安全角度来看,最好通过加密连接发送密码,因此我们使用加密。 在通过网络发送密码之前,我们可能会使用某种秘密密钥来转换密码。 因此,在最高级别上,加密似乎总是可以做得更好,就像商标可以保证产品质量一样。

但是问题是,如果您不仔细考虑如何使用加密和哈希,就无法利用您所指望的安全性优势。 例如,如果有人坐在您之间-用户和服务器,这个臭名昭著的攻击者就是“中间人”,他实际上在监视您的流量,却假装自己是服务器。

如果您发送加密的数据而未验证另一端,则可能会遇到问题。 因为客户端只是选择一个随机密钥,然后将其发送到另一端的目的地,该目的地可能是服务器,也可能不是服务器。

实际上,您正在向某人发送某些东西,此人之后将有机会掌握您所有的秘密。

鉴于此,人们可能会认为,发送密码本身而不是密码哈希会更好。 实际上,仅凭此一项并不能给您任何好处,因为无论您发送密码还是密码哈希,此密码哈希都具有与原始密码相同的语义强度,并且如果您未对服务器进行身份验证,将无济于事。

因此,主要要点是,仅添加加密或仅添加哈希并不一定会给您带来任何其他安全益处。 如果客户端无法验证将密码发送给谁的身份,则客户端可能会将密码错误地透露给不希望透露密码的人。

因此,也许比前两个更好的主意是使用所谓的质询/响应协议或质询/响应协议。 这是一个非常简单的呼叫/响应协议的示例。 这里有一个客户端,这里有一个服务器。 客户端告诉服务器:“嗨,我是爱丽丝”,然后服务器用呼叫C回答。然后,客户端将使用服务器发送的此呼叫的哈希值(结合密码)来应答。



服务器知道答案,因此服务器现在可以接受此顺序-客户的响应。 服务器还知道它发送的挑战,并且大概知道密码,因此服务器可以计算接收到的哈希值,并确定它实际上与用户发送的哈希值匹配。

如果我们一秒钟忽略“中间人”的存在,则该协议的一个积极特征是服务器将确保用户确实是Alice,因为只有Alice会知道此密码。 同时,如果Alice将此东西不是发送给服务器,而是发送给假装为服务器的人,则他将不知道密码。 因为攻击者可以使用C,但是他仍然不知道密码,并且为了找出密码,他需要再次反转此哈希函数。 你有什么问题吗

学生:客户端可以将哈希密码发送给服务器,而不是向服务器发送密码并接收哈希服务器调用吗?

教授:也就是说,您问为什么客户端根本不将哈希密码发送给服务器? 有两个原因。 我们将在稍后讨论,它被称为“反锤击保护”,它的创建是为了防御“坏”客户,并不断问:“这是密码还是密码,也许是密码?” 这种身份验证机制简化了服务器和客户端的过程,但是您实质上可以使用JavaScript或类似的方法在客户端上创建哈希。 但基本思想是,您必须以某种方式确保最大的身份验证复杂度,以防止攻击者快速猜测密码。 还有其他问题吗?



学生:我只是想指出,即使客户端进行哈希处理,但是如果有人控制了服务器表并将其用于哈希处理,则他将能够进入网络。

教授:绝对正确。 是的,这取决于谁可以拥有此调用C,这有点危险。因为如果客户端和服务器可以选择此C的值,则这会使客户端组织此类攻击的能力变得复杂。 使用此协议的问题之一是客户端无法随机化此HCC值。 可以想象,如果客户端能够在HCC部分中选择某些C调用,则可以使该协议对于服务器反转更加复杂,但是在这种情况下,客户端和服务器调用会并置。
如果没有其他问题,我们将假定已经完成了从客户端到服务器的密码传输机制的讨论。 , , brute-force, -, .

, , , HCC. , «». « ».

, , , , « ». «» , « » .

Antihammer – , , . , , brute-force , . , Antihammer – , , : « ».



-, . , 10 , : « 10 , ». . «» , TPN . ? – , , , .
, , , - . , , - , , . – . , , .

, — , , — . , , . , . , , .

, , , Dictionary attack, « ». , , Microsoft Telepathwords. . , , , Telepathwords , . , , , , .



«», , , , , «».



«» , . Telepathwords? , , . , .



, . , , . , .

, Telepathwords , , , , , . .
, — , , , .

: , , IP- , Antihammer .

: , . Antihammer IP-, , . , Antihammer , – . , Antihammer , , , , , , .

, . , . , .

: Antihammer? , , ? , , SRP Zero Knowledge Protocol, ZKP, …

: , ?

: ?

:是的,被使用。这些协议提供了更强大的加密保证。在大多数情况下,它们与当前系统不向后兼容,因此在实践中您不会注意到它们的使用频率。但是有一些协议允许服务器完全不知道密码是什么,例如ZKP,这是实际使用的。

27:20分钟

麻省理工学院的课程“计算机系统安全”。 讲座17:用户认证,第2部分


该课程的完整版本可在此处获得

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们, 为我们为您发明的入门级服务器的独特模拟,为Habr用户提供30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

VPS(KVM)E5-2650 v4(6核)10GB DDR4 240GB SSD 1Gbps至12月免费,在六个月内付款时,您可以在此处订购。

戴尔R730xd便宜2倍?在荷兰和美国,我们有2台Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100电视(249美元起) 阅读有关如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?

Source: https://habr.com/ru/post/zh-CN429680/


All Articles