《HTTPS权威指南》笔记-TLS-加密

2.5 加密
 TLS可以使用各种方法加密数据,比如使用3DES、AES、ARIA、CAMELLIA、RC4或SEED等算法。目前使用最为广泛的加密算法是AES。TLS支持三种加密类型:序列密码、分组密码和已验证的加密。在TLS中,完整性验证是加密处理的一部分;它要么在协议级中显示处理,要么由协商的密码隐式处理。
2.5.1 序列加密
 使用序列密码时,加密由两步组成。第一步,计算MAC值,范围包含记录序列号、标头、明文。MAC包含标头能确保未进行加密的标头不会遭到攻击。MAC包含序列号,能够确保消息不会被重放。第二步,加密明文和MAC,生成密文。整个过程如图2-5所示。


图2-5序列加密.png

2.5.2 分组加密
 使用分组密码时,加密会涉及更多内容,因为需要为分组加密的特性准备解决方案。具体来说,需要以下几个步骤,如图2-6所示。
(1)计算序列号、标头和明文的MAC。
(2)构造填充,确认加密前的数据长度时分组大小(通常16字节)的整数倍。
(3)生成一个长度与分组大小不一致的不可预期的初始向量(initialization vector,IV)。IV能保证加密是不确定的。
(4)使用CBC分组模式加密明文、MAC和填充。
(5)将IV和密文一起发送。

注意
可以在1.4.1节找到有关CBC分组模式、填充和初始向量的更多信息。

 这种处理方式被称为先计算MAC,再加密(MAC-then-encrypt),而它也是很多问题的源头。在TLS1.1和更新的版本中,每条记录中都包含显示IV;而TLS1.0和以前的版本则使用隐式IV(使用前一个TLS记录中的加密模块作为下一块的IV),但这在2011年被发现不安全。
 另一个问题是MAC计算不包括填充,这给主动网络攻击者进行填充预示攻击(padding oracle attack)提供了机会(由成功攻击TLS的示例)。这里的问题其实是,协议定义的分组加密方式在显示中很难安全地实现。就我们所知,现在的实现没有明显表现出易受攻击,但仍然不能对这个弱点掉以轻心。


图2-6分组加密.png

另一种处理安排方式的提案称为先加密,再计算MAC(encrypt-then-MAC),最近才被公开提出。在这种替代方案中,首先对明文和填充进行加密,再将结果交给MAC。这可以保证主动网络攻击者不能操纵任何加密数据。
2.5.3 已验证的加密
 已验证的密码将加密和完整性验证合二为一,全名是使用关联数据的已验证加密(authenticated encryption with associated data,AEAD)。表面上,它看起来是序列密码和分组密码的交叉。它不用填充,也不用初始向量。加密过程比使用分组密码要简单一些,如图2-7所示。
(1)生成一个唯一的64位nonce。
(2)使用已验证加密算法加密明文;同时也将序列号和记录标头作为完整性验证依据的额外数据交给算法。
(3)将nonce和密文一起发送。
 已验证加密被认为是当前TLS中可用的加密模式中最好的一种,因为它可以避免MAC-then-encrypt方式带来的问题。虽然TLS当前定义基于GCM和CCM块模式的已验证套件,实际上仅支持GCM套件。基于ChaCha20流密码的全新已验证套件当前正在进行标准化。


图2-7已验证加密.png

HTTPS权威指南-协议
HTTPS-密钥交换

你可能感兴趣的:(《HTTPS权威指南》笔记-TLS-加密)