麻省理工学院的课程“计算机系统安全”。 讲座14:“ SSL和HTTPS”,第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部分

现在,我们将研究如何使用加密协议来保护Internet上的网络连接以及它们通常如何与网络因素相互作用。 在进行详细介绍之前,我想提醒您,星期三将进行一次考试,但不对这些观众进行测试,而是在常规演讲时间在3楼的Walker进行。



因此,今天我们将讨论Internet如何使用加密技术来保护网络连接,并考虑两个密切相关的主题。

第一个是如何在比上一堂课所保​​护的Kerberos系统更大的程度上对连接进行加密安全保护。 第二个问题是如何将在网络级别提供的这种加密保护集成到整个应用程序中,以及Web浏览器如何保证使用加密协议提供的保护。 这些主题密切相关,因此事实证明,网络通信的保护非常容易提供,因为加密始终有效。 但是,将其集成到浏览器中要比围绕密码学构建系统要困难得多。

在深入讨论之前,我想提醒您我们将使用的密码学基本元素。

在上一次有关Kerberos的讲座中,我们使用了对称密码学,或者
加密和解密。 它的含义是您有一个密钥K和两个功能。 因此,您可以获取一些数据,我们称其为P,这是可以应用加密功能的纯文本,这是某些密钥K的功能。并且,如果您对此纯文本进行加密,您将获得加密的文本C。类似地,有一个使用相同密钥K的解密函数D,因此,加密文本C将转换为纯文本P。这就是建立Kerberos的基元。



但是事实证明,还有其他一些对今天的讨论有用的原语,称为非对称加密和解密。 这里的想法是为加密和解密使用不同的密钥。 让我们看看为什么它如此有用。

这里有一个函数E,该函数可以使用某个公钥pk对一组消息P进行加密,从而获得加密的文本C.要使用函数D对其进行解密,您只需要指定相应的秘密密钥sk并获取源文本P即可。



非对称加密的便利之处在于,您可以在Internet上发布公共密钥,而其他人可以为您加密消息,但是您需要一个秘密密钥来解密他们的消息。 今天,我们将看到协议中如何使用它。 实际上,您通常会以略有不同的方式使用公钥加密。 例如,您可能需要对消息进行签名或验证,而不是对消息进行加密和解密。

事实证明,在实现级别上,这些是相关的操作,但是在API应用程序级别上,它们可能看起来有些不同。 例如,您可以使用密钥sk对消息M签名并获得一些签名S。然后可以使用相应的公钥pk验证此消息,结果得到一个逻辑标记,告诉您签名S对消息M是否正确。



这是提供这些功能的一些相对直观的保证。 例如,如果您收到了此签名并且已正确验证,则意味着它必须由具有正确密钥的人生成。 清楚吗?

然后,让我们尝试找出如何比Kerberos更大范围地保护网络连接。 在Kerberos中,我们有一个相当简单的模型,其中所有用户和服务器都使用与KDC对象的某种连接,该对象具有庞大的用户,服务及其密钥表。 每当用户想要与某个服务器进行对话时,他都必须要求KDC根据该巨型表创建他需要的票证。



因此,这似乎是一个相当简单的模型。 那么,为什么我们还需要其他东西呢? 为什么Kerberos不足以处理站点? 互联网为什么不只使用Kerberos来保护所有连接?

您回答正确-因为唯一的KDC应该信任所有人,所以这很糟糕。 如果您认为某台机器绝对安全,则可能会遇到问题。

也许MIT的人愿意信任由KDC管理的本地网络上的某个人,而不是Internet上的每个人。

第二个学生的答案也是正确的-很难管理这么多的键。 实际上,构建一个可以为全世界所有人管理十亿个或一百亿个密钥的KDC可能非常困难。 在整个Internet上使用Kerberos的另一个复杂之处在于,所有用户都必须具有密钥,或者必须由KDC知道。 如果您在Kerberos数据库中没有帐户,您甚至无法在我们的研究所使用Kerberos连接到某些服务器。 虽然对于整个Internet来说,可以很合理地期望当您使用计算机时,它根本不知道您是谁,但是它将允许您访问受密码保护的亚马逊网站。



??

您还希望从加密协议中获得其他一些好处,我们将研究它们在SSL中的显示方式。 但是关键思想是,该解决方案对于Kerberos,SSL或TLS都是相同的。 当您提到我们在讲义材料中阅读的原始Kerberos协议是很久以前开发的时,您是对的。 如果我们想将它们用于现代Internet,那么它们将需要进行一些更改。 您还有其他想法吗,为什么不使用Kerberos?

没错,在恢复访问权限时(可能在注册新用户时)存在扩展问题,因为您必须亲自去某个客户办公室并在那里获得一个帐户。 还有什么

