我经常听到有人说,如果您通过HTTPS登录到网站(银行,GMail等),则可以安全地防止第三者窥探您传输的信息。我一直对如何做到这一点有些困惑。

当然,我(我认为)非常了解加密的概念,并且如果不知道加密密钥,人们将很难破解加密。但是,我的理解是,当建立HTTPS连接时,在建立加密连接之前会在所涉及的各种计算机之间“讨论”加密密钥。选择加密密钥可能涉及很多因素,我知道它与SSL证书有关,该证书可能来自其他服务器。我不知道确切的机制。

但是,在我看来,如果必须先在服务器和客户端之间协商加密密钥,然后才能开始加密过程,那么任何攻击者都可以访问该密钥。网络流量也将能够监视密钥协商,因此将知道用于建立加密的密钥。

很明显,事实并非如此,因为HTTPS毫无价值,并且HTTPS是一种相当有效的安全性已被广泛接受。测量。但是,我不明白为什么它不是真的。简而言之:客户端和服务器如何通过HTTPS建立加密连接而不向任何观察者透露加密密钥?

评论

观看1. SSL的说明-youtube.com/watch?v=a72fHRr6MRU和2.什么是HTTPS? -youtube.com/watch?v=JCvPnwpWVUQ

只有网站的管理员才具有网站的密钥。如果您想到的是ISP运营网站的情况,那么ISP不是中间人,ISP是那个人。

@Johnny我正在考虑ISP某种程度上破坏了证书的情况。 NDF1在某种程度上解释了我的想法。

SSL / TLS如何工作的可能重复项?

#1 楼

这是公钥密码术的魔力。

最容易理解的非对称密钥交换方案是使用RSA的非对称加密。这是一个过分简化的描述:

让n是一个大整数(例如300个数字);选择n使得它是两个相似大小的质数的乘积(我们称它们为p和q)。然后,我们将计算“取模n”的事物:这意味着每当我们将两个整数相加或相乘时,我们就将结果除以n,并保留余数(必须在0和n-1之间)。
给定x,计算x3模n是很容易的:将x乘以x,然后再乘以x,然后除以n并保留余数。每个人都可以做到。另一方面,给定x3模n,恢复x似乎太困难了(最著名的方法对于现有技术而言太昂贵了)-除非您知道p和q,在这种情况下,再次变得容易。但是从n计算p和q似乎也很困难(这是称为整数分解的问题)。

服务器和客户端的操作如下:


服务器有个,知道相应的p和q(它生成了它们)。服务器将n发送给客户端。
客户端选择一个随机x并计算x3模n。
客户端将x3模n发送给服务器。服务器使用其对p和p的知识。 q以恢复x。

那时,客户端和服务器都知道x。但是一个窃听者只看到n和x3模n。他无法根据该信息重新计算p,q和/或x。因此,x是客户端和服务器之间的共享机密。之后,使用x作为密钥,这是非常简单的对称加密。

证书是服务器公用密钥(n)的容器。它用于阻止想要模拟服务器的主动攻击者:此类攻击者拦截通信并发送其值n而不是服务器的n。该证书由证书颁发机构签名,以便客户端可以知道给定的n确实是他要与之交谈的服务器的真实n。数字签名也使用非对称加密,尽管以一种独特的方式(例如,数字签名也使用RSA的变体)。

评论


我真的很喜欢这个答案。关于SSL,技术上是否准确?如果是这样,我很想将其标记为“最有用”。 Gowenfawr的回答也非常有帮助,并且票数很多,但是由于它的细节“错综复杂”,我想知道这个答案是否更准确。

–约书亚汽车
2011年8月16日14:54

