目前几乎主流的所有网站都使用了https,而且苹果也强制要求开发者使用https要传输数据,我们先不说什么是https,以及为什么需要https,因为任何技术的诞生都是因为现实中遇到的问题,而诞生了这个技术去解决问题,那么,https是为了解决什么问题呢?

http

http是一个非常伟大的协议,几乎承载了整个互联网,它有一个特点,那就是明文传输,如今家用的一个最简单的网络情况往往是,你连着路由器,路由器连着一个猫,然后接入电信运营商,这时候,我们就遇到了两个问题:

  1. 路由器被人动了手脚,跟女神聊天的聊天记录全被别人看到了。
  2. 随便打开一个网页,右下角都会弹出一些诡异的广告。

也许你不知道也不在乎自己的聊天记录被人看到了,那么当你兴致勃勃打开115准备欣赏大片的时候,右下角的广告一定能让你炸毛了,比如下面这样子:

因为http是明文传输,那么想查看别人的信息,也就很容易了,同样,在你返回的http页面插入一个js脚本也是轻而易举,运营商的广告就是这么来的,非常无耻。

http有多不安全?

打开Wireshark随便抓一个包看看

cookie轻松就拿到了,在一些安全性不是很高的网站,有了cookie,你就相当于在短时间内登陆了这个账号,甚至都不用账号密码。

返回的html也完整得能被解析出来,运营商插入一段广告JS还好,在一些安全性不是很高的网站插入监听键盘的脚本,然后就能拿到账号密码了,再通过撞库等方式,你在很多网站或许都不安全了。

解决办法

聪明的你肯定想到了,既然都是明文传输惹得祸,那么我加密就行了呀。的确,加密就行了,但是这么简单的一句话,里面可是包含了无数革命先烈的研究成果,造就了https的由来。

加密方法

既然提到了加密,那么无非就是三种加密方法:

  • 摘要算法。摘要算法严格意义上来说其实也不算是加密方法,最大的特点是不可逆,并且普遍防碰撞性较好。典型的有MD5,sha256等算法。现在有一些彩虹表,存储了大量的摘要信息以及其原文,并且还在不断增加,加上一些暴力破解技术,例如ophcrack等工具,几秒内即可破解windows登陆密码。

  • 对称加密。典型的一个对称加密算法就是凯撒加密,比如原文是:1234,那么约定一个密钥1,加密的时候每一位都+1,所以密文就是:2345,解密的时候很简单,只要每一位都-1即可,运算速度很快,唯一的缺点是,两个人之间的密钥有一个人的泄露了,那么所有的通信都不安全了,并且传递密钥的时候除非当面给,不然都不安全。

  • 非对称加密。最大的特点是通信双方的密钥是不一样的,并且加密者的密钥只能用于加密,无法解密,只有解密者的密钥能解密。典型的一个是RSA,几乎是奠定了现代互联网安全的基石,在HTTPS中被大量采用,其他例如椭圆曲线加密算法(ECC),以及ElGamal等算法。RSA三个字母取自三位发明者的首字母:Ron Rivest、Adi Shamir、Leonard Adleman,由这三位数学家在1977年提出。

对称加密虽然也很有多种方式,但是相对来说还是比较好理解,但是非对称加密用一个密钥加密,却能用另外一个密钥解密,这个可能就不大好理解了,下面跟大家主要聊一聊非对称加密中的RSA具体是如何实现的。

零门槛学习https–(2)https中s的秘密