稳重高效的常备军——分组密码
撰文 | 康老师
之前的五期内容聊的是密码内在特征与结构,密码与安全的关系。从这期开始进入本系列的第二个部分——密码技术的“十八般兵器”,从技术角度具体展开描述密码学工具箱中各式不同“兵器”的功用与特点。
最先介绍对称分组密码也简称分组密码(Block Cipher),因为分组密码在整个密码家族中原理最易理解、产生最早、应用最广、使用也最方便,提到密码应用就离不开分组密码的使用。
分组密码工作的基本过程
分组密码工作的大体过程如下图所示,下面我们“一步一动”的进行分步拆解。
第一步,分发密钥分组密码是用相同的密钥进行加密和解密,这就意味着加密端和解密端使用的密钥必须相同,更新密钥的动作也必须同步,否则加密的密文必然会解密成无意义的乱码。因此,分发密钥的动作必须是提前在加密端和解密端同步完成的——而不管分发手段是在线分发还是离线分发,否则分组密码就无从正常工作。
第二步,分组对齐分组密码对明文进行加密时,首先需要对明文进行分组,必须确保每组的长度都是固定相同的——分组密码的分组长度必须固定,这点对分组密码来说是很重要的。这就带来一个问题,如果明文整体长度不足一个分组或最后剩余长度不足一个分组怎么办?一般的处理方法是用固定数值填充,并记录下填充的长度,而且这个填充长度还可以不占用多余空间存储,如下图所示,明文分组长度为16,补齐分组长度为5,直接用数字5填充这五个不足长度就可以了。
第三步,加密数据接上步处理,明文信息分组长度用n表示,分组加密算法的输入为长度为n的明文以及密钥k,密钥长度用t表示(t与明文分组长度n不一定相同)。在分组算法内部,各组明文分别在密钥控制下变换成等长的输出数字序列,算法不同,处理过程也不同——在此不详述。分组加密算法的输出即为分组长度为m的密文了。注意明文和密文分组长度不一定相同,如果n<m,则分组密码对明文加密后有数据扩展。如果n>m,则分组密码对明文加密后又数据压缩。如果n = m,则分组密码对明文加密后即无数据扩展也无数据压缩——这种情况比较多一点。明文分组长度n和密钥长度t是分组密码的重要参数,它们对分组密码的安全性有一定的影响。在不同的分组密码算法中,这两个参数通常是不同的。
第四步,解密数据经过上步加密处理后,每组明文分别加密得到若干个等长分组长度为m的密文。密文此时就可以按用户所需进行各种方式的传输、存储或其它处理,需要注意的是不管进行如何的处理,需要保证密文长度和比特序列顺序不变,也就是密文不能再被改写了,否则就像临时变动分组密码的分组长度一样,直接导致解密失败无法恢复明文,至于如果保障这点,已经跳出了密码的解决能力范围,需要在密文的处理过程通过纠错等方式解决。最后,在用户需要解密的时候,必须使用与加密时一致的密钥,解密算法的输入为长度为m的密文以及长度为t的密钥k,解密算法处理过程一般是加密的逆过程,输出即为分组长度为n的明文,按分组将最后一组都解密完成后,通过获得填充长度,直接丢弃掉这个填充长度的“尾巴”就获得了原始长度的最终明文了。
分组密码总体特点
基础深厚,扩展广泛尽管具体算法的原理有差异,分组密码的设计总体上都体现了尽可能让密文混淆、扩散和随机的原则,换句话说,其原理是容易接受和应用的。因此,分组密码的研究和应用历史最长,分组密码是最先成熟的现代密码,针对它的安全性验证也最多。正基于人们对它的信赖程度,分组密码在密码学工具箱中起到了基础性作用,易于利用分组密码构造伪随机数发生器、流密码、消息认证码(MAC)以及杂凑(Hash)函数。
高速稳定,方便易用分组密码经过长期发展,具有整体结构简单、运行速度快、实现平台(软件或硬件模块/芯片等)容易、运行模式构造方便等特点,所以它成为文本、音视频等各类数据加密、消息认证技术、数据完整性机制、实体认证协议和各类密码协议等密码应用系统的首选方案。常用软件里使用的首选公开算法3DES、AES、IDEA均属于分组密码,因此,我们说分组密码是一个密码系统少不了的常备“兵器”。
本节的最后还要提到分组密码的应用模式问题,同一算法,可以依需求采用不同的应用模式,这也是分组密码应用方面的特点。
电子密码本模式ECB是最基本的加密模式,也就是上节描述的基本加密方式,相同的明文将永远加密成相同的密文。为进一步提升安全性、防止无线数据传输等场景下容易发生的重放攻击,同时尽量不降低加密速度,人们通过引入一个称为初始向量的随机量(一般双方事先约定好初始向量的产生方式)以及对明文的额外处理,发明了密码分组链接模式CBC。CBC模式下,明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文。CBC加密后的密文是上下文相关的,明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组只能全部作废(即发生同步错误的情况)。类似的,人们还发明了加密反馈模式CFB、输出反馈模式OFB,在此篇幅所限不详述。
分组密码的相对不足
上文提到,两个用户(主机、进程、应用程序)在用分组密码体制进行保密通信时,首先必须有共享的秘密密钥,为防止攻击者窃取密钥,必须时常更新密钥。因此,密码系统的强度也依赖于密钥分配技术,而且为尽量减少密钥的重复使用(理想情况是每个密钥使用一次之后就丢弃),密钥更新频率成为了关键性的指标,否则,密码的前向安全性就无从谈起。
相对来讲,安全密钥的产生还算容易,如何安全的分发密钥是最困难的问题。人们实践过多种可行的解决方案,可以依赖密码运算参与方自身固定算法运算产生——弱点是导致密钥的随机性不够,易被复制密钥;可以依靠人工递送——弱点是代价巨大,而且引入人为因素从安全角度看并不那么可靠。综合考虑实现代价、密钥管理要求等各因素,一般是要建立一条更为安全的秘密信道专用于分发密钥,这样最有利于自动化的、快速实时的更新密钥。
康老师 简介
深耕信息安全领域二十余年,从事安全增强系统、密码应用系统及通用软件系统开发、信息安全理论研究、标准规范编研及开发团队管理。参与多项国家863、973、核高基专项等重大科研项目,作为主要完成人编研完成国家/军用标准多项,发表学术论文二十余篇。