6.1 概述
块加密(block cipher)指的是用于加密固定长度原文的算法。假设k为密钥,E为加密函数,P为明文,C为密文,则可以表达为
明文和密文是一串比特并且长度相等。块加密的块大小(block size)是固定的。密钥空间(Keyspace)指的是所有密钥key的集合。
一旦我们把明文加密成了密文,之后就可能需要对密文进行解密,得到明文。设D为解密函数
块加密是对称密钥加密机制的一个实例。一个密钥即用来加密也用来解密。
块加密是密钥的一个排列(keyed permutation),因为块加密算法将每个可能的块映射到另一个块。
举一个例子,假设块大小为4位,那么就有2^4=16种可能的块。因为每个块都可以映射为一个16进制的数,我们用这些数字来表示块,如图6.1。
image-20210127094236874.png一旦选择了一个密钥,块加密就用它来决定任意块的密文。我们用箭头来表示这个关系,箭头从明文开始,经过密钥k和加密函数E加密后,到达箭头指向的是加密后的密文。在图6.4中(一种排列对应),排列不光指的是一个大的圈,它还包含了一个7个元素的小圈(0->6->3->B->4>F->9->7->0),一个4个元素的小圈(1->A->2->C->1),一个2个元素的小圈(5->8->5),和两个映射到自己的圈(D->D,E-E).可以看出这个排列映射为
0 1 2 3 4 5 6 7 8 9 a b c d e f
6 a c b f 8 3 0 5 7 2 4 1 d e 9
image-20210127094318399.png当需要解密的时候,块加密需要计算拟排列。不同之处的话就是箭头的方向是反过来的。
如6.4中例子,解密的排列对应为
密文 0 1 2 3 4 5 6 7 8 9 a b c d e f
明文 7 c a 6 b 8 0 9 5 f 1 3 2 d e 4
即
明文 0 1 2 3 4 5 6 7 8 9 a b c d e f
密文 6 a c b f 8 3 0 5 7 2 4 1 d e 9
明文 0 1 2 3 4 5 6 7 8 9 a b c d e f
密钥决定了块与块的映射关系,一个不同的密钥就可以得到一个不一样的箭头关系,如图6.4.
给定一些明文和密文对应该不可以暴露出一些其他对的信息。理想的块加密,应该没有除了暴力枚举密钥之外的其他解密方式。
本文中给出的示例仅仅只有4位,只有16种块,真实的块加密往往有一个很大的块大小,例如128位,2128约1038.5种块,数学告诉我们n的排列:
排列的增长非常快。5!=120, 10!=3628800。对于128位的块大小,其排列为(2^128)!,是一个天文数字,所以按目前的计算能力来讲,128位可以认为是不可解的。现在常用的块大小一般从128到256位。
6.2 AES
当前块加密的主流算法是AES(Advanced Encryption Standard),AES的块大小为128位(16个字节),密钥长度可以为128位,192位和256位。目前没有针对AES的实践性的攻击。但是有一些针对AES减少轮数版本的攻击。
AES加密算法的详情,后续补充。
6.3 DES与3DES
DES(Data Encryption Standard)是最古老的块加密算法之一,其密钥长度为56位(算法中为64位长度,其中有8位是用来校验),目前认为它已不再安全。
由DES延伸的还有3DES,先加密,再解密然后再加密
这一过程提供了两点改进
- 从密码分析角度看,三次应用算法,增加了攻击的难度。
- 3重密码增加了密码域,使得暴力枚举密钥变得不实际。
这里的三个密钥可以完全独立(这样也就是56* 3=168位),或者k3=k1(56 * 2= 112),或者k1=k2=k3(这样会退化为DES)
针对3DES已经有一些攻击,减少了它的安全性。虽然要破解三个密钥完全独立的情况目前依然是不切实际的,对于现代的密码系统3DES依然不是个好的选择。随着密码学研究攻击和算力的增长,目前的安全边界已经变的很小了。
更佳的选择是AES,AES不但比3DES更加安全,通常也更加的快速。在相同的硬件和相同的模式下,AES-128通常是每一个字节12.6次循环,然而3DES需要134.5次循环。
6.4 遗留问题
- 只能对有限长度的消息加密(block size长度)
- 尽管密钥长度已经尽量的小了,密钥交换(如何在不安全的信道上交换密钥)依然是个很大的问题。
网友评论