HTTP学习——————(四)TLS等加密算法

前文学习:

学习来源网站 :
极客时间

TLS

目的:身份验证、保密性、完整性

解决问题:

Record记录协议------对称加密

Handshake握手协议---------1.验证通讯双方身份 2.交换加解密安全套件 3.协商加密参数

有密钥交换算法、身份验证算法、对称加密算法-强度-工作模式、签名hash算法

对称加密算法

原理:对称加密之所以能实现一把密钥既能实现加密也能实现解密,是因为XOR异或运算(不同为1相同为0)这种运算速度很快。

这就要求密钥和明文长度需要一至所以需要使用padding(填充)------Block cipher分组加密:将明文分为多个等长的Block模块,对每 个模块分别加解密,因此最后一个明文Block模块长度不足时,需要填充

填充方式:位填充:以Bit位为单位填充/字节填充:以字节为单位填充

分组工作模式

允许使用同一个分组密码密钥对多于一块的数据进行加密,并且保证其安全性

ECB模式:直接将明文分解为多块,对每个快独立加密------------无法隐藏数据特征

CBC模式:每个明文块与前一个密文进行异或后,再进行加密------------加密过程串行化(多个CPU无法同时进行)

CTR模式:通过递增一个加密计数器已产生连续的密钥流------------不能提供密文消息完整性校验,所以需要利用hash函数去检验完整性

hash函数

不同的输入经过hash函数之后会得到不同的值(这些值都是较短的、很难相同)

所以能利用消息中的MAC(Hash之后的值)去验证完整性------------即传送方通过Hash算法将消息转化为MAC值通过密钥的异或操作生成最终MAC,传送给接收方不仅有消息还有最终MAC值,接收方通过密钥和传输过来的消息进行相同操作对比传输过来的MAC和生成的MAC是否相同即可。

AES加密算法

是比利时密码学所设计,又称Rijndael加密算法

填充算法:PKCS7

常用分组工作模式:GCM

步骤:

把明文按照128bit(16字节)拆分成若干明文块,每个明文块是4*4矩阵

按照选择的填充方式来填充最后一个明文块

每一个明文块利用AED加密器和密钥,加密成密文块

拼接所有的密文块,成为最终的密文结果

十轮加密

分为三类:

1.初始轮

AddRoundKey 轮密钥加

2.普通轮

AddRoundKey 轮密钥加

SubBytes 字节替代

ShiftRows 行移位

MixColumns 列混合

3.最终轮

SubBytes 字节代替

ShiftRows 行移位

AddRoundKey 轮密钥加

详细解读里面的加密

AddRoundKey 步骤:

矩阵中的每一个字节都与该次回合密钥做XOR运算;每个子密钥由密钥生成方案产生

密钥K是经过密钥扩展算法,密钥扩展就是把我们每一轮的密钥所使用的密钥扩展成为下一轮使用的密钥

,比如说先把每4个字节构成一个字,把它构成一个4字节的数组再基于G函数和异或生成下一轮密钥。

SubBytes 步骤

透过一个非线性的替换函数,用查找表的方式把每个字节都替换成对应的字节

避免了简单代数性质的攻击,即提供一个S沙盒,将a每个都通过S找到索引值放入SubBytes后替换

S盒子就是一个二维表格,有行和列

ShiftRows 步骤

把矩阵中的每个横列进行循环式移位

第一行不变,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节

MixColumns 步骤

将左边行举证和列出的另一个矩阵进行相乘的出另一个矩阵

解密反之

非对称加密

每个参与方都有一对密钥

公钥------向对方公开

私钥------仅自己使用

RSA算法公私钥产生------随机选择两个不相等的质数p和q

计算p和q的乘机n(明文小于n)

计算n的欧拉函数v=x(n)

随机选择一个整数k

1<k<v且k与v互为质数

计算k对于v的模反元素d

公钥:(k,n)

私钥:(d,n)

openssl

openssl genrsa -out 导出文件 生成私钥
openssl rsa -in 导出文件 -pubout -out 公钥生成 生成公钥

所以使用公钥去加密、私钥去解密
openssl rsautl -encrypt -in 需要加密文件 -inkey 公钥 -out 到处加密后的文件

私钥解密
openssl rsautl -decrypt -in 加密后的文件 -inkey 私钥 -out 解密后的文件

