自制漫画图解HTTP与HTTPS

什么是HTTP

此篇文章主要是讲HTTP与HTTPS的缘由以及为什么要有HTTP,如果想要系统的了解HTTP与HTTPS,可以移步至此处。
点击此处

HTTP 简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。

HTTP是一个基于自制漫画图解HTTP与HTTPS

图解HTTP

这里通过BurpSuite来进行抓包测试 通过图片进行更好理解

自制漫画图解HTTP与HTTPS

这里我们要访问baidu,于是使用抓包工具截获了从浏览器端发送出的请求。可以看到做了标记的第一行就是请求行。
请求行的格式简单说下
1.请求行

结构格式
请求的方式GET
请求的资源路径[+?+请求参数]
请求的协议的版本号HTTP/1.1

然后下面就是请求头
2.请求头
键值对形式存在(key: value)不同的键值对,表示不同的含义

·······················
这里POST不再赘述,毕竟此篇 文章重点 不在此~~ ~ :)

为什么要有HTTPS

HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
扯了这么多…HTTPS存在的意义究竟何在呢?
不要急~ 由我讲个故事

很久很久以前(自制漫画图解)

小A 小B 小C是同班同学,小A暗恋着小B,于是有一天小A鼓起勇气通过传小纸条方式向小B传递爱意。自制漫画图解HTTP与HTTPS但是!!!!! 小C在传送途中截获了纸条,并将纸条数据进行篡改继续传送至小B。小B收到了错误的纸条开始反感小A。自制漫画图解HTTP与HTTPS坏透了的小C同学使用小A同学的内容传递纸条给小B同学趁机表白,赢得了小B的好感~

自制漫画图解HTTP与HTTPS

传统HTTP在网络通信中存在的问题

正如上面“漫画”传达的信息,小A所传达的信息很容易就被第三方小C截获并篡改。HTTP也是一样,我们把小A看作浏览器,小B看作网站(服务器),由于http在传输数据信息是都是 明文形式 传输的,因此传输的数据很容易被监听窃取和修改(小C窃取了数据并进行了修改)。由此可得HTTP是一种不安全的传输协议。
明文中包含了密码等重要信息,如图:自制漫画图解HTTP与HTTPS

那么怎么把HTTP变得安全呢?
这里我们引入
对称加密
非对称加密

对称加密

对称加密是通信双方对明文使用一样的密钥进行加密和解密(密钥既能加密文件也能解密文件),假设小A对小纸条进行加密,密文传递到小B,小B使用相同的密钥进行解密得到“今晚月色真美”的明文。自制漫画图解HTTP与HTTPS这里的密钥是通信双方共同制定的,但是!!!!!问题来了,小A和小B之间可以两个人找个没人的角落去制定密钥,那浏览器与网站之间该如何安全地制定密钥而不被他人监听呢?结果无论如何也无法制定,网站与浏览器之间制定密钥第一次必定是以明文形式传输的… 这就很扯淡了,那么到底该如何进行数据安全地传输呢?

下面我来介绍非对称加密

非对称加密

对比对称加密来看,非对称加密的密钥形式是1把私钥与N把公钥
服务器将公钥分发到各个客户端,将私钥保存至本地。公钥用来对文件进行签名,被签名的文件传输到服务器,服务器再用私钥将其解密获得文件本身,这样就能保证文件的安全。自制漫画图解HTTP与HTTPS小A学习了对称加密与非对称加密后,考虑到对称加密依然存在不安全性(被第三方截获密钥),于是使用非对称加密与小B通信。

小A小B人手一把公钥和私钥,将公钥进行交换,小A使用小B的公钥对自己的明文进行加密,小B接收到了密文后再用自己的私钥对密文进行解密。自制漫画图解HTTP与HTTPS自制漫画图解HTTP与HTTPS为了方便理解,我再描述得仔细一点:

见面时,我给你一把开了的🔒,但是不给你🔑,你给我发文件就用我开了的🔒把文件锁住,然后就我自己能用钥匙打开,因为别人也没有我这把锁的钥匙,还有我这把钥匙一直在我这里(没有给别人看过),没有人知道它长啥样,也不可能偷了我的钥匙。

上述的工作机制不是很完善,浏览器怎么才能获得网站的公钥呢?

万一在获取途中公钥被第三方篡改呢?一旦使用了假的公钥对明文进行加密,那么就可以被让人使用假的私钥进行解密,后果不堪设想。

