从俄罗斯网站被撤销HTTPS证书说起——互联网信任简史
俄罗斯出兵乌克兰以后,受到了西方的全面制裁,范围之广超出想象。在网络方面,就包括暂停网站HTTPS证书的更新。对于这个问题,在知乎上和网友短暂地讨论了几句,发现曾经自认为对这方面了解很细致,但实际上还不够扎实。因此梳理一下。
互联网——基于信任的理想主义实验
在维基百科上这么介绍互联网:
互联网(英语:Internet)是指20世纪末期兴起电脑网络与电脑网络之间所串连成的庞大网络系统。这些网络以一些标准的网络协议相连。它是由从地方到全球范围内几百万个私人、学术界、企业和政府的网络所构成,通过电子、无线和光纤网络技术等等一系列广泛的技术联系在一起。互联网承载范围广泛的信息资源和服务,比方说相互关系的超文本文件,还有万维网(WWW)的应用、电子邮件、通话,以及文件共享服务。
而在互联网中,最为广泛使用的,就是基于HTTP协议的万维网,我们用浏览器每天在访问的网页背后的东西,维基百科这么介绍:
万维网(英语:World Wide Web)亦作WWW、Web、全球广域网,是一个透过互联网访问的,由许多互相链接的超文本组成的信息系统[1]。英国科学家蒂姆·伯纳斯-李于1989年发明了万维网。
万维网的发明者是位圣人,基于美好的天下大同的愿景,创建了一个能够连接全世界每一个人的伟大造物。最早的互联网精神是自由、平等、共享,早期互联网的大神都充满了奉献精神,热切地通过网络向全世界发出自己的光和热。对比当下网络逐渐走向封闭,贴吧、微信公众号、抖音等圈地自萌,人为制造信息封闭与隔离,大型媒体利用互联网垄断地位大行欺骗与诱导,甚至掀起颜色革命,互联网的精神已经死了,那种热切的、由衷的,人人为我我为人人的乌托邦,早已在这个流行着偏见与恶意的世界中,被染上了乱七八糟的色彩。
不过这是题外话。
早期的互联网使用的场景非常简单,不过是一些新闻和图片发布之类的,因此整个网络充满了乐观自治的信任氛围,一切通信都是使用明文,就是未经加密的文本。是为HTTP协议。简单地描述HTTP时代整个浏览器与服务器通信的过程,省略其底层庞杂的细节的话,大约是这样:
假如我们作为一个用户,想要去访问某个域名,比如www.baidu.com,整个过程用形象的语言描述,就有点像我们用快递买东西:
- 用户说:我要买东西(从浏览器获取百度中的某个图片);
- 浏览器将你的需求告诉信使(路由器);
- 路由器(往往需要很多次路由,经过N个路由器)将你的信息发到商店(信息传递到百度的服务器);
- 商店通知小二备货(百度的服务器对你的请求进行处理);
- 商店将货物交给信使(用户所需要的信息交还给路由器);
- 路由器将货物再传给浏览器,用户收到货物。
这个过程的每一个步骤拆开,都可以单独写一本书,凝结了无数前人的智慧,闪烁着耀眼的光辉,其中细节之庞杂,设计之巧妙,实现之困难,远远超越了包括我在内的大部分普通人所能理解的范畴。
因为早期互联网本身就是基于天下大同的理念所设计,而且应用范围非常狭窄,所以很多环节是基于”盲目”的信任去做的。比如说,信任发送数据的人是善意的、信任过程中的每一个信使都是善意的、信任服务器也是善意的。因此,从技术实现细节上来讲,很多重要的实现根本没有设置任何防备。比如,IP包的头部from IP和to IP可以任意填写,也可以被任意一个信使所改变,比如说,当时的信息传输完全使用明文,不做任何加密,于是任意一跳的中间信使都可以看到完整的用户与服务器通信的过程,既可以看到用户告诉服务器:我想要百度上的A图片,也可以读到服务器返回给用的A图片到底是什么样子;比如说,从域名解析到ip地址这一步也是明文通信,并且没有做任何身份鉴定,于是大规模的DNS污染,即将域名解析到错误服务器上是一件轻而易举的事情。
总之,互联网早期的盲目信任机制,在随后成了互联网发展的重要阻碍之一。即:中间传递消息的任何一个信使都能读取、并篡改通信内容,于是互联网就不能被用于任何重要的通信,比如:通过网络支付、通过网络发送办公邮件。所谓读取,就是信使可以看到我想干什么(获取百度上的A图片),也可以看到服务器怎么回应了我(A图片),所谓篡改,就是信使改变了我的原意,告诉服务器我想要获取B图片,或者将服务器的回应改为C图片,因为明文传输,所以通信双方:用户和服务器,完全不知道自己的请求在传输过程中已经被篡改。
这样的恶意信使所做的事情,用专业的名词就是:中间人攻击。
而互联网的大规模应用,出现了越来越多的场景,在很多场景下,信息被监听和篡改是完全不可接受的。因此,互联网进入了加密传输的时代。
对称加密与不对称加密——潜藏于加密算法中的信任问题
既然整个过程是明文传输的,因此容易被监听和篡改,那么思路显然就是对发出去的数据进行加密,用户的数据经过加密后交给路由,就像把请求放到密码箱里,然后再交给信使传给收信人。这样,中间人就无法监听数据了,而因为密钥只有通信双方持有,那么中间人也就无法篡改信息了,因为它无法使用相同的密钥加密自己的恶意信息。
这种通信双方使用同一个密码加密的方式,被称为对称加密。对称加密是好的,并且性能很好,一次加解密不会对 通信双方的设备造成很大的压力,但这同时引出了一个问题:
密钥怎么传递?
密钥的传递只有两种可能的方式:1. 物理途径,我肉身去百度获取一个密钥,以后所有的通信使用这个密钥。这样信使的确无法获取我们的密钥,但显然基本不具备可行性;(但该途径确实是有用武之地的,比如:作为公司的开发,我们登陆公司服务器的密钥就是在公司的安全网络中设置好的)2. 网络途径。即我们首先和服务器通过网络商议好一个密钥,之后使用这个密钥进行加密。于是,密钥的传输就成了一个重要的问题,如果密钥需要信使传输、而且必须是明文传输,但如果你使用信使明文传输了密钥,那后面再用这一把密钥你加密自己的信息、然后把消息给这个信使去传递,那加密不就毫无作用了吗?
为了解决密钥的传递问题,密码学家研究出了新的加密方式,称为非对称加密。
在这种加密方式下,加密使用的密码和解密所使用的密码不是同一个,而是一对,这一对密码中,使用A密码加密的数据,A密码自己无法解开,必须使用B密码解开,使用B密码加密的数据,也只能使用A密码解开。服务器这边生成A、B密码以后,藏好B密码,之后将A密码公开到自己的网站上。只要用户在于服务器通信之前,首先去服务器获取A密码,然后将实际通信密码使用A密码加密以后,再传给服务器。那么,即使A密码是公开的,但因为非对称加密的精巧设计,A密码加密的数据,A密码无法解开,因此持有公开的A密码的恶意信使也无法解析你的数据,因此无法破解和伪造你的数据,这样,密钥交换这一步就变得更加安全。而只要密钥保证是不为中间人所知,那么接下来的通信也就认为是安全的。
这里的安全的含义,是指:通信双方能确认正在与自己的通信的人,的确是自己想要通信的人。从本质上讲,这里的安全实际上是一个身份认证问题。至于我确实想要通信的这个对象会不会使用恶意使用我们的通信内容,并不在这里讨论的”安全”范围之内。
在非对称机密中,由服务器公开的这个A密码,称为公钥,而由服务器私密保管,不得泄露的B密码,则称为私钥。可见,只要私钥是绝对安全的,那么任何拿到A密码加密后的数据的第三方,都无法获取A密码加密的实际内容,这样,就保证了真正数据传输中、使用的密码是安全的。加入了非对称加密算法后的网络通信过程大概是这样的:
- 用户通过网络,请求服务器的公钥;
- 用户通过公钥加密接下来通信用的密码X;
- 服务器收到该密码,使用私钥解密;
- 接下来,服务器和用户的通信使用密码X加密通信。
但是,如果继续深入去思考这件事情,则仍然没有彻底解决密钥传输的安全问题,这里一个巨大的漏洞在于,获取公钥的过程,仍然需要通过网络传输。也就是说,获取公钥这部分通信,仍然需要”信使”来完成。而如果信使是恶意的,那么信使完全可以生成一个”信使版”公钥私钥对,而将用户获取公钥的请求完全截留后,不发给服务器,而是将自己的公钥返回给用户,等待用户使用信使的公钥加密密码X、并将加密后数据传给信使后,信使可以使用自己的私钥解密,拿到X,然后再与服务器进行通信,使用服务器的公钥加密密码X,这样,服务器将会以为该信使是与自己真实通信的用户,于是,它就会将数据返回给信使,这样,用户虽然以为自己在和服务器通信,但实际上用户在和信使通信,而服务器以为在和用户通信,实际上也在和信使通信,密码X完全暴露在信使面前,于是,中间人攻击再次得逞。
我们可以看到,造成这种形式”中间人攻击“的主要原因,是我们无法信任公钥来自于我们真正想通信的服务器,如果能解决这个信任问题,即如果有办法检查用户拿到的公钥是否来自于服务器,完全杜绝中间人使用中间人公钥欺骗用户,那么整个通信过程中唯一的漏洞将会被堵塞。
于是,接下来的问题来到了整个网络加密通信安全的最后一步:公钥的认证。
中间人攻击与证书——基于信任的信任危机解法
于是为了认证公钥的确属于我们想通信的服务器,出现了一类专门的机构,负责给公钥签名。相当于这类机构利用自己的权威性来保证公钥的确属于我们想通信的服务器。它宣称,对于同一个域名,我只会给一个主体的公钥签名。以百度为例,权威签名机构保证,只会给百度公司的www.baidu.com的公钥签名,这样,只要你拿到的www.baidu.com的公钥的上有我的签名,那么这个公钥一定来自于百度公司,而绝不可能是中间人,因为除了百度公司,任意一个其他主体都无法从我这里获取签名。下面是网站上真实的百度公钥签名,可见,baidu.com这个域名由一个CA机构进行了签名。


