TLS1.3---数据加密和完整性保护

AEAD(authenticated encryption with associated data)

在TLS1.3中,只保留了一种加密和保护完整性的方法就是AEAD(具有关联数据的加密认证)

定义

  • 关联数据的认证加密,顾名思义,除可提供对密文数据的隐私、完整性和真实性保证外,还可提供对未加密的关联数据的完整性保证。常用的关联数据通常包括消息的长度和消息的编码方式。
  • 可让receiver验证所收到消息中已加密和未加密信息的完整性。任何企图将有效加密信息与不同上下文结合的篡改都可通过AEAD发现。

背景

许多密码应用程序既需要保密又需要消息认证。机密性是一项安全服务,确保数据仅对获得授权的人可用,通常是通过加密实现的。确保数据不会被更改或伪造,可以通过使用消息验证码来实现(MAC)。此服务也称为数据诚信,许多应用程序使用加密方法和MAC一起提供这两种安全服务,使用独立**的算法。最近使用单个密码算法提供两种安全服务被接受。在此概念中,密码和MAC被替换为带关联数据的认证加密(AEAD)算法。出于实现两者相组合的目的,产生了几个方案:

  • EtM (Encryption then MAC)
    先加密,然后对密文进行 MAC 运算(一般用各种 HMAC),把加密后的数据和加密后数据的消息验证码拼接起来,发给接收方。
    接收方先验证 MAC,如果验证通过,则证明**是正确的,然后执行解密运算。
  • E&M (Encryption and MAC)
    同时对原始数据执行加密和 MAC 运算,把二者拼接起来,发给接收方。
    接收方先进行解密,然后对解密结果执行 MAC 运算,比对发来的 MAC,验证正确性。
  • MtE (MAC then Encryption)
    与 EtM 相反,先对原始数据执行 MAC 运算,与原始数据拼接后,执行加密算法,将密文发送给接收方。
    接受方先进行解密,然后执行 MAC 运算,验证解密结果是否正确。

慢慢的业内开始提出,这样实现的AEAD算法都存在安全问题,所以从2008年起,业内开始提出,需要在一个算法内同时实现加密和认证。

常见的AEAD算法

  • AES-128-GCM
  • AES-192-GCM
  • AES-256-GCM
  • ChaCha20-IETF-Poly1305
  • XChaCha20-IETF-Poly1305

而TLS1.3支持的加密组件:
TLS1.3---数据加密和完整性保护
我们可以发现TLS1.3中支持的算法只有AEAD。

AES(Advanced Encryption Standard)

密码学中的高级加密标准,用来替代原先的DES(Data Encryption Standard) ,经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称**加密中最流行的算法之一。

填充

TLS1.3---数据加密和完整性保护
对于128位的AES算法,在对明文加密的时候,不是一次性的对整个明文加密,而是将明文分块加密,每一块的大小就是128bit,经过AES加密器的处理,成为一个个独立的密文块,然后把它们拼接起来就形成了最终的加密结果。

如果分块过程中有的块是不满的,则需要填充—Padding。

  • PKCS5Padding(默认):
    如果明文块不足,则在明文块末尾补足相应数量的字符,且每个字符是缺少的字节数。
  • ISO10126Padding:
    如果明文块不足,在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。

它存在多种工作模式,下面具体来看一种。

CTR ( CounTeR 计数器模式)

TLS1.3---数据加密和完整性保护
在计数器模式下,我们不再对密文进行加密,而是对一个逐次累加的计数器进行加密,用加密后的比特序列与明文分组进行 XOR得到密文。
注:

  • Ek是使用秘钥k对输入做对称加密运算
  • 异或运算
    计数器模式下,每次与明文分组进行XOR的比特序列是不同的。有效防止出现相同的明文得到相同的密文的情况出现。

GMAC ( Galois message authentication code mode, 伽罗瓦消息验证码 )

GMAC就是利用伽罗华域(Galois Field,GF,有限域)乘法运算来计算消息的MAC值。
TLS1.3---数据加密和完整性保护
其中的Mh,指的是将输入与秘钥h在有限域GF(例:2^128)上做乘法

GCM( Galois/Counter Mode )

字母G指的是GMAC
字母C指的是CTR
所以就是在TLS1.3中AEAD算法使用的模式是GTR模式,其中的消息验证码的计算方式采用的是GMAC