关键词 AES;CCM;加密与认证
美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准[5](AES)规范。该标准采用Rijndael算法的设计策略是宽轨迹策略(Wide Trail Strategy), 宽轨迹策略是针对差分分析和线性分析提出的,它的最大优点是可以给出算法的最佳差分特征的概率及最佳线性逼近的偏差的界,由此可以分析算法抵抗差分密码分析及线性密码分析的能力。
Rijndael算法采用的是替代/置换网络。每一轮变换由三层组成:线性混合层,用于在多轮变换上的高度扩散;非线性层,由16个S-盒并置而成,起混淆的作用;密钥加层,子密钥简单的异或到中间状态。S-盒选取的是有限域GF(28)中的乘法逆运算,因此它的差分均匀性和线性偏差都达到了最佳。
Rijndael算法的安全性非常良好。4-轮Rijndael算法的最佳差分特征的概率和最佳线性逼近的偏差分别为2-150和2-76;8-轮Rijndael算法的最佳差分特征的概率和最佳线性逼近的偏差分别为2-300和2-151。此外,“Square”攻击是针对Square算法提出的一种攻击方法,同样适用于Rijndael算法,7-轮以上的Rijndael算法对“Square”攻击是免疫的。
因此,AES加密算法的优点显而易见:有良好的数学理论作为基础,没有明显的缺点和安全漏洞,加密、解密相似但不对称,因而具有更高的安全性,分组(支持128bit、192bit和256bit)和密钥长度(支持128bit、192bit和256bit)的多重选择也体现了该算法的灵活性。
对称密码已经广泛应用于数据的保密和数据完整性认证。每一种不同算法的分组密码在具体运用时,都会选择一种具体的操作模式[1][2],如电子密码本模式(ECB)、密码分组链接模式(CBC)或计数模式(CTR)等。这些模式仅提供加密服务而不提供鉴别服务,但有些应用中除了需要加密服务外还要求鉴别服务。
IPSec 是一个负责IP安全协议和密钥管理的安全体系,需要对IP传输提供了数据保密、数据完整性保护、身份认证和反重放保护,以达到保护网络安全通信的目的。由于常规的操作模式仅提供数据加密服务,因此在IPSec应用存在安全漏洞。而数据完整性保护、身份认证和反重放保护都需要鉴别服务。
目前,IPSec只支持正式CBC模式和CTR模式。但是,由Doug Whiting等提出的CCM[5](Counter with Cipher Block Chaining-Message Authentication Code)模式是一种同时提供加密和鉴别服务的全新操作模式。CCM模式具有许多优秀的性质,它提供了带鉴别的加密服务,并且不会发生“错误传播”(Error Propagation)。另外,CCM模式还具有同步性(Synchronization)和一定程度的并行性(Parallelizability)——在加密过程具有并行性而在鉴别过程则没有。因此相对于其他模式,CCM模式在IPSec应用中更具优势。
CCM模式是分组密码一种全新的操作模式,它同时提供了加密与鉴别服务,其中加密服务由计数模式(Counter Mode)提供,而鉴别服务由CBC-MAC(Cipher Block Chaining-Message Authentication Code)算法提供。我们可以理解为CCM模式结合了计数模式与CBC模式两者各自的优点。
使用CCM模式的基本条件包括,发送方和接收方定义相同的分组密码算法(这里为AES算法)、密钥K、记数器发生函数(Counter Generation Function)、格式化函数F()(Formatting Function)和鉴别标记长度Tlen。在CCM模式下,发送者的输入包括随机值Nonce、有效载荷和附加鉴别数据,分别记为 N、P、A。计算步骤如下:
Step 1. 计算格式化函数F(N, A, P),产生数据块序列 B0, B1, …, Br(每块为128bit)
Step 2. Y0= EK(B0)
Step 3. For i = 1 to r, do Yj= EK(Bi⊕Yi-1)
Step 4. T=MSBTlen(Yr)(取二进制串Yr的左边Tlen个二进制位)
Step 5. 计算计数器发生函数,产生计数块(the counter blocks)
Ctr0, Ctr1,…, Ctrm, m = Plen/128
Step 6. For j = 0 to m, do Sj= EK(Ctrj)
Step 7. S= S1 || S2 || …|| Sm(“||”表示连接运算)
Step 8. Return C=(P⊕MSBPlen(S)) || (T⊕MSBTlen(S0))
经过以上步骤后,最终产生发送方加密后发送的密文C 。一般来说,接受方得到N、A和C后,首先对密文C 进行解密恢复有效载荷和MAC值T;然后接受方再利用CBC-MAC算法对N、A和解密的有效载荷进行重新计算CBC-MAC值T1,并与从密文中恢复的MAC值T进行对比认证。如果认证通过,则接收方从密文中解密得到的有效载荷P是真实有效的。否则,将得到一个无效的有效载荷,这时就要求发送方重新加密发送该有效载荷。即使后一种情况真的发生,除了一个“错误”的T值以外接收方将不会泄漏任何其他的信息(包括解密的密文、正确的T值和其他一些入侵者“感兴趣”的信息)。
CCM模式包括两组相关的处理过程:初始化-加密(Generation-Encryption)、解密-鉴别(Decryption- Verification)。在初始化-加密阶段,CCM模式利用CBC-MAC算法产生MAC值,然后再利用计数模式对MAC值和有效载荷进行加密传送。而在解密-鉴别阶段则次序相反,先解密再鉴别。
在CCM模式中由CBC-MAC算法提供的鉴别服务比一般的校验码或错误检测码方式(Checksum or Error Detecting Code)在数据完整性方面具有更强的安全性。校验码或错误检测码方式仅仅被设计用于检测数据传送过程中的意外错误,而MAC方式不仅可以检测出数据的意外错误,而且也能检测出攻击者故意的、未经授权的数据篡改。
另外,在CCM模式中使用计数模式对数据进行加密和解密,这正是CCM模式另一个优点的本质来源,这一点与纯计数模式一样。计数模式的安全性在理论上已经被证明[6],其本质在于安全的分组加密函数具有伪随机变换特性。在CCM模式中,由于在计算Sj= EK(Ctrj)时各个数据块的加密可以独立的进行,这在软件实现中,可以充分利用现代体系结构的并行性。如果使用硬件实现加解密,则可以设置多个功能单元,每个功能单元独立完成各个数据块的加解密,这样可以极大的提高性能。此外,由于每一个接收的数据包的Ctr值都是按一定原则分配的,所以Ctr值是可以预计的。当处理器有空闲时,可预先计算EK(Ctr0),EK(Ctr1),……等,以进一步提高性能。
当然,CCM模式的性能还稍逊于纯计数模式,这是因为CCM模式只在加密时具有并行性,而在鉴别时则没有。但是CCM模式则通过鉴别服务机制提供了比纯计数模式更高的安全性。我们可以认为CCM模式综合了CBC模式和计数模式这两种模式的优点,并在安全和性能之间取得了很好的平衡。
因此,CCM模式在IPSec作为网关的实现中也可以在更高的安全保障下具有较高的性能。
AES-CCM模式要求发送方为每一个数据包生成一个唯一值IV(Initialization Vector),并通知接收方该值,那么该IV值就构成了Nonce的一部分。出于安全的考虑,相同的IV值和密钥决不能重复使用,同时必须确保发送方生成IV值时的唯一性。IV值的生成可以采用普通的方法,通过每一个包的递增序列号和线性反馈移位寄存器来产生。
在IPSec应用中,我们可以使用ESP序列号(Sequence Number)替代IV值,但要考虑到计数块可能的冲突问题。出于系统开销的考虑,在CCM模式下可以规定加密方来确定IV值。因为只有加密方可以确保IV值的使用不会多于一个数据包,若选择一种允许解密方也侦测计数块是否冲突的机制是没有优势的,这反而会增加了系统开销。此外,无论解密方发现与否,计数块冲突带来的损害都会发生。一般的,IV值的产生可以使用计数器方式、线性反馈移位寄存器方式和其他一些方式,这都取决于加密方的时间预算。在CCM模式使用的是计数器方式,这是因为计数器方式的应用简单,系统开销小,可以提高加密方的效率。此外,每个计数块IV值的分配需要在一个安全边界(Assurance Boundary)内,这样可以确保IV值的唯一性。在IPSec应用中使用序列号(Sequence Number)替代IV值,序列号的分配正是在一个安全边界内完成的。
IV值是紧跟在分离的序列号和每个包的计数块值的后面产生,这种额外的系统开销(64bit的IV域)是可以接受的,这种开销少于CBC模式的开销。一般的,为了产生IV值,CBC模式要求完整的分组,但这样平均下来有一半的分组需要填充(padding)。而AES-CCM模式的以上开销仅为CBC模式开销的1/3,并且这种对每一个包的开销都是恒定的。
在IPSec中,涉及加密的还有SA的建立过程。ISAKMP定义了协商的两个独立阶段:包括第一阶段,主要目的在于认证通信双方的身份,从而协商出ISAKMP SA,为第二阶段交换建立安全信道;第二阶段,利用安全信道建立实际的用于IPSec处理SA(即IPSec SA)。AES-CCM模式应用于SA的建立过程具体做法可以参照纯计数模式的方法,使用每一次交换过程中的唯一Message ID标识这些块序号(即Ctr值)。
AES优良的安全特性,正是在IPSec中应用AES-CCM模式的坚实安全基础。此外,关于CCM操作模式自身的安全,Jakob Jonsson[6]已经从理论上给出了完整的数学证明,结论是CCM模式提供的加密与鉴别的安全水平与其他操作模式处于同一水平线上。必须引起注意的是,AES-CCM模式使用计数模式来提供加密服务,那么如果一个计数块的值曾使用相同密钥加密的数据包中多次使用,则相同的子密钥序列也将在所有数据包中加密。这将无法保证数据的机密性。证明如下:
设两个数据包的明文序列号分别为:P1,P2,P3和Q1,Q2,Q3,它们的子密钥序列为K1,K2,K3.加密后它们的密文为
(P1,XOR,K1) , (P2,XOR,K2) , (P3,XOR,K3)
(Q1,XOR,K1) , (Q2,XOR,K2) , (Q3,XOR,K3)
如果攻击者获得这两个密文,这将对数据的安全性带来灾难性的后果。
这是因为:
(P1,XOR,K1) XOR (Q1,XOR,K1) =P1 XOR Q1
(P2,XOR,K2) XOR (Q2,XOR,K2) =P2 XOR Q2
(P3,XOR,K3) XOR (Q3,XOR,K3) =P3 XOR Q3
一旦攻击者获得两个明文的异或值,那么他就很容易的分离出明文。任何分组密码使用同一密钥加密两个明文,都会导致明文的泄漏。
因此,AES-CCM模式不应使用静态手工配置密钥方式,以确保不会使用同一密钥加密两个明文。在AES-CCM模式下,我们使用IKE协议用于建立全新的密钥(Fresh Key)。
AES-CCM模式作为一种全新的操作模式,由于同时提供加密与认证服务,在IPSec中应用中,与其他操作模式相比具有巨大的优势。目前,已经证明AES算法具有良好的安全保障。由于项目实施的安全与加密算法有关而与操作模式无关,AES-CCM模式的安全性也同样能够得到保障。因此在基于IPSec的应用中,AES-CCM模式具有良好的使用前景。
但是,IPSec在实际应用中存在不足,会对其他协议产生不良影响。在多播源验证和密钥管理上,还存在着一些现在无法妥善解决的问题。另外在使用AES算法时,要根据IPSec协议的定义和实际应用情况对加密算法使用进行一些必要的协调,这些都是在安全领域中值得研究和进一步解决的实际问题。
[1] William Stallings.密码编码学与网络安全:原理与实践[M].第二版.北京:电子工业出版社,2001
[2] Bruce Schneier.应用密码学:协议、算法与C源程序[M].第二版.北京:机械工业出版社,2000
[3]Stinson D R. 密码学原理与实践(第二版) [M]. 冯登国译. 北京: 电子工业出版社, 2003
[4]Housley R, Whiting D, Ferguson N. CCM:AES Mode of Operation[EB/OL] http://csrc.nist.gov/encryption/modes/proposedmodes/, 2002
[5]Gladman B. A specification for Rijndael, the AES algorithm (V3.3) [EB/OL].http: //fp.gladman.plus.com/ cryptography- technology/rijndael/aesspec.pdf, 2002
[6]P.R. Zimmermann.PGP Source Code and Internals[M].MIT Press.1995
[7]ISO/IEC/JTC 1/SC 27.ISO 8372-87 Information processing-modes of operation for a 64-bit block cipher algorithm[EB/OL].http://www.eos.org.eg/web_en/cat/items/d15530.html. 1987/2003-06-02