这类专门的机构,就称为CA中心,维基百科上这么解释CA中心。
CA中心,又称CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA中心对公钥的签名,我们就称为证书。证书上记载的大概这样一段话:
我,权威CA机构XXX,认证,该公钥的确来自于
www.baidu.com,基于我的权威性,我绝不会给除百度公司以外的其他主体颁发该认证,因此,下面你看到的这个公钥一定是百度公司的。因此,你可以信任你正在和百度公司的服务器进行通信。而绝非其他第三人。现在,这是你想要的百度公司的公钥,就在这个证书的下半部分,请自取。
于是,整个基于互联网的加密通信过程变成了这样。
- 用户去网络上请求服务器的公钥;
- 实际上,用户将会获取一个由CA中心签名后的证书,证书中包含公钥。
- 用户收到公钥,并校验这个公钥上的签名,看是否是权威CA所颁发的证书。如果是,则信任是真正的公钥,如果否,则认为公钥是伪造的,从而放弃此次通信。
- 用户通过公钥加密接下来通信用的密码X;
- 服务器收到该密码,使用私钥解密;
- 接下来,服务器和用户的通信使用密码X加密通信。
到这一步,中间人攻击似乎再也没办法了。但实际并非如此。我们考虑签名的验证过程。就是我拿到一个签字后,我凭什么认证这个签字是权威CA机构,而非一个恶意机构随意模仿的签名呢?我是不认识这个签名的,那如何认证这个签名呢?于是,对于公钥的信任问题,就转移到了对于签名上。因为假如我无法信任从网络上获取的公钥来自于百度公司,那我其实也无法信任从网络上获取的签名的确属于CA机构。于是,信任问题虽然转移,但并未小时。也就是说,单纯通过网络通信的话,我们就不可能绝对避免信任问题。
所以,终极的解决方案来了,这个方案就是:签名不通过网络认证,权威CA机构的签名直接内置在浏览器中。由浏览器的研发商,比如chrome浏览器就是谷歌,由谷歌保证,它内置的签名的确是权威CA机构的,至于它如何保证,可能是通过肉身直接去物理获取CA的签字,总之,浏览器将权威CA机构的所有签名预装在自己的浏览器中,这样,当用户从网络上获取一个由CA签名的公钥以后,认证签名的过程完全在本地完成,这样,就彻底解决了证书的信任问题。
而CA机构的认证相对严格,根据维基百科翻译过来的内容:
https://en.wikipedia.org/wiki/Certificate_authority#Providers
在全球范围内,证书颁发机构的业务是分散的,国家或地区的供应商主导着他们的国内市场。这是因为数字证书的许多用途(例如具有法律约束力的数字签名)都与当地法律、法规和证书颁发机构的认证方案相关联。
然而,全球受信任的TLS/SSL 服务器证书市场主要由少数跨国公司持有。由于技术要求,这个市场有很大的进入壁垒。[6]虽然没有法律要求,但新的供应商可以选择接受年度安全审计(例如北美的证书颁发机构的WebTrust [7]和欧洲的ETSI [8]),以作为受信任的根被包含在 Web 浏览器或操作系统。
截至 2020 年 8 月 24 日,147 个根证书,代表 52 个组织,在Mozilla Firefox网络浏览器中受信任,[9] 168 个根证书,代表 60 个组织,受macOS信任,[10]和 255 个根证书,代表 101 个组织, 受Microsoft Windows信任。[11] 从 Android 4.2 (Jelly Bean) 开始,Android 目前包含 100 多个 CA,每个版本都会更新。
于是,基于对CA机构的信任,和对于浏览器的信任,整个互联网通信的身份信任问题解决了。但信任问题的解决,仍然基于新的信任。
假如:浏览器内置了一个流氓CA机构的签名,而这个流氓CA机构给一个中间人也颁发了www.baidu.com的证书,那么,当这个中间人劫持我和百度的通信时,我就会信任这个证书,从而认为我是在与真正的百度通信。
又假如,当一个权威CA机构变得不可信,它给除了真正的百度公司以外的其他人也颁发了签名的公钥证书,那么,当这个人成为中间人时,我的通信也将不再安全。
圣人的造物沦为恶魔的工具——信任的堕落
当CA机构在俄乌冲突中,作为制裁的手段撤销俄罗斯的证书认证时,届时所有俄罗斯的网站都将被浏览器标记为不安全,这虽然并非绝对的不安全,只是用户的浏览器不能分辨拿到的公钥到底是不是自己真正想要通信的服务期所发行的公钥。为此,俄罗斯也发布了自己的浏览器、内置了自己的证书颁发机构的签名来解决这个问题。
但基于脆弱的信任之上的互联网安全,将从此时此刻开始,逐渐变成一个笑话。当CA机构基于政治的判断,作为一种制裁手段去撤销自己的认证时,我们即无法确认,CA机构不会基于政治的原因,违背承诺将证书颁发给一个他们在政治上认为”正义”的机构,以使这些”正义”的机构具有中间人攻击”邪恶”机构的能力。届时,假如我们的通信会经过由这些”正义机构”所控制的路由(信使)时,我们就无法信任我们正在与我们真正想沟通的服务器进行沟通,因为我们信任的证书,实际上已经由CA证书颁发给了”中间人”。
虽然,整个互联网的安全手段不可能这么脆弱,并且实际上真的利用上述的漏洞,需要相当复杂的条件,其中最重要的一点,是我们的信使本身并不安全可信,即:我们使用的路由器的确可能将我们的信息转发给”中间人”,而这件事情本身就不那么容易发生,特别是在当今的中国,核心网络交换机几乎已经由华为包圆,信使本身的安全性其实相当值得信赖,那么中间人也就无从插脚了。
但无论如何,当圣人的造物沦为恶魔的工具,当承载了互联网所有信任的CA机构也有可能基于”政治”的判断违背承诺,继互联网公开共享的精神沦丧以后,最基本的信任关系也将岌岌可危,这无论如何,也是理想主义者的丧钟。这一个诞生于天下大同愿景的美好事物,将越来越封闭、越来越碎片化。
自从联盟和部落并肩作战,共同抵抗燃烧军团的入侵,已经过去了七十年。尽管成功地挽救了艾泽拉斯大陆,部落和联盟之间脆弱的信任却早已荡然无存。
如今,震天的战鼓再一次响起。
0 条评论