学生: Kerberos服务器必须始终在线。

教授:是的,这是另一个问题。 我们列出了某种管理问题,但是在协议级别,KDC应该始终在线,因为它实际上是您与服务之间的任何交互的中介。 这意味着每次您访问新网站时,都需要与KDC进行交谈。 首先,这将是性能方面的瓶颈。 与其他类型的可伸缩性一样,此原理将导致性能的可伸缩性,而上面列出的原理仅会导致管理的可伸缩性。



那么,我们如何使用这些原理解决这个问题呢? 这个想法是使用密钥加密来停止使用KDC。

首先,让我们先了解一下另一端的一些公钥,是否可以建立安全连接。 然后,我们将看到如何将KDC公共密钥版本连接到此协议中各方的身份验证。 如果您不想使用KDC,则可以对公钥加密执行以下操作:以某种方式在连接的另一端找到伙伴的公钥。 因此,在Kerberos中,如果我想连接到文件服务器,我只是从某个地方知道文件服务器的公钥。 作为一个新生,我得到一份打印输出,说文件服务器的公钥是这样的,我可以用它来连接。

您可以简单地加密您要连接的文件服务器的公钥消息。 但是事实证明,实际上,使用这些公钥进行的这些操作非常慢。 它们比对称加密密钥慢几个数量级。 因此在实践中,您通常总是希望放弃使用公共加密。

因此,典型的协议可能看起来像这样。 您拥有A和B,他们想进行通信,而A知道公钥B。与此同时,A生成某种会话密钥S,只需为其选择一个随机数。 然后,A将要发送S会话密钥B,因此它看起来像Kerberos。 我们将为B加密会话密钥S。

如果您还记得在Kerberos中这样做的话,我们需要一个KDC,因为A不知道B的密钥或不允许他知道它,因为这是只有B可以知道的秘密,但是有了公共密钥,您就可以做到这一点。立即,只需使用此Bspk公共密钥加密密钥,然后发送消息B。现在B可以解密此消息并说:我需要使用此密钥。 现在,我们有了一个通信通道,其中所有消息都仅使用此密钥S加密。



因此,此协议中有一些有用的功能。 首先,我们摆脱了使KDC联机并为我们生成会话密钥的需要。 如果连接的一方生成了该信息,然后在不使用KDC的情况下将其加密为另一端,则我们可以简单地确保所传输信息的机密性。

另一个好处是,只有B可以读取从A发送到B的消息,因为只有B可以解密此消息。 因此,B必须具有对应的私钥S。

学生:谁给这个密钥-用户或服务器有关系吗?

教授:也许吧。 我认为这取决于您希望此协议提供的属性。 因此,如果A犯了错误或使用了错误的随机性,发送回数据的服务器会认为:“哦,现在这是A会看到的唯一数据。” 这可能并不完全正确,所以您应该考虑一下。 该协议还有其他一些问题。

学生:攻击者可以使用密钥发送重复的消息吗?

教授:是的,问题可能出在我可以再次发送这些消息,看起来好像是A在再次发送消息B,依此类推。

因此,通常解决此问题的方法是连接的两端都涉及生成S,这可以确保我们使用的密钥是“新的”。 因为在此图中B实际上并不生成任何东西,所以这些协议消息每次看起来都相同。

通常,一侧选择一个随机数(例如S),然后另一侧B选择一个随机数,通常称为随机数。 有两个数字和一个并非仅由一方单独选择的密钥,这是双方都选择进行联合交互的哈希。 除了哈希之外,您还可以使用Diffie-Hellman协议,该协议在上一堂课中进行了介绍,因此您首先获得了隐私。 这比简单地对选择了这两个方面的两个随机数进行哈希处理更复杂。 但是,您将获得原始共享密钥之类的良好属性,从而消除了在传输加密数据时传输解密密钥的需要。

因此,可以如下避免重复攻击。 B生成随机数,然后设置实际密钥S',该密钥用于用该随机数对密钥S进行哈希处理。 而且,当然,B必须将随机数发回给A,以找出当他们俩都同意密钥时会发生什么。



另一个问题是,没有真正的身份验证A。A知道谁是B,或者至少知道谁可以解密数据。 但是B不知道谁在另一边,无论是冒充对方还是其他对手。 如何在公钥世界中解决这个问题?

有几种方法可以做到这一点。 一种可能是首先对此消息进行签名,因为我们拥有良好的签名原则。 因此,我们也许可以使用一个秘密密钥对此进行签名。 该签名仅提供签名,但大概是您对其进行分配,并且您还提供了此消息。

