1.写在前面
前面的博客我们介绍了对应的网络的一些协议,比如说HTTP1协议,还有就是WebSocket协议,同时还HTTP2协议,今天我们要介绍对应的TLS/SSL协议。
2.TLS/SSL协议的工作原理
TLS设计目的
TLS/SSL发展
TLS协议
Record记录协议
Handshake握手协议
- 验证通讯双方的身份
- 交换加解密的安全套件
- 协商加密参数
TLS安全密码套件解读
3.对称加密的工作原理:XOR与填充
对称加密
AES对称加密在网络中的应用
对称加密与XOR异或运算
填充padding
- Block cipher 分组加密:将明文分成多个等长的Block模块,对每个模块分别加解密
- 目的:当最后一个明文Block模块涨肚不足时,需要填充
- 填充方法
-
位填充:以bit位为单位来填充 -
-
字节填充:以字节为单位为填充 -
4.对称加密的工作原理:工作模式
分组工作模式 block cipher mode of operation
- 允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。
ECB(Electronic codebook)模式
- 直接将明文分解为多个块,对每个块独立加密
- 问题:无法隐藏数据特征
CBC(Cipher-block chaining)模式
- 每个明文块先与前一个密文块进行异或后,再进行加密
- 问题:加密过程串行化
CTR(Counter)模式
- 通过递增一个加密计数器以产生连续的密钥流
- 问题:不能提供密文消息完整性校验
验证完整性:hash函数
验证完整性:MAC(Message Authentication Code)
GCM
- Galois/Counter Mode
- CTR + GMAC
5.详解AES对称加密算法
AES(Advanced Encryption Standard)加密算法
- 为比利时密码学家Joan Daemen 和Vincent Rijmen所设计,又称Rijndael加密算法
- 常用填充算法:PKCS7
- 常用分组工作模式:GCM
AES的三种密钥长度
- AES分组长度是128位(16字节)
AES的加密步骤
- 把明文按照128bit(16字节)拆分成若干个明文块,每个明文块是4*4矩阵
- 按照选择的填充方式来填充最后一个明文块
- 每一个明文块利用AES加密器和密钥,加密成密文块
- 拼接所有的密文块,成为最终的密文结果
AES加密流程
- C=E(K,P),E 为每一轮算法,每轮密钥皆不同
- 普通轮
- AddRoundKey轮密钥加
- SubBytes字节替代
- ShiftRows行移位
- MixColumns列混合
- 最终轮
- SubBytes字节替代
- ShiftRows行移位
- AddRoundKey轮密钥加
AddRoundKey步骤
- 矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
密钥扩展
- 函数g步骤
- a.字循环:左移1个字节
- b.使用S盒字节代换
- c.同轮常量RC[j]进行异或,其中j表示轮数
SubBytes步骤
- 通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节
- 提供非线性变换能力,避免简单代数性质的攻击
S盒
ShiftRows步骤
将矩阵中每个横列进行循环式移位。
- 第一行不变
- 第二行循环左移1个字节
- 第三行循环左移2个字节
- 第四行循环左移3个字节
MixColumns步骤
6.非对称密码与RSA算法
非对称密码
- 每个参与方都有一对密钥
- 公钥 向对方公开
- 私钥 仅自己使用
非对称加解密的过程
- 加密 使用对方的公钥加密消息
- 解密 使用自己的私钥解密消息
RSA算法
- 1977年由罗纳德李维斯特(Ron Rivest)阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)一起提出,因此名为RSA算法
RSA算法中的公私钥的产生
-
随机选择两个不相等的质数p和q -
计算p和q的乘积n(明文小于n) -
计算n的欧拉函数v -
随机选择一个整数k 1<k<v,且k与v互质 -
计算k对于v的模反元素d -
公钥(k,n) -
私钥(d,n)
RSA算法加解密流程
- 加密:c=m^k(mod n) m是明文,c是密文
- 解密:m=c^d(mod n)
- 举例:对明文数字123加解密
- 公钥(3,319) 加密 123^mod319=140 对140密文用私钥(187,319)解密 140^187mod 319 =123
- 私钥(187,319) 加密 123^187mod=161 公钥(3,319)解密 161^3mod319=123
7.基于openssl实战验证RSA
使用OpenSSL基于RSA算法生成公私钥
-
生成私钥 openssl genrsa -out private.pem -
从私钥中提取出公钥 openssl rsa -in private.pem -pubout -out public.pem -
查看ASN.1格式的私钥 openssl an1parse -i -in private.pem -
查看ASN.1格式的公钥 openssl asn1parse -i -in public.pem -
openssl asn1parse -i -in public.pem -strparse 19
使用RSA公私钥加解密
- 加密文件 openssl rsautl -encrypt -in hello.txt -inkey public.pem -pubin -out hello.en
- 解密文件 openssl rsautl -decrypt -in hello.en -inkey private.pem -out hello.de
8.非对称密码应用:PKI证书体系
非对称密码应用:数字签名
- 基于私钥加密,只能使用公钥解密:起到身份认证的使用
- 公钥的管理:Public Key Infrastructure(PKI)公钥基础设施
- 由 Certificate Authority(CA)数字证书认证机构将用户个人身份与公开密钥关联在一起
- 公钥数字证书组成
- CA 信息、公钥用户信息、公钥、权威机构的签字、有效期
- PKI 用户
**签发证书流程 **
**签名与验签流程 **
**证书信任链 **
**PKI 公钥基础设施 **
**证书类型 **
**验证证书链 **
9.非对称密码应用:DH 密钥交换协议
RSA 密钥交换
-
由客户端生成对称加密的密钥 -
问题:没有前向保密性
**DH 密钥交换 **
DH 密钥交换协议举例一
- g、p、A、B 公开
- a,b 保密
- 生成共同密钥 K
DH 密钥交换协议举例二
-
协定使用 p=23 以及 base g=5. -
爱丽丝选择一个秘密整数 a=6, 计算A = ga mod p 并发送给鲍伯。
-
鲍伯选择一个秘密整数 b=15, 计算B = gb mod p 并发送给爱丽丝。
-
爱丽丝计算 s = B a mod p
-
鲍伯计算 s = A b mod p
DH 密钥交换协议的问题
- 中间人伪造攻击
- 向 Alice 假装自己是 Bob,进行一次 DH 密钥交换
- 向 Bob 假装自己是 Alice,进行一次 DH 密钥交换
- 解决中间人伪造攻击
10.ECC 椭圆曲线的原理
**ECC椭圆曲线的定义 **
-
椭圆曲线的表达式:
y
2
=
x
3
+
a
x
+
b
,
4
a
3
+
27
b
2
!
=
0
y^2=x^3+ax+b,4a^3+27b^2!=0
y2=x3+ax+b,4a3+27b2!=0 -
始终关于 X 轴对称(y 平方的存在)
**ECC 曲线的特性:+运算 **
-
P+Q=R
-
+运算的几何意义:R 为 P、Q 连续与曲线交点在 X 轴上的镜像 -
P+P=R -
+运算满足交换律
-
+运算满足结合律
- (a + b) + c = a + (b + c)
**+运算的代数计算方法 **
-
先计算出斜率 m,再计算出 R 点的坐标
**ECC+运算举例 **
- 设曲线:y2=x3-7x+10
- 设 P=(1,2),Q=(3,4),计算出 R(-3,-2)
- P 在曲线上,因为 22=4=13-71+10
- Q 在曲线上,因为 42=16=33-37+10=27-21+10
- R 在曲线上,因为 -22=4=-33-7*(-3)+10=-27+21+10
**ECC 的关键原理 **
-
Q=K.P
-
已知 K 与 P,正向运算快速 -
已知 Q 与 P,计算 K 的逆向运算非常困难
11.DH 协议升级:基于椭圆曲线的 ECDH 协议
**ECDH 密钥交换协议 **
- DH 密钥交换协议使用椭圆曲线后的变种,称为 Elliptic Curve Diffie–Hellman key Exchange,缩写为 ECDH,优点是比 DH 计算速度快、同等安全条件下密钥更短
- ECC(Elliptic Curve Cryptography):椭圆曲线密码学
- 魏尔斯特拉斯椭圆函数(Weierstrass‘s elliptic functions):y2=x3+ax+b
**ECC 的关键原理 **
-
Q=K.P
-
已知 K 与 P,正向运算快速 -
已知 Q 与 P,计算 K 的逆向运算非常困难
**ECDH 的步骤 **
-
Alice 选定大整数 Ka 作为私钥 -
基于选定曲线及曲线上的共享 P 点,Alice 计算出 Qa=Ka.P -
Alice 将 Qa、选定曲线、共享 P 点传递点 Bob -
Bob 选定大整数 Kb 作为私钥,将计算了 Qb=Kb.P,并将 Qb 传递给 Alice -
Alice 生成密钥 Qb.Ka = (X, Y),其中 X 为对称加密的密钥 -
Bob 生成密钥 Qa.Kb = (X, Y),其中 X 为对称加密的密钥 Qb.Ka = Ka.(Kb.P) = Ka.Kb.P = Kb.(Ka.P) = Qa.Kb
**X25519 曲线 **
12.TLS1.2 与 TLS1.3 中的 ECDH 协议
**TLS1.2 通讯过程 **
**FREAK 攻击 **
**openssl 1.1.1 版本对 TLS1.3 的支持情况 **
- Ciphersuites 安全套件
- TLS13-AES-256-GCM-SHA384
- TLS13-CHACHA20-POLY1305-SHA256
- TLS13-AES-128-GCM-SHA256
- TLS13-AES-128-CCM-8-SHA256
- TLS13-AES-128-CCM-SHA256
**TLS1.3 中的密钥交换 **
13.握手的优化:session 缓存、ticket 票据及 TLS1.3的0-RTT
**session 缓存:以服务器生成的 session ID 为依据 **
**session ticket **
**TLS1.3 的 0RTT 握手 **
**0-RTT 面临的重放攻击 **
14.TLS 与量子通讯的原理
TLS 密码学回顾
- 通讯双方在身份验证的基础上,协商出一次性的、随机的密钥
- PKI 公钥基础设施
- TLS 中间件生成一次性的、随机的密钥参数
- DH 系列协议基于非对称加密技术协商出密钥
- 使用分组对称加密算法,基于有限长度的密钥将任意长度的明文加密传输
**克劳德·艾尔伍德·香农:信息论 **
- 证明 one-time-pad(OTP)的绝对安全性
- 密钥是随机生成的
- 密钥的长度大于等于明文长度
- 相同的密钥只能使用一次
**QKD 与光偏振原理 **
- 量子密钥分发 quantum key distribution,简称 QKD
- 量子力学:任何对量子系统的测量都会对系统产生干扰
- QKD:如果有第三方试图窃听密码,则通信的双方便会察觉
15.量子通讯BB84协议的执行流程
**BB84 协议 **
**BB84 协议示意图 **
**QKD 密钥纠错与隐私增强 **
16.写在最后
这篇博客我们主要介绍了tls协议,后面会继续介绍TCP、IP协议
|