我跳过了很多细节,例如“ 3”指数可以是另一个值(传统上为65537),它被视为公钥的一部分。同样,在某些点存在填充(客户端选择的随机值小于x; x是通过应用相对简单的变换得出的)。除此之外,这就是大多数SSL连接的方式(密钥交换算法在开始时就进行了协商,但是在大多数已部署的SSL服务器和客户端中,正如我所描述的,它最终以RSA结尾,而不是Diffie-Hellman。

–托马斯·波宁(Thomas Pornin)
11年8月16日在15:00

一个小小的调整-在SSL​​ / TLS中,此解释的X实际上是“预主密码”,客户端和服务器都使用它来生成“主密码”。然后进行另一种计算以创建“密钥块”,这是一种基于主密钥和一系列随机输入来生成足够的输出以创建所选对称密码所需的对称密钥的方式。这实际上是个小巧的话,因为它是线性的-如果攻击者掌握了管理员掌握的秘密和清晰的hello消息,那么他就可以收听。

–bethlakshmi
2011年8月16日16:10

给定x求模n和p和q的立方模,如何计算x?

–贾斯汀
2012-02-24 9:46



@Justin:简短版本:计算d,即3模phi(n)的倒数,其中phi(n)=(p-1)(q-1)。然后,对x 3 取模n进行模幂运算,以d为指数。 RSA的Wikipedia页面上有相当明确的解释。

–托马斯·波宁(Thomas Pornin)
2012-2-24在12:22

#2 楼

这是一个真正简化的版本:


当客户端和服务器协商HTTPS时,服务器将其
公钥发送给客户端。
客户端对会话进行加密。
它要使用
服务器的公共密钥使用的加密密钥,并将加密的数据发送到服务器。
服务器使用其私有密钥解密该会话加密密钥,然后开始使用它。
会话现在受到保护,因为只有客户端和服务器才能知道会话加密密钥。它从未以明文形式传输,或者攻击者无法以任何方式解密,因此只有他们知道。

任何人都可以看到公钥,但是这不允许他们解密公钥。 “嘿,让我们从现在开始使用此加密”数据包,该数据包已用该公钥加密。因为只有服务器具有该私钥,所以只有服务器才能解密该私钥。攻击者可以尝试伪造包含加密密钥的响应,但是如果服务器使用该密钥来建立会话,则真正的客户端将不会说话,因为这不是真正的客户端设置的密钥。

这是非对称密钥加密的全部魔力。令人着迷的东西。

P.S. “真正简化”的意思是“使细节杂乱无章,以便于理解”。 Wikipedia的“传输层安全性”在技术细节上给出了更正确的答案,但我的目标是“易于理解”。

评论


在这一点上,必须要提到的是,公钥是由受信任的机构签名的,这意味着即使攻击者是中间人,他也不能假装自己是服务器来试图诱骗客户端加密共享而是使用攻击者的公共密钥。

– BlueRaja-Danny Pflughoeft
2011年8月15日在22:07



如果我们不发明非对称加密会怎样?

–路易斯·瑞斯(Louis Rhys)
11年8月16日在1:50

没有非对称加密,互联网就不会存在。您不能将产品出售给具有对称加密的随机客户端系统。互联网就像电视一样,您可以在其中查看信息电视节目,但必须通过电话致电进行购买。非对称加密确实非常吸引人

– gowenfawr
11年8月16日在3:44

中提琴?你不是说沃拉吗? :)

–汤姆
2011年8月16日下午5:45

对不起,中提琴对我来说真是个反身的玩笑,我没有考虑就使用了它,当然,在这里没有人会想到这个玩笑。因此,是的,voila是预期的语义内容,而中提琴不是拼写错误,而是一个晦涩的句法笑话。对于那个很抱歉。

– gowenfawr
11年8月16日在12:22

#3 楼

其他答案也不错,但这是一个物理上的类比,可能更容易理解:

想象一下一个锁箱,这种锁箱带有金属盖,您可以将其挂锁固定。想象一下,放置挂锁的环足够大,足以容纳两个挂锁。为了安全地进行交换,而无需共享挂锁密钥,可以将消息发送给另一方,您可以


将“东西”放入框中,然后用挂锁将其锁定。
发送锁
他们也将他们的挂锁也放在环上(这样就可以锁上两个锁),然后将双锁盒退还给您
您取下挂锁,然后将现在将单锁的盒子锁在他们身上
他们将自己的锁移开,然后打开盒子。

