前言
通过前面的总结 《对称加密、非对称加密、公钥、私钥究竟是个啥?》,我们基本了解了对称加密和非对称加密的概念和特点,考虑到效率和安全性,一般可以使用非对称加密来传递对称加密所需密钥,之后就采取对称加密通信了,这样可以大大提高数据发送的的效率。
其实密码技术除了应用在加密领域外还有很多其他的用途,比如验证数据的完整性、用来做认证、提供一些不可否认的证据等,这些应用也常常出现在我们的日常生活中,比如很多官方网站在提供软件下载链接的同时,还附带一个验证的字符串,实际上很多就是md5码或者hash码,这些就是供下载的人来验证完整性的,防止被其他人篡改。
我们下载完软件之后,使用工具来将软件转化成一串字符,听起来很神奇,实际上就是计算一下软件的md5码或hash码,然后和网站上的标注的信息进行对比,如果一致那么软件就是完整的。我曾经就遇到过一次,当时做的游戏发包,同事给我发了测试包,安装之后无法正常使用,检查包的大小与发送端的一样,后来使用检测工具计算发现md5是不同的,原因可能是发送包的时候电脑卡死过,导致最后发来数据包与原始数据产生了差异。
但是你有没有想过,这个软件虽然是完整的,通过md5计算发现也没有被其他人篡改,那么怎么证明你下载的网站真的是官网呢?万一官网也是伪造的呢?如果有人伪造了官网,又将上面的软件进行修改重新计算md5然后上传到自己伪造的界面上,你要怎么来识别呢?
可能有的人会想到看网址啊,taobao.com
就一定是淘宝的网站吗?这个域名是可以伪造的,所以要验证网站上东西是真的,那么首先要验证你看到的网站是真的,这就涉及到了认证身份,接下来可以简单了解下什么是认证。
认证
其实密钥不仅仅可以用来加密,还可以用来认证的,那么什么是认证?认证是一种信用保证形式,表示对一种事物或一个人的信任和认可,比如常见的毕业证书、结婚证书都是对人一段经历或一种关系的证明和认可。最简单的网站登录是基于密码的验证,这实际上就是利用对称加密的认证。
网站保存了你的用户信息和密码,下次再登录的时候输入密码后,网站会用你输入的密码和之前保存的密码进行对比,如果密码相同则认证成功,成功的证明了“你”就是“你”,而非对称加密同样可以用来做认证。
在非对称加密的实现中,私钥是只有自己保存的,而私钥加密的内容可以使用公钥解开,如果一份加密数据可以用 Jerry
的公钥解开,那么我们就可以认为这份数据是 Jerry
发出的,因为只有 Jerry
自己有私钥,所以可以通过这种方式来进行认证。
而在网络上想要认证一个网站的身份,确认它不是钓鱼网站,第一个映入脑海中的就是 https
,一般提到 https
都会说它是加密的、安全的,是 http
的升级版,但是 https
的安全不仅仅体现在加密上,还有它的认证功能,可以使你免受钓鱼网站的侵害。
HTTPS
简单了解下 HTTPS
,一般来说网络模型常说的有OSI七层模型和五层模型,HTTPS
的诞生并没有增加模型的层数,HTTP
是建立在 TCP
基础上的应用层协议,而 HTTPS
是在 TCP
和 HTTP
之间的会话层中加了一些特殊操作,使原来明文传输的内容,在会话层这一步进行加密,并且可以对数据来源进行认证。
提到 HTTPS
就不得不说 SSL
和 TSL
, SSL
是应用在 HTTP
上的一个协议加密层,最初是由网络大佬网景公司(Netscape)研发,后来升级为 TSL
,简单的理解就是 HTTP + SSL/TSL = HTTPS
。
随着网络安全逐渐得到大家的认识,一些主流网站基本都都将访问方式改成了 https
,支持 https
的网站在浏览器的地址栏中通常有一把小锁,点开会提醒你访问的是安全的连接,如果你访问的连接疑似被人篡改或者仿冒,那么这把小锁会被斜线划掉,提醒你网站危险请谨慎访问。
那么 https
是怎么判断出来哪些网站是安全的,哪些网站是仿冒的呢?毕竟有些网址都很像甚至可以做成一模一样的,这就用到了非对称加密的认证功能,当我用 A
的公钥可以解密一段消息,那么就可以证明消息是 A
发来的,https
的认证功能正是利用了这个特点。
当访问一个网站的时候,网站先给我发一个用它的私钥加密的数据,然后我用它的公钥来解密,如果解密成功就说明我访问的网站是正常的,可以继续访问,如果解密失败则很有可能是虚假或者仿冒的网站,应该仔细辨别一下了。
这里会有一个问题,我怎么才能得到网站的公钥呢?之前说过密钥配送问题,直接由网站发给我肯定不行,中间可能被篡改,也有可能一个虚假网站把它自己的公钥发给我了,我用假的公钥验证对应的假的私钥也是成功的,这样就起不到认证的效果了,必须给他找个证明人才行,这就要用到我们下面要说的证书了。
证书
证书是用来证明一件事情或东西的,刚才说网站的公钥不能它自己来发,这样不能证明它的身份,我们可以找一个权威的机构给它认证一下,我每次从权威机构获得网站的证书,从这个证书中取得公钥,如果用这个公钥可以解开网站私钥加密的内容,那么就可以认证它的身份了。
这里提到的证书就是网站所有者找权威机构申请的,权威机构把网站信息、有效时期、对应的公钥、序列号消息等数据存储到证书中,当我们需要能某个网站的公钥时,去证书中取就可以了,这里的证书有点像营业执照了,由权威机构发布,用来证明你的身份。
但是权威机构的证书怎么发给我呢?我们有理由认为网络是不安全的,那证书如果直接通过网络发给我同样是不安全的,还有一个问题就是网站虽然找了一个权威机构,但是我认为它不够权威怎么办?这时这个权威机构可以找一个更权威的机构证明自己,让更权威的机构给自己颁发一个证书,这样就形成了证书链。
就像现实生活中我要找个人来干活,因为工期比较紧所以找的人要求踏实,必须能老老实实把活干完,不能半路撂挑子,张三过来应聘,正在我犹豫时,走过来一个叫李四的人说张三没问题,但是我还是不能确定,因为李四我也不熟悉,然后李四居然把我爸叫来了,我爸和我说李四这个人特别诚实,从来不说谎,这时一条证书链就形成了,李四为张三证明,我爸为李四证明,那谁来证明我爸说的是真的呢?不需要的,我无条件相信他。
这在计算机的证书链中就是根证书,根证书不需要别人来证明,你只能无条件相信它,它是整个信息链的源头,通常内置在操作系统或者浏览器中,关于根证书还要一些好玩的故事和一些变态的应用,下次再说吧,准备睡觉了~
总结
- 密码技术除了应用在加密领域,还可以用来验证数据的完整性、用来做认证、提供一些不可否认的证据
HTTPS
不仅可以用来加密通信内容,还可以用来验证网站的真实性- 正规的支持
HTTPS
的网站在访问时会地址栏会有一把安全的小锁头,但是有些不出现小锁头的网站并不一定都是非法的 HTTP
网站是没有小锁头的,因为有些数据不需要加密,毕竟绝大多数的HTTPS
证书是要钱的,有很多网站由于经费问题还未投身于HTTPS
的怀抱- 根证书通常内置的操作系统或者浏览器中,是证书链的源头,你必须无条件的信任他。
当我们拼劲全力到达自己的终点时,可能会看到同行的人正在你的终点线前伸伸懒腰准备出发,然后一骑绝尘消失在你震惊的目光中,但是这不是我们放弃努力的理由,因为如果你不努力,你甚至连他们的背影也看不到~
2020-6-14 23:20:21