Linux加密框架中的算法和算法模式(二)

时间:2024-10-29 16:18:37
-ECB模式
ECB(Electronic Code Book,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密,如下图所示。
ECB模式加密原理
如果两个明文块相同(如明文块1和明文块2),则加密输出相同的密文块(如密文块1和密文块2)。
ECB模式的优点在于操作简单,易于实现。由于分组的独立性,利于实现并行处理,并能很好地防止误码扩散。由于所有分组的加密方式一致,明文中重复内容(即模式)会在密文中有所体现,因此难以抵抗统计分析攻击。
ECB模式一般用于小数据量的字符信息的安全性保护,例如密钥保护。
加密框架支持分组算法的ECB模式,实现源码为。
-CBC模式
1976年,IBM发明了密码分组链接(CBC,cipher-block chaining)模式。在该模式中,每个明文块先与前一个密文块进行异或后,再进行加密,如下图所示。
CBC模式加密原理
如上图所示,每个密文块都依赖于它前面所有的明文块,同时为保证每条消息的唯一性,在第一个块中需要使用初始向量IV。若第一个块的下标为1,则CBC模式的加密过程为Ci=Ek(Pi⊕Ci-1),C0=IV,而其解密过程为Pi=Dk(Ci)⊕Ci-1,C0=IV,其中Pi表示第i个明文块,Ci表示第i个密文块,E和D分别为加密器和解密器,k为密钥。
CBC模式的主要缺点在于加密过程是串行的,无法被并行化,而且明文数据必须被填充到块大小的整数倍。加密时,明文中的微小改变会导致气候的全部密文块都发生变化(即误码扩散)。解密时,从两个邻接的密文块即可得到一个明文块,因此解密过程可以被并行化,而解密时密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其他明文块的内容。
加密框架支持分组算法的CBC模式,实现源码为。
-CTR模式
CTR(Counter,计数器)模式将块密码变为流密码,通过一个递增的加密计数器以产生连续的密码流,其中计数器可以是任意保证不产生长时间重复输出的函数,使用要给普通的计数器是最简单和最常见的做法。
采用普通计数器的CTR加密流程如下所示。
CTR模式加密原理
图中Nonce(随机数)和计数器可以通过级联、相加或异或等运算使得相同的明文产生不同的密文。
CTR模式被广泛用于ATM网络安全和IPSEC应用中,与其他模式相比,具有以下特点:
1)高效率,允许进行并行计算,可以很好地应用CPU流水等并行技术;
2)随机访问,可以随机地对任意一个密文分组进行解密,对该密文的处理与其他密文无关;
3)简单性,与其他模式不同,CTR模式仅要求实现加密算法,但不要求实现解密算法。对AES等加解密本质上不同的算法来说,这种简化是巨大的。
4)预处理,算法和加密器的输出不依赖于明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,浙江极大地提高吞吐量。
5)无填充,可以高效地作为流密码使用。
加密框架支持分组算法的CTR模式,实现源码为。
-PCBC模式
PCBC(Propagating Cipher Block Chaining,填充密码块链接)模式,是一种可以使密文的微小改动在解密时导致明文大部分错误的模式,并在加密时也具有相同的特性。PCBC模式的加密流程如下所示。
PCBC模式加密流程
PCBC模式的加解密算法描述如下:
1)加密算法:Ci=Ek(Pi⊕Pi-1⊕Ci-1),P0⊕C0=IV,i=1,2,…,n。
2)解密算法:Pi=Dk(Ci)⊕Pi-1⊕Ci-1, P0⊕C0=IV,i=1,2,…,n。
对于使用PCBC模式加密的消息,互换两个邻接的密文块,不会对后续块的解密产生影响。
加密框架支持分组算法的PCBC模式,实现源码为。
注:PCBC模式或称为明文密码块链接(Plaintext Cipher Block Chaining)模式。
-CCM模式
CCM(Counter with Cipher
Block Chaining-Message Authentication Code)模式是一种同时提供加密服务和认证服务的算法模式,其中加密服务由CTR模式提供,认证服务由CBC-MAC模式提供。CCM模式融合了CTR模式和CBC-MAC模式的优点。
使用CCM模式的基本条件包括分组算法E、密钥K、计数器发生函数C(Counter Generation Function)、格式化函数F(Formating Function)和认证数据Tag长度Tlen。
在发送方,CCM模式的输入包括随机值N、有效载荷P和附加数据A,计算步骤如下所述:
1)执行格式化函数F(N,A,P),产生128bit/块的数据块序列B0、B1、…、Br。
2)对数据B(B=B0||B1||…||Br)计算CBC-MAC值T,认证数据长度为Tlen。
3)执行计数器发生函数C,产生128bit/块的计数器块ctr0、ctr1、…、ctrm,其中m=PLen/128,按照CTR模式计算Sj=Ek(ctrj)(j=0,1,…,m),再计算有效载荷P的密文C’=P⊕MSBplen(S),其中S=S1||S2||…||Sm。
4)按如下公式计算CCM模式输出密文C=C’||(T⊕MSBtlen(S0))。
当接收方接收到N、A和C时,对密文C首先进行解密得到有效载荷T和CBC-MAC值T,然后再对N、A、P计算CBC_MAC值T‘。如果T’=T说明认证通过,表示接收方从密文中解密得到的有效载荷P是真实有效的,否则表示得到的有效载荷P是无效的。
CCM模式的认证流程和加密流程如下所示。
1)认证流程
CCM模式认证流程
2)加密流程
在这里插入图片描述
加密框架支持分组算法的CCM模式,实现源码为。在中,除支持标准的CCM模式(记为ccm)外,还支持基本的CCM模式(记为ccm_base)和基于RFC4309的CCM模式(记为rfc4309,即CCM(AES))。ccm和ccm_base两种CCM模式的区别在于输入参数和衍生算法的算法命名,ccm只需要一个输入参数,即基础算法名cipher_name,然后构造出CTR模式算法(即ctr(cipher_name))和CCM模式算法(即ccm(cipher_name)),而ccm_base的输入参数除基础算法名cipher_name外还包括CTR模式算法名ctr_name,构造出的CCM算法名为ccm_base(ctr_name,cipher_name)。
注:RFC4309:Using Advanced Encryption Standard(AES) CCM Mode with IPSEC Encapsulating Security Payload(ESP)。
-GCM
同CCM模式,GCM模式(Galois/Counter Mode)也是一种同时提供加密服务和认证服务的算法模式,其中加密服务由CTR模式提供,认证服务由定义在伽罗华(Galois)域内的泛散Hash函数提供。GCM模式是建立在128比特分组密钥基础上的。
(加密原理太复杂,暂时未搞明白)
加密框架支持分组算法的GCM模式,实现源码为。同CCM模式相同,中定义了标准GCM模式(记为gcm)、基础GCM模式(记为gcm_base)和基于RFC4106的GCM模式(记为rfc4106)共三种不同GCM模式。
注:RFC4106:The use of Galios/Counter Mode(GCM) in IPSEC Encapsulating Security Payload(ESP)。
-CTS模式
CTS模式(Cipher Text Stealing Mode,密文窃取模式)可以处理任意长度的明文,产生与明文相匹配的密文。CTS模式除明文的最后两个块外的其他块的处理方式与CBC模式相同。
将明文的最后开两个块为Pn-1和Pn,其中Pn-1的长度等于块长度BB,Pn的长度Ln为1到BB的任意值,处理流程如下所示。
1)Xn-1=Pn-1⊕Cn-2,其中Cn-2为Pn-1前一个块Pn-2对应的密文;
2)En-1=Ek(Xn-1),Cn=MSBln(En-1);
3)在Pn末尾填充0创建长度为BB的Pn’;
4)Dn=En-1⊕Pn’,Cn-1=Ek(Dn)。
经过上述计算得到明文最后两个块Pn-1和Pn的密文Cn-1和Cn。
加密框架支持分组算法的CTS模式,实现源码为。
-LRW模式
LRW模式采用可调分组密码模块,曾经是IEEE P1619窄块加密标准候选算法模式中最有希望的。由于使用非链式结构,因此LRW模式可以有效支持并行操作。除明文和密钥外,LRW模式还有第3个输入,叫扰乱因子,其作用非常类似于CBC模式中的初始向量,但具有易变性。根据定义,可调分组密码应该具有改变扰乱因子的性能,这样比更换密钥更有效率。
加密框架支持分组算法的LRW模式,实现源码为。
-XTS模式
XTS模式是基于XEX的密文窃取可调密码模块,被认为是当前最适合于磁盘加密的窄块加密模式,已经被IEEE P1619标准采用。
加密框架支持分组算法的XTS模式,实现源码为。
-CMAC模式
除HMAC外,还有一种常见的MAC运算,即CMAC。CMAC全称为Cipher-based MAC,即基于AES等对称加密方式实现的消息认证。最常见的CMAC是基于分组密码的CBC模式构造的MAC,即CBC-MAC,被很多国际组织和结构定为标准,如标准ANSI X9.9,FIPS PUB 113和ISO/IEC 9797,是金融贸易中使用最为广泛的消息认证码。
由于CBC模式加密时,当改变一个明文分组时,其对应密文分组及气候的密文分组都会受到影响,这一性质使CBC模式能被用来产生一个消息认证码,它能使消息接收方相信给定的明文序列的确来自合法的发送者,而没有被篡改。
CMAC共使用三条密钥,一个位长为k的加密密钥,用于密文分组链接的每一步,两个位长为n的密钥,分别用于满分组和不满分组的最后一个明文分组的处理。两个位长为n的密钥可以从加密密钥导出,无需单独提供。
满分组时CMAC计算流程:
满分组CMAC计算流程
不满分组时CMAC计算流程:
不满分组CMAC计算
注:CMAC于2005年通过NIST认证。
-XCBC模式
XCBC模式(Extend Cipher Block Chaining Mode)由美国学者John Black和Phillip Rogaway于2000年提出的,作为CBC模式的扩展,已被美国*采纳为标准。XCBC模式和CBC模式的区别在于最后一个数据块的处理方式不同,XCBC模式不像CBC模式要求最后一个数据块必须是整块,也可以是短块。XCBC模式具有CBC模式的所有优缺点。
加密框架支持分组算法的XCBC模式,实现源码为,但不是作为一种分组加密模式,而是用来构造MAC,即XCBC-MAC。

相关文章