通过加密,锁和钥匙是数学的,但是大致的概念是这样的。

评论


那也是我要解释的方式。唯一要添加的是,这种复杂的来回操作仅需要一次,因为您所传递的东西是一个共享密钥。这样,在会话结束之前,两端都可以打开密码箱并将其放入其中。每个会话都有一个新的挂锁和一对钥匙,因此您只需在会话结束时将它们扔掉即可。 * 8')

– Mark Booth
11年8月16日在13:03

像@Mark Booth所说的Kinda,盒子内是带有一组钥匙的第三个挂锁,它将在会议期间用于以后的所有交流。

–斯科特·里皮(Scott Rippey)
11年8月16日在20:11

我一直很喜欢这种解释。比一堆数学方程式容易掌握得多。

– k1DBLITZ
2014年6月30日19:05

我喜欢这种图像:)但是,不对称加密是否会更像这样:服务器发送一个空盒子,而他的打开的挂锁挂锁没有钥匙,客户端放一个带有一个钥匙的挂锁(保留第二个钥匙),挂锁服务器的挂锁,送盒子走了吗?

– Tanius
2015年2月2日,凌晨2:40

@tanius,不完全是。客户端获取服务器的打开挂锁,生成一个密码锁代码,它将其写下并放入框中,然后使用服务器的挂锁将框锁定。服务器使用相应的钥匙打开自己的挂锁,然后写下组合代码以在会话期间使用。从那时起,他们只使用密码锁。 (对称密钥)。实际上,我可能会说的是同一件事,不确定。

– Arlen Beiler
17年8月17日在0:12



#4 楼

已经提供的许多答案都忽略了ISP或NSA的拦截功能。看一下AT&T数据中心的641A室。估计在整个美国安装了10到20个这样的设施。还可以看一下威尔希尔一号大楼,其中260个ISP的连接汇聚成一栋大楼。该位置是拦截设施的主要位置。

事实是ISP(或NSA在ISP中安装的设备)可以拦截和MITM攻击SSL连接,他们可以做到这一点


您的Web浏览器或操作系统中已安装了500多个受信任的证书。这意味着您暗中信任其证书已被此证书签名的任何网站。
NSA通过秘密FISA法院命令可以强制在美国运营的任何证书颁发机构提供其根证书。法院命令中包含一个特殊的不公开条款,如果CA对此大声疾呼,将迫使其闭嘴。他们甚至可能不需要这样做,只需说服浏览器供应商接受一个NSA拥有的证书作为浏览器中的受信任证书。
您的Web浏览器接受此虚假证书为可信证书,并且您将对称加密密钥传达给交换,以便将其交换回保存副本的NSA / ISP。并将相同的密钥传递到网站上。
使用受损的对称密钥实时解密与网站的会话。
解密后的数据通过光纤传输到Fort Meade地下室的NSA总部和数据中心。这将扫描数据以查找可能指示各种威胁的数百或数千个关键字。任何关键字都被标记为红色,以供分析人员查看和优先考虑进一步的操作(如果有)。最终数据将发送到美国国家安全局的数据存储设施之一。新的存储设施是犹他州的数据中心,该中心很可能已经在线,因为原定于上个月底上线。 >

评论


他们不只是强迫网站运营商交出自己的证书,这会使整个事情变得完全透明。如果NSA必须为每个网站创建新证书,则跟踪证书指纹将揭示窃听行为。例如,如果我的公司的SSL密钥指纹在我上班访问网站和在家中访问网站之间有所不同,那么我将知道证书已被破坏。同样,如果他们只是利用我的家庭互联网连接,我可以查找在家庭网络和另一个网络之间不同的指纹更改。

–约翰尼
13-10-22在23:16

@Johnny:这可能会起作用,但是用户懒惰经常会检查他们访问的每个安全站点的证书签名。此外,某些HTTPS站点按计划(例如每6个月)更改证书,这使得很难确定证书签名更改是否确实有效。

–那斯鲁斯
13-10-23在1:01

