wireshark解析flv_wireshark 无法解密tls


关注爱因诗贤 每天进步一点点 导读

这篇文章介绍一下 TLS 协议,TLS 有着 20 多年的历史,包括了很多种加密方式,下面通过学习对称加密原理和非对称加密原理对 TLS 协议加深理解。

1.TLS 设计的目的

  • 身份验证
  • 保密性
  • 完整性

2.TLS/SSL 发展史及通用模型


wireshark解析flv_wireshark 无法解密tls_02

3.TLS 协议

  • Record 记录协议
  • 对称加密
  • Handshake 握手协议
  • 验证通讯双方的身份
  • 交换加解密的安全套件
  • 协商加密参数

4.TLS 安全密码套件

wireshark解析flv_wireshark 无法解密tls_03

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

5.对称加密示意图

wireshark解析flv_工作模式_04

6.基于 XOR 的对称加密原理

6.1 XOR 真值表

wireshark解析flv_对称加密_05

6.2 基于 XOR 的加密示意图



wireshark解析flv_工作模式_06

6.3 基于 XOR 的加密示意图



wireshark解析flv_工作模式_07

6.4 填充明文


上述加密过程是按位  XOR  操作,这就要求密钥序列和明文序列的长度保持一致,下面介绍若明文序列和密钥序列长度不一致的填充方法:


  • Block cipher 分组加密:将明文分成多个等长的 Block 模块,对每个模块分别加解密
  • 目的:当最后一个明文 Block 模块长度不足时,需要填充
  • 填充方法
  • 位填充:比 bit 位为单位来填充
  • wireshark解析flv_加密算法_08

  • 以字节为单位填充
  • wireshark解析flv_工作模式_09

7.对称加密工作模式

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

7.1 ECB(Electronic codebook)模式

  • 直接将明文分解为多个块,对每个块独立加密
  • 问题:无法隐藏数据特征(例如给一张图片加密之后图像特征可能还在)
  • wireshark解析flv_wireshark解析flv_10

7.2 CBC(Cipher-block chaining)模式

  • 每个明文块先与前一个密文块异或后,再加密
  • 问题:加密过程串行化

7.3 CTR(Counter)模式

  • 通过递增一个加密计数器以产生连续的密钥流
  • 问题:不能提供密文消息完整性校验(这个问题可以通过哈希函数校验码来解决)

7.4 GCM 模式

  • GCM 是在 CTR 模式的基础上增加一个 MAC 哈希值来校验数据完整性的:

wireshark解析flv_对称加密_11

8.AES 加密算法

AES  加密算法是比利时密码学家 

Joan Daemen  和 

Vincent Rijmen  两位设计的,又称为 

Rijndael  加密算法,常用的填充算法是 

PKCS7 ,常用的分组工作模式是 

GCM


8.1 AES 的三种密钥长度

AES 分组的长度是 128 位(16 字节):

AES

密钥长度(32位比特)

分组长度(32位比特)

加密轮数

AES-128

4

4

10

AES-192

6

4

12

AES-256

8

4

14

8.2 AES 加密步骤

  • 把明文按照 128 bit(16 字节) 拆分成若干个明文块,每个明文块是 4*4 矩阵
  • 按照选择的填充方式来填充最后一个明文块
  • 每一个明文块利用 AES 加密器和密钥,加密成密文块
  • 拼接所有的密文块,成为最终的密文结果

8.3 AES 加密流程

C = E(K,P),其中 E 为每一轮算法,每轮密钥皆不同:

  • 初始轮
  • AddRoundKey 轮密钥加
  • 普通轮
  • AddRoundKey 轮密钥加
  • SubBytes 字节替代
  • ShiftRows 行移位
  • MixColumns 列混合
  • 最终轮
  • SubBytes 字节替代
  • ShitRows 行移位
  • AddRoundKey 轮密钥加