密文窃取
此条目需要编修,以确保文法、用词、语气、格式、标点等使用恰当。 (2018年12月8日) |
此条目目前正依照en:Ciphertext_stealing上的内容进行翻译。 (2018年12月4日) |
在密码学中,密文窃取(CTS)是使用分组密码操作模式的通用方法,该操作模式允许处理不能均匀分割成块的消息,而不会延长密文,代价是略为复杂。
一般特性
窃取密文是使用密码加密明文的技术,不须将消息填充到块大小的倍数,因此密文与明文大小相同。
它通过更改消息最后两块来实现这点。除了最后两块之外,所有块都保持不变,但“窃取”倒数第二块的一部分密文用以填充最后一块明文块。填充的最后一块,然后像往常一样加密。
最终密文的最后两块,包括部分倒数第二块(删掉“窃取”部分)和完整的最后一块,它们大小与原明文相同。
解密时要求首先解密最后一块,然后将“窃取”的密文恢复到倒数第二块,然后可以像往常一样解密。
原则上,任何使用块密码的分组加密模式都可用,但流密码模式已经可以加密任意长度的消息无需填充,因此它们不能用该操作。与窃取密文相结合的常用加密方式有电子密码本(ECB)和密码块链接(CBC)。
ECB密文窃取要明文长过一块。当明文长度为一个或更少时,一种可能的解决办法是,使用一种类似流密码的分组密码操作模式,如CTR、CFB或OFB。
CBC密文窃取不一定要明文长过一块。在明文为一块或更少块长度的情况下,初始向量(IV)可作为先前的密文块。在这种情况,必须将修改后的IV发送予接受者。但这在发送密文时IV不能由发送者自由选择的情况下(如当IV是派生值或预先确定的值)不太可能,并且在这种情况下,针对CBC模式的密文窃取只能在明长于一个块文中发生。
为了以CTS加密或解密未知长度的数据,必须延迟处理(和缓存)最新的两块数据块,以便处理数据流末端。
密文格式
有几种不同的方式来排列密文以便传输。不同排列方式的密文位元数都相同,只是传输顺序不同,因此选择不影响安全性,纯粹是为了方便实现。
这里的编号取自Dworkin所描述的。第三种最流行,由Daemen和Schneier描述;Meyer描述了相关但不兼容的方案(关于位排序和密钥使用)。
CS1
安排密文传输最显而易见的方式,不外乎是缩短倒数第二块,后面接着完整的最后一块。但这对接收者来说不方便,原因有二:
- 在任何情况下,接收方都必须首先解密最后一块,并且
- 这导致最后一块没有按照自然边界对齐,并将硬件复杂化。
这样做的好处是,如果最后的明文块恰好是块大小的倍数,密文就与原始操作模式相同,避免了密文窃取。
CS2
通常,更方便的方式是交换最后两块密文块,因此密文结尾先是完整的最后一块,然后是截断的倒数第二块。密文块就会自然对齐。
为了保持与非窃取模式的兼容性,CS2只在窃取密文的数量非零时交换,即原始消息不是块大小的倍数。
这保持了自然的对齐,以及与非窃取模式的兼容性,但是需要以不同的方式处理对齐和不对齐消息大小的情况。
CS3
最流行的替代方案是无条件交换最后两块密文块。下面描述了使用该方案的顺序。
窃取密文模式描述CS3
为了加密或解密数据,对除最后两个数据块外的所有数据块使用标准分组密码操作模式。
下面的步骤描述了如何处理明文的最后两个块,即Pn-1和Pn,其中Pn-1的长度等于以位表示的密码的块大小B;最后一个块的长度Pn是百万位元(Mbit);k是正在使用的密钥。M可以范围从1到B,所以Pn可能是一个完整的块。CBC模式描述还使用了就在有关块Cn-2之前的密文块,如果明文适合在两个块内,则该密文块实际上可能是IV。
对于这描述,使用以下函数和操作符:
- Head(data,a):返回“data”字串第一位。
- Tail(data,a):返回“data”字串最后一位。
- Encrypt(k,data):在“data”字串用加密模式的底层块密码,用密钥k。
- Decrypt(k,data):在“data”字串的解密模式用基础块密码,用密钥k。
- XOR或运算。等价于不用进位的按位加法。
- | |:与运算符。合并运算符两边的字串。
- 0^a:一串0位元的字串。
ECB密文窃取
ECB模式的密文窃取在前两块内引入了块间依赖关系,改变后两块的错误传播行为。
Ecb加密步骤(见图)
参考文献
- Schneier, Bruce. Applied Cryptography 2nd. John Wiley & Sons, Inc. 1995: 191, 195. ISBN 0-471-12845-7.
- Meyer, Carl H.; Matyas, Stephen M. Cryptography: A New Dimension in Computer Data Security. John Wiley & Sons, Inc. 1982: 77–85. ISBN 0-471-04892-5.
- R. Baldwin; r. Rivest (1996年10月)。 R. Baldwin; R. Rivest. The RC5, RC5-CBC, RC5-CBC-Pad, and RC5-CTS Algorithms. October 1996. RFC 2040.
- Dworkin, Morris, Recommendation for Block Cipher Modes of Operation: Three Variants of Ciphertext Stealing for CBC Mode (PDF), US National Institute of Standards and Technology (NIST), October 2011 [2018-12-02], Addendum to NIST Special Pub 800-38A, (原始内容存档 (PDF)于2021-02-25)