密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
大多数密码算法都是将明文切成固定长度的多个块,以块为单位进行加密,而不是逐个字节地加密数据。如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式。不管什么样的密码算法,任何时候当同样的明文块从算法前端输入,同样的密文块就从后端输出。入侵者可以充分发掘这种特性来协助攻破密码系统。下面举个例子来说明。
下面这个表描述的是三个人的年终奖金额度。
Alice
8000
Bob
12000
Trudy
3000
老板授权秘书MM整理好这张表后,秘书MM将其加密,然后提交给财务部门。为了清楚地描述问题,这里假设这张表的每个字段都是64位,而且刚好秘书MM用的加密算法的加密块长度也是64位,那么加密结果可能就是像下面这个样子:
As9d8912h3a98q 9SDJKVNI
9d89821as89982mHSLkp[anm
09djhASDFQWER78sdfHD,zx
0812UtWEQ23][;[]X/;;\DSKg5p
78723G/CC;D;LFSDF/;LXPASh
/.,;ISOFIWERIIOC7kjJKJDFNSAn
假设在秘书MM发送这段密文之前,不巧让Trudy看到了。尽管Trudy看不懂这个表的内容,但是当秘书MM抱怨就两个字段的表为什么么要定死每个字段长度为64位的时候,Trudy获得了足够的信息。她知道由于自己刚和老板吵过嘴,奖金肯定没有其它人高,于是她尝试将这些密文块的顺序调整了一下,变成下面这个样子:
As9d8912h3a98q 9SDJKVNI
0812UtWEQ23][;[]X/;;\DSKg5p
09djhASDFQWER78sdfHD,zx
/.,;ISOFIWERIIOC7kjJKJDFNSAn
78723G/CC;D;LFSDF/;LXPASh
9d89821as89982mHSLkp[anm
仅仅是调整一下密文块的顺序,财务部解密消息的时候完全察觉不到有任何异常。尽管Trudy还是不知道奖金是多少,但是可以很有把握地相信自己的奖金会比原来高。
为了对抗这种问题,需要采取某种加密模式,需要把各个密文块关联起来,使得密文任何一处有异常更改,都会导致整个密文作废。常见的加密模式有以下这。
1) 电子密码本(Electronic Code Book,ECB):
就上面讲的有问题的这种模式,每块明文都对应自己的密文块,互不相干。在 ECB 模式中,每块明文都是独立于其他块加密的。虽然这样做比较高效(可以并行执行多个数据块的加密),但这种方法有一个很大的问题。例如,在 ECB 模式中,对相同明文块的加密总是产生相同的密文块,这为某些类型的密码分析攻击打开了方便之门。ECB 方式通常被认为不适合保护敏感数据。
2) 密码块链接(Cipher Block Chaining,CBC):
在 CBC 模式中,文本块是连续加密的,在加密当前明文块之前,用前一次块加密的结果修改当前明文块。这个过程改进了加密的一些特征(例如,相同的明文块不会产生相同的密文块),但是由于其加密过程是连续的,CBC 方式不支持加密的并行化。CBC 方式使用一个称作初始化向量(Initialization Vector,IV)的附加文本来开始链接过程。IV 用于修改被加密的第一个明文块。
3) 密码反馈(Cipher Feedback,CFB):
在 CFB 模式中,先加密前一个块,然后将得到的结果与明文相结合产生当前块,从而有效地改变用于加密当前块的密钥。这里密钥的值是不断变化的,这个过程与流加密类似,但是性能则远不如流加密。与 CBC 方式一样,这里要使用一个初始化向量作为加密过程的种子。
优点:
4) 输出反馈(Output Feedback,OFB):
在 OFB 方式中,使用一个种子或 IV 来开始加密过程。加密种子后,将加密结果与明文块结合产生密文。之后被加密的种子再度被加密,如此重复此过程,直到遍及全部明文。同样,结果类似于流加密。
优点:
3.误差传送:一个明文单元损坏影响多个单元;
5) 流密码模式:
用一个密钥加密一个初始向量生成一个输出块,然后用同样的密钥对这个输出块进行加密以得到第二个输出块,再用同样的密钥对这个输出块进行加密得到第三个输出块,以此类推。所有这些块的序列叫做密钥流。逐块输出密钥流时,就逐块与明文异或,输出的就是密文。
6) 计数器模式:用一个密钥加密一个初始向量生成输出块,然后将初始向量加1再用同样的密钥加密输出第二个输出块,以此类推。输出的块序列也是密钥流,逐块输出密钥流时,就逐块与明文异或,输出的就是密文。
7) CTS(密码文本窃用模式):处理任何长度的纯文本并产生长度与纯文本长度匹配的密码文本。除了最后两个纯文本块外,对于所有其他块,此模式与CBC 模式的行为相同。