@Johnny互联网上很大一部分也一直在使用Root CA透明互换性bug作为功能。使用“证书巡逻”之类的工具在现代互联网中导航是“合法”交换和交换机的噩梦,间谍机构的交换机可能会藏在其中,就像大海捞针一样。因此,我放弃了使用Cert Patorl。基本的v3 X.509标准已损坏。

–LateralFractal
13-10-23在1:27

@suriv,这不是一个可疑的断言,这是事实。请查看《国家安全信函》或《外国情报监视法》。

– NDF1
15-10-17在2:02



自己做一些研究。另请参阅密钥公开法,它们可以迫使公司或个人通过法院命令移交SSL密钥。 FISA处理秘密法院命令,因此,如果它与国家安全有关,那么它永远不会成为现实。如果出于国家安全的考虑,迫使CA移交其根签名证书,则将这样做。当然,美国的CA都容易受到此威胁。

– NDF1
2015年10月17日,下午4:01

#5 楼

简而言之:发生两种不同的加密:首先,存在公钥/私钥加密。客户端使用服务器的公共密钥(包含在证书中)对某些信息进行加密,只有服务器才能使用其私钥对这些信息进行解密。
基于此信息,派生出一个会话密钥,该密钥仅是已知的到服务器和客户端。此会话密钥用于加密该数据。

这是一个非常粗糙的摘要。

还有很多事情可以防止各种攻击:


例如,客户端尝试验证服务器的证书,以确保他不在与中间的人交谈。
会话密钥有不同的算法和密钥长度必须协商的

只使用一次的随机数可用于防止重放攻击。
Diffie-Hellman密钥交换协议可用于生成无法重建的会话密钥由记录了加密数据传输并在以后可以访问服务器私钥的人使用(完全向前保密)。
...


#6 楼

我认为已经有了六个答案,gowenfawr的解释最好。首先请阅读,因为这只是一个附录。

关于Diffie-Hellman

有几个答案提到了Diffie-Helman交流。这些在少数交易所中实现。 DH交换由服务器的密钥签名,以防止MITM攻击。由于该密钥未加密为公用密钥,因此无法通过针对密钥交换的捕获流量使用捕获的私钥来恢复它。这就是“完美前卫保密”的想法。 OpenSSL根据配置提供“常规”和DH密钥交换。

在MITM /签名链上,

公钥和DH交换都会阻止有人观察连接和导出密钥。这是基于一堆数学问题的,您可以研究/查看托马斯的答案以理解。两者的问题都是MITM攻击。对于公钥加密,可以通过事先知道公钥(即使已观察到交换)或通过证书链来解决。示例:我信任Alice,并且Alice在Bob的密钥上签名,证明它确实是他的。也称为Google,是通过...错误的Google认证的。看来他们在Firefox中是自己的CA。因此,random_bank's_ss​​l由Verisign签名,并且我的浏览器信任Verisign仅颁发合法证书。在这种情况下,可能会发生MITM攻击。

#7 楼

SSL依赖于公钥加密。参与SSL的服务器具有一个密钥对,其中包含公共和私有组件。

想象一下,您有一个带有两个钥匙的特殊密码箱:一个钥匙可以锁定盒子,而另一个可以解锁盒子。如果您的朋友想向您发送秘密消息,那么他只需要锁定密钥,您就可以将解锁密钥保密。

实际上,您可以向所有人免费提供锁定密钥。您决定在前门廊上保留特殊密码箱和锁定钥匙的副本,以便任何人都可以拥有副本。很快,您全镇的每个人都可以通过邮件向您发送秘密消息。您已将锁定密钥公开了。您镇上的邮局局长对您和爱丽丝非常怀疑,但是-即使他也可以访问您的公用密钥-他也无法打开密码箱。只有您(私人解锁密钥的唯一所有者)才能打开Alice锁定的盒子。

因此,您的ISP(在这里是邮局局长)可以访问您的公共密钥,但是不能访问帮助他们解密使用您的公共密钥加密的邮件。您的公共密钥仅加密,只有私有密钥解密。因此,您的私钥永远不会离开您的财产,因此除了您之外没有其他人可以访问它,因此没有人可以窃听您的消息。邮件管理员会丢弃爱丽丝的盒子,并向您发送一条新消息,假装自己是爱丽丝),但这应该可以说明为什么您的ISP无法简单地解密您的消息。