那么CA机构诞生了!

CA机构

CA机构专门用于给各个网站签发数字证书,从而保证浏览器可以安全地获得各个网站的公钥。
自制漫画图解HTTP与HTTPS  CA也有一对自己的公钥和私钥,他将公钥内置在计算机的操作系统中颁布给个人,此时小A向CA申请了一个证书,证书中包含了他个人的公钥和私钥,他通过证书将公钥传输给小B(传递的是证书,证书中包含了他的公钥信息),小B使用CA颁布的公钥对小A发送过来的数据包进行验证,如果通过验证则可获取小A的公钥,进而签名自己的密钥并发送给小A,小A收到后用自己的私钥进行解密即可获得小B的密钥,一旦建立了这样的连接那么后续的通信都是安全的。

由于证书自身的安全性(数字签名),第三方无法进行截获篡改等操作。

公钥加密算法RSA(基于欧拉定理 质因数的分解)

非对称加密算法有很多,其中RSA算法最为经典。RSA算法

由于公钥是对所有人公开的信息,我们需要保证数据被公钥加密之后,不能够被轻易地反推出来,我们需要找到一个算法 —(单向计算容易,逆向反推非常难)

模运算可以做到(模运算又被叫做求余运算)

举个栗子
  3^3 mod 7 = 6 要计算3的3次方对7的取余数很容易,但已知答案是6的情况下, 3^x mod 7 = 6 倒回来求x值就异常的麻烦,我们只能一个数一个数代入计算(x=1,2,3…),但如果这里是对一个很大的数进行取余数,一个数一个数的尝试就很不现实了。这也就是为什么模运算被称为单向函数,而公钥加密正是运用了模运算的特性。

  • m^e mod N = c (加密)
  • c^d mod N = m (解密)
    e 可以看作加密时用的密钥,m 可以看作需要加密的明文,c 可以看作密文。d为另外一个解密的密钥 对比上述,我们想要得到密文c很简单,但想要得到原始数据m却很难。
  • m^ed mod N = m (上述两式合并)
    如何选取e和d变成了最关键的因素
    这里引入欧拉定理(阿巴阿巴阿巴…)
    对于任何一个与 n 互质的正整数 m,取他的φ(n)次方并除以 n 取余数,结果都永远等于1
  • m^φ(n) = 1 (mod n) φ(n) 是 欧拉函数:代表在小于或等于n的正整数中有多少个与n互质的数
  • m^{kφ(n)} * m = 1*m (mod n) 化简得下式
  • m^{kφ(n) + 1} mod n = m (别问这都是咋化简的…我也搞了好久)
  • m^ed mod n = m 再和上面式子对比 得出这里公式的指数部分是相同的
  • 于是得出 ed = kφ(n) + 1
  • d = [kφ(n) + 1] / e 我们可以选取这里的k n e来计算出解密的密钥d

对于任何质数x(一定要为质数 好算),有

  • φ(x) = x -1
  • φ(x*y) = φ(x)*φ(y)
    我们随便选取两个数 x = 17 , y = 23 所以φ(n) = 16 * 22 = 352
  • d = [kφ(n) + 1] / e 代入x,y值,选取一个小点的e值,就取e=3,这里需要保证e与φ(n)互质 ,于是在k等于5的情况下(k的作用是保证求得的d是个整数)求得 d = 587

  在求出私钥d后,我们将不再需要x,y了,算法会将e和n公布作为加密时的公钥,而d会被保存下来,作为解密时的私钥,其他人由于不知道x,y这两个关键的质因数没有办法计算出φ(n),因而无法破解私钥d,公钥加密正是利用了信息不对等,让加密这能够快速构造出φ(n),而其他人却无法在有限的时间内求解。

栗子

  • e = 3(公钥)    d = 587(私钥)   n=391(已知信息)
  • 我们要加密的字符是‘a’ 它对应的ascii码是97   m = 97(明文)
  • 加密  97^3 mod 391 = 79   79就是加密后的密文
  • 解密  79^587 mod 391 = 97 (得到明文97) 如果不知道私钥d基本不可能解出97

推荐一个B站up主:奇乐编程学院
看了他的RSA讲解使我受益不少

如果这篇文章对您有帮助,欢迎点赞支持!您的支持就是作者创作下去的动力!

版权声明:玥玥 发表于 2021-05-31 22:03:10。
转载请注明:自制漫画图解HTTP与HTTPS | 女黑客导航