vlambda博客
学习文章列表

TLS 协议-对称加密原理


关注爱因诗贤


每天进步一点点



导读

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

1.TLS 设计的目的

  • 身份验证

  • 保密性

  • 完整性

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

TLS 协议-对称加密原理

3.TLS 协议

  • Record 记录协议

    • 对称加密

  • Handshake 握手协议

    • 验证通讯双方的身份

    • 交换加解密的安全套件

    • 协商加密参数

4.TLS 安全密码套件

TLS 协议-对称加密原理

  • 密钥交换算法

  • 身份验证算法

  • 对称加密算法、强度、工作模式

  • 签名 hash 算法

5.对称加密示意图

TLS 协议-对称加密原理

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


6.1 XOR 真值表

TLS 协议-对称加密原理

6.2 基于 XOR 的加密示意图

TLS 协议-对称加密原理

6.3 基于 XOR 的解密示意图

TLS 协议-对称加密原理

6.4 填充明文

上述加密过程是按位  XOR  操作,这就要求密钥序列和明文序列的长度保持一致,下面介绍若明文序列和密钥序列长度不一致的填充方法:
  • Block cipher 分组加密:将明文分成多个等长的 Block 模块,对每个模块分别加解密

  • 目的:当最后一个明文 Block 模块长度不足时,需要填充

  • 填充方法

    • 位填充:比 bit 位为单位来填充
      TLS 协议-对称加密原理

    • 以字节为单位填充
      TLS 协议-对称加密原理

7.对称加密工作模式

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

7.1 ECB(Electronic codebook)模式

  • 直接将明文分解为多个块,对每个块独立加密

  • 问题:无法隐藏数据特征(例如给一张图片加密之后图像特征可能还在)
    TLS 协议-对称加密原理

7.2 CBC(Cipher-block chaining)模式

  • 每个明文块先与前一个密文块异或后,再加密

  • 问题:加密过程串行化

7.3 CTR(Counter)模式

  • 通过递增一个加密计数器以产生连续的密钥流

  • 问题:不能提供密文消息完整性校验(这个问题可以通过哈希函数校验码来解决)

7.4 GCM 模式

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

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 轮密钥加


    扫码关注