评论


我有个问题。我们使用一种算法加密数据,并使用与算法相反的方法解密数据。因此,如果我们拥有原始数据和公钥,为什么我们不能使用与加密算法相反的方法来解密加密数据?

– Amirreza Nasiri
2014年5月14日19:18

@AmirrezaNasiri公钥系统基于数学上的问题,这些问题很难逆向执行。请参阅离散对数问题中的一个这样的问题:对于a = b ^ k mod q,如果您知道b,k和q,则计算a很简单。但是,即使您知道a,b和q,也很难找到k。维基百科文章有一个很好的例子和解释。

–仿制药
2014年5月14日19:44



#8 楼

查看Diffie Hellman:http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

出于性能方面的考虑,该连接使用对称密钥加密。但是对称密钥是在连接建立期间生成的,并且从来没有明确交换过,而是使用非对称密码技术。

非对称密码技术是一种需要两个密钥的技术:公开密钥和私有密钥。用公钥加密的内容必须用私钥解密,反之亦然。因此,两台计算机都可以基于彼此的公共密钥交换数据。但是只有相应私钥的所有者才能解密它。私有密钥永远不会交换,因此,即使您嗅探了所有内容,也无法解密任何内容。这些技术是可扩展的,因此用于交换对称密码的密钥而不是数据本身。

评论


虽然可以使用Diffie Hellman并具有前向保密性的良好属性,但出于性能原因,通常不使用它。

–亨德里克·布鲁默曼
11年8月15日在19:44

@Hederik:但这是最简单的加密协议,它使攻击者只能听取通信通道中的信息。

–休伯特·卡里奥(Hubert Kario)
11年8月16日在10:05



#9 楼

传输层安全性(现在称为安全套接字层)涉及通过不安全的通信通道(例如Internet)安全地交换加密密钥的方法。

是的,这意味着ISP可以看到密钥交换信息来回传递,但是一旦建立了安全连接,信息仍然不足以读取消息流。

一个非常奇怪的概念,这是一项相当新的工作。最常见的示例称为Diffie-Hellman密钥交换,仅在1970年代发明。完美地说明了这个概念。仔细研究一下,甚至自己尝试一下,您会发现对手无法从可公开查看的信息中获取私钥。



#10 楼

如果我戴上黑帽(不是黑帽,实际上这顶黑帽也可以):

ISP可以对您的任何HTTP进行中间人攻击下载应用程序或补丁程序,从而直接更新浏览器信任链,或使用自毁木马间接更新浏览器信任链。

Microsoft仅要求对驱动程序进行代码签名;默认情况下,不强制执行应用程序的数字签名和与应用程序等效的可执行数据。大多数消费者操作系统并不能因此而变得更好,仅仅是因为强制性应用程序代码签名(和身份验证)的成本足以大大缩小其软件生态系统的规模即可。除非有必要,否则请使用Microsoft Answers。他们训练有素的猴子显然正在使用损坏的打字机。

评论


那里的建议不错。 :D

– Wolfer
13-10-23在12:50

MITM修补程序是一个很好的方法……但是在我看来,ISP必须为此而损害更新服务器的私钥(我认为这正在侵蚀NSA / TLA领域)。您有什么突发事件吗?

– scuzzy-delta
13-10-23在21:23

@ scuzzy-delta大型组织的更新服务器很可能以补丁程序检查的方式进行了数字签名(例如,暴雪游戏);但主要的是,大多数初始下载并不限于HTTPS访问通道,并且如果存在自动化,大多数更新也不会由补丁程序自动化进行签名或检查。从理论上讲,我们全新的OEM计算机应带有由独立于OEM的审核员验证的根CA的ROM介质,然后使用HTTPS或经过签名的等效方法下载所有内容。

–LateralFractal
13-10-23在23:07

#11 楼