然后,B必须知道A是公钥才能验证签名。 但是,如果B知道A是公钥,则B可以确定A是发送此消息的人。



您可以做的另一件事是信任加密。 因此,也许B可以将随机数发送回A,并使用A提供的公钥对其进行加密。然后只有A可以解密随机数并生成最终会话密钥S'。 因此,您可以采取一些技巧。 当今,这就是客户端证书在Internet浏览器中的工作方式。

因此,A具有一个秘密密钥,因此,当您收到个人MIT证书时,您的浏览器会创建一个长期存在的秘密密钥并为其接收证书。 并且,每当您向Web服务器发送请求时,就证明您知道用户证书的密钥,然后为其余的连接设置密钥S。

这些问题很容易在协议级别解决。 但是,上述所有情况的基础是,各方都知道彼此的公钥。 您如何找到某人的公钥? 假设我要连接到一个网站,我有一个要连接的URL或一个主机名,如何找出与之匹配的公钥?

同样,如果我连接到MIT服务器以查看成绩,服务器如何知道我的公共密钥是什么,以便将其与其他MIT学生的公共密钥区分开?

这是KDC解决的主要问题。 实际上,KDC为我们解决了两个问题。 首先,他生成了一条消息(Ebspk(S)),创建了会话密钥并为服务器加密了该密钥。 现在,我们通过创建公钥加密来解决此问题。 但是,我们还需要将主字符串名称与之前提供给我们的Kerberos加密密钥进行匹配。

HTTPS领域中有针对此类情况的TLC协议。 其含义是,我们将继续依赖过程的某些方面来支持这些巨大的表,这些表将过程参与者的名称映射到加密密钥。 该计划是我们将拥有一个称为证书颁发机构的机构,在有关网络安全的各种文献中都用字母CA表示。 该CA在逻辑上还支持该表,在该表的一部分中显示所有参与者的名称,在另一部分中显示相应的公用密钥。 该中心与Kerberos之间的主要区别在于,对于所有事务,此CA不必都处于联机状态。
在Kerberos中,为了与某人连接或找到某人的密钥,您需要与KDC交谈。 相反,在CA领域,他们这样做。



如果您在此处具有某种名称,在表的另一部分中具有相应的密钥,则证书颁发机构将简单地对消息表示该表中存在某些行进行签名。 因此,认证中心将必须在这里拥有自己的私钥和公钥。 他将使用秘密密钥为您可以依赖的系统上的其他用户查找消息。

因此,如果您在CA数据库中有“名称+密钥”记录,则CA将创建一条消息,表明该名称与该公钥匹配,并使用其CA私钥对该消息签名。



这使您可以执行与Kerberos非常相似的操作,但是与此同时,我们无需为所有事务在线查找CA。 而且,它实际上将具有更大的可扩展性。 这就是通常所说的证书。 对于客户端或使用此系统的任何其他人,从一个来源提供的证书不劣于任何其他来源的证书,从而确保了可伸缩性。 它由证书颁发机构的密钥签名。 因此,您无需实际联系证书颁发机构或此处列出的任何其他方即可验证其真实性。

它就是这样。 您要与之交谈的服务器存储了它最初从证书颁发机构收到的证书。 每次您连接到它时,服务器都会告诉您:“好,这是我的证书。 它是由该CA签署的。 您可以验证签名,只需确保它是我的公钥和名字即可。”

另一方面,客户端证书也会发生相同的情况。 当用户连接到Web服务器时,其客户证书表明您的公共密钥与最初在浏览器中生成的密钥相匹配。 因此,当连接到服务器时,您将出示由MIT证书颁发机构签名的证书,该证书指示您的用户名与此公用密钥相对应。 , , , , Athena.

: , ?

: , , – , ? - , , , , . - , . . , VeriSign. US Postal Service CA, , . , CA , KDC.

, , Kerberos. , , KDC. , KDC, , . , , . CA , KDS.

: ?

: , . , , KDC, . , . , , . , , , . Kerberos, . Kerberos , . , , . , , . , .

, . , , CA - , . , amazon.com, amazon.com. CA, . , , , .



. , CA , , , , - , . , , . - , amazon.com, , - .

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

, . -, CRL, ertificate Revocation List. . , - , . , , , : «, , , - . , ».

, , , CRL, , web-, CRL. , - , , . , , , , , .

, . , . , . , . , CRL, - .

, ? , . , CRL .

, , , Kerberos, KDC. CA , . , « SSL », OCSP. CA KDC. , , , , , , - . , OCSP, : «, . , »? , CRL . , , . , , .

麻省理工学院“计算机系统安全”课程 26:30分钟

讲座14:“ SSL和HTTPS”,第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-CN427783/


All Articles