一、密码学
1.散列
单向的转化为密文的,无法解密恢复的算法,不是严格意义上的加密。
理论上的解密方式:彩虹表碰撞法,通过彩虹表映射原始数据,彩虹表是无数据的字符串对应关系。
2.加密
根据算法计算出一个值,然后可以通过数学方法把明文逆向计算出来的算法。
- 对称加密:加密方法与解密方法是相同的。不安全。AES、EDS、恺撒加密。
- 非对称加密:解密方法与加密方法不同。加密方法可以公开,但解密方法不公开,所以安全。RSA。
3.密钥交换算法
确定2个非常大的素数,这两个数无需保密。两端分别选择一个随机数,对两个大素数进行求模运算,随机数需要保密。两端分别用对方的模求模,此时两端得到的值相同。
二、证书
证书的生成给予加密规则。
三、https
1.SSL/TLS协议
- SSL是安全套接层协议
- TLS是传输层安全协议
https的安全性由ssl协议实现,ssl协议处于应用层和传输层之间。
ssl协议包含4个子协议:‘
- 握手协议
- 密钥配置切换协议
- 应数据协议
- 报警协议
2.https协议握手过程
https协议验证过程一般是客户端验证服务端,服务端不需要验证客户端,一些特殊情况除外。
- 前提:tcp握手已经成功。
- 协商过程:客户端发送ssl的支持性信息,服务端接受并选定这些方法,返回给客户端。
- 服务端向客户端发送证书(选):只第一次发送,因为客户端会保存证书,且证书体量大。
- 服务端向客户端请求客户端证书(选):如果是双向验证。
- 协商结束:服务端通知服务端。
- 客户端向客户端发送证书(选):如果是双向验证。
- 客户端公钥加密:使用服务端提供的的公钥,对客户端公钥加密,发送给服务端。
- 客户端私钥签名(选):双向验证。
- 生成通讯密钥:基于密钥信息生成。
- 客户端准备:客户端通知服务端,将通讯过程切换到加密模式。
- 服务端准备:服务端通知客户端,将通讯过程切换到加密模式。
- 加密数据:双方使用客户端密钥,通过加密算法对数据进行加密。
- 断开通讯:任意一方均可断开ssl连接的消息。
- 1-5,协商过程。
- 6-9,生成密钥信息过程。
- 10-11,准备加密。
- 12-13,加密通讯及结束。
四、http2.0
特点:
- 二进制传输效率高,更紧凑
- 报头压缩,降低开销。
- 默认使用加密模块。
- 多路复用,并行请求。
- 服务端主动推送,降低请求延迟。
多路复用:
- 功能:除了页面骨架(因为包含引用资源路径),将大多数资源分块,每次传送一部分。
- 解决的问题:如果串行传输,那么如果某个css在js传输后才被传输,那么页面会有卡顿。
- 新产生的问题:虽然解决了文件层面上的堵塞,但是可能会产生传输层面上的堵塞(http3.0解决)。
服务器推送:
- 使用场景,轮询场景。
- websocket协议,建立在http协议上,需要进行协议切换,状态码为101。
协议头:
http2.0改变了请求头封装,将请求行替换为伪头。
- :method,相当于method
- :scheme,相当于url
- :authority,相当于host
- :path,url查询部分,?
- :status,相当于status
五、http3.0
http2.0依然是在tcp协议的基础上,对http1.0协议做了有限的修改。http3.0是颠覆性的变化,只留下了http协议的皮。
http3.0基于google开发的,基于udp的全新的应用层协议。http3.0 = udp + quic。
udp协议类似于广播,只管发送不管是否有人收听,http3.0解决了这个问题。它的协议管理接听者是否接收了协议,如果没有接收到就重新发送。
优势:
- 减少握手延迟(创建稳定连接过程)
- 多路复用,因为udp可以多对多传输
- tcp协议如果有包传送出问题,会一直尝试重发;http3.0采用事后补救的方式
- tcp ip固定,如果断网,ip会失效,重新连接要重新连接tcp ip握手;http3.0关注的是服务器发送数据的身份识别码