非对成加密应用:数字签名

基于私钥加密,只能使用公钥解密:起到身份认证的作用

公钥管理:Public Key Infrastructure (PKI)公钥基础设施

由CA数字证书认证机构将用户个人身份与公开密钥关联在一起

公钥数字证书组成:CA信息、公钥用户信息、公钥、权威机构的签字、有效期------因为用户通过私钥加密所以就知道是谁发出来的,一查CA机构就知道了

PKI用户------向CA注册公钥的用户、希望使用已注册用户

签名与验签流程

现将用户个人信息Data利用Hash函数进行加密生成Hash值,再把Hash值利用CA机构的私钥进行加密的到秘文,再把秘文、用户信息、证书、网站的公钥打包为证书

验签过程 把证书提取出两部分,一为原始数据和用户信息,将这个使用hash加密后的到一个值。第二个为证书传过来的已经公钥加密的值,让他使用CA机构的私钥去解密确认他的信用

如果这两个相同那就是可信任网站

DH密钥交换协议

前向保密性:前向保密性保证了过去的通信即使在将来密钥泄露的情况下仍然是安全的。

可以让双方在完全没有任何预先信息的条件下通过不安全信道创建起一个密钥。

首先客户端发送请求给服务端,服务端生成一对密钥1,公钥1返回给客户端,私钥留给自己。然后客户端再生成一对密钥2,私钥2依旧留给自己公钥2给服务端,之后这两种密钥通过通过一种算法组成的就是完全,这就是对称加密算法的交换性。

如果存在中间人伪造攻击就可以使用身份验证去解决这个问题

TLS运作方式

客户端发送请求寻找安全套件,服务端选择安全套件并且发送证书和DH加密后的公钥同时返回给客户端。同时客户端返回一个公钥给服务器,两边同时证书交换

TLS1.3

只需要1次RTT就可以完成了

Session缓存的手段减少RTT次数,因为服务器存储的有sessionID并且没有过期,那么就可以继续使用上次点的加密密钥,这样就可减少传输密钥所需要的RTT时间

问题:多个服务器如何共享SessionID,以及SessionId存放的时间应该是多久呢

解决办法:Session ticket

每台session中不再需要存放session的信息,而是基于独有的密码(整个服务器分享的密码)

客户端基于Session ticker加密后发给服务器集群,服务器是共享这个密码的解密后就获取上次连接后的密钥就可以继续使用上次连接的密钥

重放攻击:中间恶意服务器利用原本正确的报文重新发给对应的服务器,从而改变服务器状态------------解决办法协定过期时间

量子通讯协议

OTP的绝对安全性:

密钥随机生成、密钥的长度大于明文长度、相同的密钥只能使用一次

如何传递密钥------------QKD量子密钥分发

基于量子力学中:任何对量子系统的测量都会对系统产生干扰

QKD:如果有第三方试图窃听密码,则通信双方便会察觉

相关推荐
hmbbcsm17 小时前
python学习之路(十三)[闭包,装饰器,函数式编程,生成器]
学习
Cher ~17 小时前
【协议】ICMP
网络·网络协议
丁丁丁梦涛18 小时前
EMQX配置 ssl 和 wss
网络·网络协议·ssl·emqx·wss
丝斯201118 小时前
AI学习笔记整理(26)—— 计算机视觉之目标追踪‌
人工智能·笔记·学习
m0_6896182819 小时前
会“变形”的软3D电磁结构,让4D电子、柔性机器人迎来新可能
笔记·学习·机器人
繁华似锦respect19 小时前
C++ unordered_map 底层实现与详细使用指南
linux·开发语言·c++·网络协议·设计模式·哈希算法·散列表
柒柒钏19 小时前
PyTorch学习总结(一)
人工智能·pytorch·学习
Wokoo719 小时前
HTTP不同版本核心对比
网络·网络协议·tcp/ip·http·udp·ssl
乾元20 小时前
AI + Jinja2/Ansible:从自然语义到可执行 Playbook 的完整流水线(工程级深度)
运维·网络·人工智能·网络协议·华为·自动化·ansible
ZhengEnCi20 小时前
一次多线程同步问题的排查:从 thread_count 到 thread.join() 的踩坑之旅
python·网络协议·tcp/ip