关键是不对称或公用密钥加密。这意味着您有两个密钥,公共密钥和私有密钥,以及一个易于在一个方向上计算但很难在另一个方向上计算的数学函数。公共密钥,我们可以使用公共密钥轻松地加密我们的东西,但是只有使用该对中的另一个密钥(在这种情况下为私有密钥),您才能轻松对其进行解密。

#12 楼

EcoParty Conference宣布了一个名为BEAST的工具,据称可以通过观察来解密SSL3 / TLS1.0流量及更低版本的流量。可以肯定,在接下来的几天里,我们将听到更多有关此内容,解决方法和限制的信息。

随着发现更多信息,下面的部分将进行更新

此黑客假定攻击者可以某种方式查看您的网络流量;通过间谍软件或通过网络捕获。管理不善的计算机和Wifi用户最有可能成为常见的嫌疑人……尽管不限于该用例。列出到RC4,并且不支持较早的组合。另一个缓解措施是增加身份验证令牌的长度,这会减慢攻击速度。修改Siteminder和ASP.net成员身份验证Cookie的配置可能对此有所帮助。

请注意,去年宣布“对ASP.NET进行填充攻击”的同一个人暴露了此漏洞。这个老问题仅通过打开每个IIS Web服务器就使其处于危险之中,这似乎比这种攻击更为严重。


请分享您发现的任何链接,或在此处确认这些易受攻击的情形或缓解措施。从目前的情况来看,其中一些只是推测,未经加密专家审查。

评论


BEAST似乎仅是针对HTTPS的攻击,但是此缺陷似乎在SSL3 / TLS1.0中。使用SSL / TLS 1.0的其他应用程序是否容易受到类似的非JavaScript攻击?

– Stefan Lasiewski
2011-09-21 23:35

#13 楼

不,由于您正在建立的连接是您与目标站点(例如Amazon)之间的连接,因此他们不会持有该密钥,因此ISP将不知道该密钥。

关于SSL / TLS的工作原理在这里得到解答。

#14 楼

这里有很多很好的答案,尤其是那些谈论超出执行DH或ECDH的问题的答案(例如,客户端损坏/证书安装/证书劫持等)。

如果您忽略了本地计算机本身,只是担心MITM-您需要DH / ECDH和SSL固定。 SSL固定变得越来越普遍,但是今天仍然不普遍。这意味着只要您的根信任链中具有有效的SSL,您的ISP就可以简单地假装为您的服务器。 SSL固定可确保您所连接的服务器使用的SSL证书是您要获取的服务器的证书。黑客-这还不够。如果您希望阻止ISP浏览数据-这可能就足够了。

评论


虽然这通常对于TLS可能是有用的建议,但我不确定它是否真的可以回答此处提出的特定问题。

–安德斯
17年3月28日在13:33

它比上面只说“ because”(因为“魔术”)更好,因为我没有费心去复制所有其他答案,而是用现代SSL / TLS中实际上很重要的内容添加到它们中,这很奇怪连接。这就是为什么我特别指出许多答案是好的,并涵盖了您无法解密数据的一些原因-然后我指出它们是不完整的。尽管给出了最高评分的答案,但我仍可以通过ECDH / DH来与您联系-因为该答案不完整。没有固定和安全的本地信任存储,您就没有安全感。

–WTH
17年7月7日在18:10

我并不是说您提供的信息是错误的还是错误的,不是。我是说这没有回答问题。问题:“观察建立的HTTPS连接的人们怎么可能不知道如何解密它?”答:“您需要DH / ECDH和SSL固定。”那不是比赛。

–安德斯
17年7月7日在21:55

当然,您肯定会否决了以下答案:“很多已经提供的答案都忽略了ISP的拦截能力” 。” “如果我戴黑帽(不是戴黑帽……实际上也戴黑帽”)“关键之处在于非对称或公共密钥加密”“ EcoParty会议宣布了一个名为BEAST的工具”,因为它们都不存在也可以回答问题,这没什么大不了的,只是显得有些琐碎,这不是DV的目的。

–WTH
17年7月9日在14:43