为了避免这些问题,TLS 1.1和更高版本使用了明确的IV,这些IV作为记录的一部分发送。这样可以避免攻击,但还会为每个记录增加16字节的开销。
[CBCATT]描述了对TLS的选择的明文攻击,具体取决于
知道IV记录。早期版本的TLS [TLS1.0]使用
先前记录的CBC残基作为IV,因此
启用了此攻击。此版本使用显式IV来防止这种攻击。
解决这个问题的第一个想法不是显式IV,而是隐式IV从共享机密安全地获取。 TLS已经定义了从主密钥生成任意长度的伪随机数据的方案(请参阅5. HMAC和伪随机函数)。
为什么TLS 1.1的设计者决定采用显式IV,而不是简单地用一个强大的隐式IV方案代替?显式IV相对于生成良好的隐式IV是否具有任何优势?
#1 楼
TLS 1.0使用初始化向量(IV)来引用两个不同的进程。 TLS 1.1引入了一种新的IV类型,该类型的IV导致整个块被丢弃,并且不能与基于CBC残基的旧系列IV直接比较。通过简单地更改记录开头的操作,显然希望使实现易于修补并防止某些系统上的负担。概述
IV试图防止重传时产生相同密文的任何(密钥,消息)对。它们通常需要是唯一的,最好是随机的,但不必是秘密的。 (共享秘密IV实际上只是更多密钥。)
有很多尝试使用IV的方法。让我们从ECB(无IV)开始,然后首先检查TLS 1.0,然后检查TLS 1.1 / 1.2如何使用其新IV。
I. ECB
如果您只是将明文分解成块并加密了每个块,则如果重复明文,您将有重新传输同一块的风险。因此,CBC在ECB上的改进方法是在加密之前将前一个块的密文异或为当前块的明文。这足以降低每个块(第一个块除外)上尚未进行异或的重传的可能性。因此,您将明确的IV投掷到第一轮以获得CBC。
II。带有CBC的TLS 1.0
在TLS 1.0中,各方可能希望能够确保第一个IV是随机的。因此,各方都提出了IV。然后通过伪随机函数将这两个IV混合在一起。
初始化向量(IV)
在CBC模式下使用分组密码时,初始化
向量在加密之前与第一个纯文本块进行异或。
--RFC 2246
然后,发送方获取IV并将其与第一段明文进行XOR。这将在整个块链中传播,应该足以确保没有重复的密文块(至少不与重复的明文块相对应)。说明让攻击者预见下一个IV并能够成形下一个明文块是不明智的。
III。 BEAST
因此,在BEAST攻击中,攻击者获取下一条消息的IV,然后诱使发送者发送某种形式的消息(不是IV xor CPT)。
一旦在加密之前对IV(又称“掩码”)进行了XOR运算,它将取消(NOT IV)。 CPT现在是一些选定的纯文本,将被加密(不带任何掩码)。不好。
在TLS 1.1版中,最大的变化是在每条记录的开头(每16k字节)提供了一个新的IV。
1.1中的每个块的TLS 1.0“ IV”仅称为掩码。甚至可以选择保留第一个块的TLS 1.0 IV。因此,新的IV实际上并不能直接替代旧的IV,它们的用途略有不同,实现方式也略有不同。
根据RFC 4346,以下两种算法之一用于生成每个记录的IV:
为IV生成具有加密强度的随机字符串R。用R屏蔽数据。第一个密码块将被加密为:
E(R XOR数据)。
生成加密强度高的随机R并在优先于纯文本之前加密。在这种情况下,可以固定遮罩,或者可以将上一个记录中的CBC残留物用作遮罩。
使用残差可以保持与TLS 1.0和SSL 3的最大代码兼容性。它还具有不需要快速重置IV的能力,这是众所周知的。在某些系统上出现问题。
所有替代方案的解密操作都相同:
接收器解密整个结构,但丢弃与IV组件相对应的第一个密码
块。
优先事项是保留尽可能多的现有规范,以简化实现。
在TLS 1.1和1.2中,它们在第一个块中加密IV,发送者将丢弃它。 TLS 1.0 IV现在称为“掩码”。通过保留旧的IV作为掩码,但引入一个新的IV来制作一次性块,他们使算法尽可能少地改变。 IV,这意味着更少的代码更改,并且在某些系统上更少的压力。 >美容和BEAST
Rizzo / Duong的安全影响
RFC 2246(TLS 1.0),RFC 4346(TLS 1.1)
分组密码操作模式
评论
$ \ begingroup $
>形式(不是IV xor CPT)。一旦在加密之前对IV(又称“掩码”)进行了XOR运算,它将取消(NOT IV)。那不是(IV xor CPT)吗? IV异或(NOT IV)不会抵消。这是全1的位掩码,因此(IV xor(NOT IV)xor CPT)等于(NOT CPT)。
$ \ endgroup $
–CromTheDestroyer
2015年6月9日在22:46
#2 楼
除了Brownbat上面写的内容外,另一个原因是,在设计TLS 1.1时,DTLS已经存在。 DTLS是使用UDP而不是TCP进行传输的TLS的变体。在UDP通信中,您不能依赖于实际传递到目的地的任何记录,因此任何记录都必须能够自行解密,而无需了解先前的记录。因此,如果要在DTLS中使用CBC模式,则必须具有显式的IV。任何可用的。但是从TLS 1.1和DTLS 1.1开始,可以共享(最多)密码套件。
评论
我想这被认为是万无一失的。如果我不得不猜测的话,这种方法就不那么复杂了,很少有人关心SSL的字节开销。确实,考虑到计算开销的问题,这可能是一个直接的权衡。与其花费周期推导IV,不如简单地明确声明
@imichaelmiers回顾这个旧评论;我猜想在大多数系统上(即不存在硬件支持的情况下),使用安全随机值作为IV会比使用对称原语计算一个安全性引入更多的开销。