版权归原作者所有,如有侵权,请联系我们

[科普中国]-分组密码工作模式

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

密码学中,分组(block)密码的工作模式(mode of operation)允许使用同一个分组密码密钥对多于一块的数据进行加密,并保证其安全性。分组密码自身只能加密长度等于密码分组长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通常而言,最后一块数据也需要使用合适填充方式将数据扩展到匹配密码块大小的长度。一种工作模式描述了加密每一数据块的过程,并常常使用基于一个通常称为初始化向量的附加输入值以进行随机化,以保证安全。

工作模式主要用来进行加密和认证。 对加密模式的研究曾经包含数据的完整性保护,即在某些数据被修改后的情况下密码的误差传播特性。后来的研究则将完整性保护作为另一个完全不同的,与加密无关的密码学目标。部分现代的工作模式用有效的方法将加密和认证结合起来,称为认证加密模式。

虽然工作模式通常应用于对称加密,它亦可以应用于公钥加密,例如在原理上对RSA进行处理,但在实用中,公钥密码学通常不用于加密较长的信息,而是使用结合对称加密和公钥加密的混合加密方案。

历史和标准化最早出现的工作模式,ECB,CBC,OFB和CFB可以追溯到1981年。2001年,NIST修订了其早先发布的工作模式任务栏表,加入了AES,并加入了CTR模式。最后,在2010年1月,NIST加入了XTS-AES,而其余的可信模式并没有为NIST所认证。例如CTS是一种密文窃取的模式,许多常见的密码学运行库提供了这种模式。

ECB,CBC,OFB,CFB,CTR和XTS模式仅仅提供了机密性;为了保证加密信息没有被意外修改或恶意篡改,需要采用分离的消息验证码,例如CBC-MAC。密码学社区认识到了对专用的保证完整性的方法的需求,NIST因此提出了HMAC,CMAC和GMAC。HMAC在2002年通过了认证,CMAC在2005年通过,GMAC则在2007年被标准化。

在发现将认证模式与加密模式联合起来的难度之后,密码学社区开始研究结合了加密和认证的单一模式,这种模式被称为认证加密模式(AE,Authenticated Encryption),或称为authenc。AE模式的例子包括CCM,GCM,CWC,EAX,IAPM和OCB。

现在,工作模式为许多国家和国内的标准认证实体所定义,其中最有影响力的来源是美国的NIST,而其它有影响力的组织包括ISO,IEC,IEEE,美国的ANSI,以及IETF。1

初始化向量(IV)初始化向量(IV,Initialization Vector)是许多任务作模式中用于将加密随机化的一个位块,由此即使同样的明文被多次加密也会产生不同的密文,避免了较慢的重新产生密钥的过程。

初始化向量与密钥相比有不同的安全性需求,因此IV通常无须保密,然而在大多数情况中,不应当在使用同一密钥的情况下两次使用同一个IV。对于CBC和CFB,重用IV会导致泄露明文首个块的某些信息,亦包括两个不同消息中相同的前缀。对于OFB和CTR而言,重用IV会导致完全失去安全性。另外,在CBC模式中,IV在加密时必须是无法预测的;特别的,在许多实现中使用的产生IV的方法,例如SSL2.0使用的,即采用上一个消息的最后一块密文作为下一个消息的IV,是不安全的。2

填充块密码只能对确定长度的数据块进行处理,而消息的长度通常是可变的。因此部分模式(即ECB和CBC)需要最后一块在加密前进行填充。有数种填充方法,其中最简单的一种是在明文的最后填充空字符以使其长度为块长度的整数倍,但必须保证可以恢复明文的原始长度;例如,若明文是C语言风格的字符串,则只有串尾会有空字符。稍微复杂一点的方法则是原始的DES使用的方法,即在数据后添加一个1位,再添加足够的0位直到满足块长度的要求;若消息长度刚好匹配块长度,则添加一个填充块。最复杂的则是针对CBC的方法,例如密文窃取,残块终结等,不会产生额外的密文,但会增加一些复杂度。布鲁斯·施奈尔和尼尔斯·弗格森提出了两种简单的可能性:添加一个值为128的字节(十六进制的80),再以0字节填满最后一个块;或向最后一个块填充n个值均为n的字节。

CFB,OFB和CTR模式不需要对长度不为密码块大小整数倍的消息进行特别的处理。因为这些模式是通过对块密码的输出与明文进行异或工作的。最后一个明文块(可能是不完整的)与密钥流块的前几个字节异或后,产生了与该明文块大小相同的密文块。流密码的这个特性使得它们可以应用在需要密文和明文数据长度严格相等的场合,也可以应用在以流形式传输数据而不便于进行填充的场合。3

误差传播在消息认证码和认证加密的广泛应用之前,常常有人讨论块密码工作模式的“误差传播”特性,作为工作模式性能的一部分。例如,若密文传输中一个数据块的错误会导致采用ECB模式生成的明文中同样一个块的错误,而CBC模式中会导致两个明文块出错。

有人认为这样的特性在应对随机误差(例如传输噪声)时会是有益的,而还有人认为这样的特性使得攻击者更容易篡改消息的一部分。

无论如何,若使用了适当的完整性保护措施,这样的误差很可能会导致整个消息重发。若需要应对随机误差,则应当在发送密文之前增加错误校正码。2

认证加密一些工作模式在设计中希望将保密性和认证性结合起来,例如XCBC,ACBC,APM,OCB,EAX,CWC,CCM和GCM。认证加密模式被可以分为单次处理和两次处理两种类型。然而,对密码学用户社区而言,不幸的是,许多单次处理的认证加密算法,例如OCB,是为专利所保护的。

另外,有的模式也允许为未加密的关联数据进行认证,因此被称为AEAD(Authenticated-Encryption with Associated-Data,用于关联数据的认证加密)。例如,EAX是一种两次处理的AEAD方法,而OCB模式是单次的。2

其它模式和密码学概念除了上文中提到的模式以外,还有很多其它的块密码工作模式。有的被公众所接受,有其详细描述了,甚至被标准化了,并在使用中;而有的则被认为是不安全的,而从未使用过;另外一些则并没有被分类为保密,认证或签名加密,例如密钥反馈模式(KFM,Key Feedback Mode)和AES-hash。NIST维护着一张块密码工作模式列表。

磁盘加密通常使用特殊目的、专门设计的模式。可以调节的小数据块加密模式(LRW,XEX和XTS)和大数据块的模式(CMC和EME)是设计用于加密磁盘区块的。

块密码也可以用于其它加密协议中,在这些协议中,块密码的使用方式与前述工作模式相似。在一切协议中,为了保证其安全性,必须在构建工作模式时特别注意。

消息认证码(MAC)通常由块密码得到,例如CBC-MAC,OMAC和PMAC。

认证加密也采用块密码作为其中的一部,其同时使用加密和MAC以提供保密性和数据完整性,例如IAPM,CCM,CWC,EAX,GCM和OCB。3

本词条内容贡献者为:

宋春霖 - 副教授 - 江南大学