密码学原理与实践——流密码和分组密码概要

前言

此类型文章主要记录本人关于密码学原理相关内容的学习过程。参考书为中国工信出版集团、电子工业出版社旗下的《密码学原理与实践》(第三版)[加] Douglas R.Stinson著、冯登国等译。这本书我认为在数学原理和安全论证方面讲述是我读其他书没有的,如果要想学懂密码学数学原理和应用逻辑的话,这本书是极好的,但是同时对密码感兴趣,且不需要研究深入,可以阅读日本同志编写的著名图解系列《图解密码学技术》,对初学者熟悉密码世界且不需要太深入的密码学知识的同学来说是极好的。


流密码和分组密码

连续的明文元素是使用相同的密钥K来加密的,即密文串使用的是如下方法得到:
y = y 1 y 2 . . . = e k ( x 1 ) e K ( x 2 ) . . . y=y_1y_2...=e_k(x_1)e_K(x_2)... y=y1y2...=ek(x1)eK(x2)...
这种类型的密码体制通常被称为分组密码(Block Cipher)。我们目前使用的对称密码算法里的DES、AES都是分组密码算法。明文消息在二进制编码后的序列会被分割为固定长度的组,用同一密钥和算法对每一组加密。且通常情况是密文、明文等长。而且在数据块分组变换的过程中将会使用到多种反馈处理方式。

另一种成为流密码(Stream Cipher)。其基本思想是产生一个密钥流 z = z 1 z 2 . . . z=z_1z_2... z=z1z2...,然后使用它根据下述规则 e ( x ) e(x) e(x)来加密明文串 x = x 1 x 2 . . . x=x_1x_2... x=x1x2...
y = y 1 y 2 . . . = e z 1 ( x 1 ) e z 2 ( x 2 ) . . . y=y_1y_2...=e_ {z_1}(x_1)e_{z_2}(x_2)... y=y1y2...=ez1(x1)ez2(x2)...
最简单的流密码是其密钥流直接由初始密钥由特定算法变换得来,同时密钥流和明文串是相互独立的。这种类型的流密码称为“同步”流密码。其中书上对其有数学模型的定义。

流密码的描述

古典密码学中的维吉尼亚密码(单表代换密码,密钥确定,每个字母对应的数字都会被加密变换成对应的唯一数字),我们可以利用其对同步流密码定义做出解释。假设 m m m为维吉尼亚密码的密钥长度,则密钥流通常会被定义为周期型的密钥流 K 1 k 2 . . . k m k 1 k 2 . . . k m k 1 k 2 . . . K_1k_2...k_mk_1k_2...k_mk_1k_2... K1k2...kmk1k2...kmk1k2...。则密钥字长为 m m m的维吉尼亚密码可以看作周期为 m m m的流密码。流密码可视为“一次一密”的伪随机版

流密码通常以二元字符,0和1表示,用代数中模运算的思维加密和解密都可以看作模2的加法:
e z ( x ) = ( x + z ) m o d 2 e_z(x)=(x+z)mod2 ez(x)=(x+z)mod2,在实际中模2加法又对应于异或运算,可以很好的用硬件来完成。除了上段文字中简单介绍的固定周期密钥流算法,书中还介绍了一种产生同步密钥流的方法,从初始向量 ( k 1 , k 2 , . . . , k n ) (k_1,k_2,...,k_n) (k1,k2,...,kn)开始,并且 z i = k i , 1 ≤ i ≤ m , z_i=k_i,1≤i≤m, zi=ki1im并且利用次数为 m m m的线性递归关系来产生密钥流: Z i + m = ∑ j = 0 m − 1 c j z i + j   m o d   2 Z_{i+m}=\sum_{j=0}^{m-1}c_jz_{i+j} \bmod 2 Zi+m=j=0m1cjzi+jmod2
这里 i i i是序列号,因此 i ≥ 1 i≥1 i1 c 0 , c 1 , . . . , c m − 1 c_0,c_1,...,c_{m-1} c0c1...cm1是模2上的确定常数,此上面的式子理解为递归关系次数为 m m m,是因为每一个项的都依赖于前 n n n个项,依赖关系又是前面项的和,那么可以认为 Z i + m Z_{i+m} Zi+m是前面项的线性组合,所以称为线性的。不失一般性,假设取 c 0 = 1 c_0=1 c0=1,否则递归关系的次数 m − 1 m-1 m1

这里的密钥 K K K将会由 2 m 2m 2m个值组成,即 k 1 , k 2 , . . . , k m , c 0 , c 1 , . . . , c m − 1 k_1,k_2,...,k_m,c_0,c_1,...,c_{m-1} k1,k2,...,km,c0c1...cm1组成。在这里我们可以从数学符号描述的线性递归关系中能看到,这里的初始密钥向量不能全部为0,否则生成的密钥流也全为0,全为0的密钥流也就意味着密文与明文相同,失去加密意义。与固定周期为 m m m的流密码相比,如果我们选择合适的 c 0 , c 1 , . . . , c m − 1 c_0,c_1,...,c_{m-1} c0c1...cm1常数值,则非零初始向量 ( k 1 , k 2 , . . . , k n ) (k_1,k_2,...,k_n) (k1,k2,...,kn)会产生出周期为 2 m − 1 2^m-1 2m1的密钥流。这种线性递归的办法,核心上也是利用短密钥流通过固定的处理方法生成较长的密钥流。
注意2^m-1 的得出是比较清晰的,在0,1两种数值可能的情况下,线性递归出的排除初始向量后的密钥流是有2^m-1种可能,减去的一种是不可能出现的全0

总结

这种密钥流产生的办法,在具体实现上,可以使用线性反馈移位寄存器(LFSR)以硬件的方式来有效实现,也就是选用 m m m级的移位寄存器,向量 ( k 1 , k 2 , . . . , k n ) (k_1,k_2,...,k_n) (k1,k2,...,kn)来初始化移位寄存器,在每一个时间单元,就进行一次运算。
线性反馈移位寄存器(LFSR)学习链接

在流密码中,密钥流产生不仅和初始密钥有关,还可以与明文元素或密文元素有关。这种类型的 流密码称为异步流密码,书中给出一种源于维吉尼亚的一部流密码,称为自动密钥密码。称为自动的原因是因为它使用明文来构造密钥流(除开初始密钥)。当然,由于仅有26个可能的密钥,自动密钥密码是不安全的。


分组密码的工作模式

在分组密码当中,数据块的处理有多种方式。工作模式本质上是一种增强密码算法或者使得密码算法适应具体应用的技术。在早期针对DES开发了4种分组密码工作模式,这些工作模式已成为标准并于1980年12月发布在FIPS Publication 81中。NIST(SP 800-38A)定义了五种工作模式这些工作模式是适用于任何分组密码,下面将介绍6中工作模式,前4种是原被DES采纳的工作模式。

  • 电码本模式(ECB模式)
  • 密码反馈模式(CFB模式)
  • 密码分组链接模式(CBC模式)
  • 输出反馈模式(OFB模式)
  • 计数模式(CTR模式)
  • 分组密码链接-消息认证码(CCM模式)

前五种密码,在各类参考书中都是比较常见的,下面做一个表格,简单区分一下五种工作模式

模式描述典型应用
电码本(ECB)这种工作方式就如同名称一样,类似于古典密码的形式,使用相同的密钥对明文分组单独加密。单个数据的安全传输(如一个加密密钥)
密文反馈(CFB)一次处理输入的s位,上一个密文分组作为加密算法的输入,产生的伪随机数输出与明文异或后座位下一单元的密文面向数据流的通用传输,认证
密文分组链接(CBC)加密算法的输入是上一个密文分组和下一个明文分组的异或面向分组的通用传输,认证
输出反馈(OFB)与CFB是类似的,只是加密算法的输入是上一次加密的输出,加密算法输出再与明文进行异或得到密文噪声信道上的数据流的传输(如卫星通信)
计数器(CTR)每个明文分组都与一个经过加密的计数器异或,且对每个后续的分组,计数器增1面向分组的通用传输,用于高速需求

下面还提供一个在网络上搜集到的表格,暂时找不到出处了。总结了五种攻击模式的优缺点。

模式名称优点缺点备注
ECB模式电子密码本模式简单、快速、支持并行运算(加密、解密)明文中的重复排列会反映在密文中;通过删除、替换密文分组可以对明文进行操作;对包含某些比特错误的密文进行解密时,对应的分组会出错;不能低于重放攻击。不应使用
CBC模式密文分组链接模式明文的重复排列不会反映在密文中;支持并行计算(仅解密);能够解密任何密文分组对包含某些分组损坏的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;但是比特缺失,则会导致缺失位后无法解密;加密不支持并行计算CRYPTREC推荐;《实用密码学》推荐
CFB模式密文反馈模式不需要填充(padding);支持并行计算(仅解密);能够解密任意密文分组加密不支持并行计算;对包含某些错误比特的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错;不能抵御重放攻击CRYPTREC推荐
OFB模式输出反馈模式不需要填充(padding);支持并行计算;加密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错不支持并行计算;主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转CRYPTREC推荐
CTR模式计数器模式不需要填充(padding);支持并行计算;加密解密使用相同结构;对包含某些错误比特密文解密时,只有明文中相应的比特会出错;支持并行计算(加密、解密)主动攻击者反转密文分组中的某些比特时,明文分组中相应的比特也会被反转CRYPTREC推荐;《实用密码学》推荐

填充机制介绍

在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据使其凑满一个分组长度,这在分组密码算法中是常用的。

填充提示攻击(Padding Oracle Attack)

填充这个机制也存在一些漏洞攻击者反复发送一段密文,每次发送都对填充部分的数据进行少许改变。由于接收者(服务器)在无法正确解密时会返回错误消息,攻击者则通过这一错误消息获得一部分与明文相关的信息。2014年对SSL 3.0造成重大影响的POODLE攻击实际上就是填充提示攻击。防御这种攻击,需要对密文进行认证,确保密文是合法发送者在知道明文内容的前提下生成。未来有机会时,复现学习一下这种攻击模式。

ECB模式

这是最简单的模式,它一次处理一个明文分组,每次都是用相同的密钥加密。使用“电码本”一词的原因还是,对于给定的密钥,每个 b b b位的明文分组只有唯一的密文与之对应,如果存在一个很厚的电码本,那么任意一个 b b b位的明文,都可以在电码本中查到相应的密码。下面是ECB模式的流程图:
ECB

明文块有唯一的密文块与之对应,那么消息中相同的明文分组会产生相同的密文,这个敌手进行密码分析给予了足够的空间,例如可以进行代换或重排分组进行攻击。这也是ECB模式的缺点。特别是,如果攻击者能够控制消息中的某些部分(例如,通过发送带有特定标记的挑战消息),则他们可以使用ECB模式的这种弱点来获取有关其他部分的明文信息。

在讨论下面几种更复杂的分组加密工作方式时,基于ECB模式的情况,先给出文献Knudson,L.“Block Chaning Modes of Operation.” NIST First Modes of Operation Workshop, October 2000.中所列出的标准和性质,以便评估和构建优于ECB的方法。

  • 开销:自然与ECB模式中的加密解密相比,加密和解密需要额外的开销
  • 错误恢复:第i个密文分组的错误只会被模式同步后的一些明文分组继承
  • 错误传播:第i个密文分组中的错误会被第i个及后续的所有明文分组继承,意味着密文分组传输过程中会发生一位错误,而在明文分组的加密过程中不会发生计算错误。
  • 扩散:明文统计性质在密文中的反映方式。熵值较小的明文分组的特征不应在密文分组中得到体现,此处熵值较小的明文分组意味着可预测性或缺乏随机性
  • 安全:密文分组是否会泄露明文分组的信息

CBC模式

密文分组链接就是为了改进ECB的安全缺陷,也就是上段文字中的第五点要求“安全”,主要变化是让相同的明文分组加密为不同的密文分组。加密算法的输入是当前明文分组和上一个密文分组的异或,但每个分组都使用相同的密钥。
因CBC模式流程图如下:
CBC

认证特性

CBC模式除了用来实现保密性外,也用于认证。如果改变一个明文分组 x i x_i xi,那么 y i y_i yi及后面的所有密文分组都会受到影响。更明确地说,这种模式能用来产生一个消息认证码,即MAC,这个特性将在下面的CCM模式中进行讲述

初始向量

在算法设计中,第一个明文分组会与一个初始向量(称为IV)异或,产生第一个密文分组。解密时,加密算法的输出与IV异或,恢复第一个明文分组。IV与密文分组等长。初始向量IV是需要由收发双方共享的,但第三方不能预测。而且IV在未经授权情况下是不能修改的。保护IV的原因之一,攻击者可以欺骗接收者,让他使用不同的IV,攻击者能实现将第一个明文分组的某些位取反,意味着攻击者攻击者若预先改变IV中的某些位,则接收者收到的第一个明文分组会发生变化。具体的利用IV的先验知识的其他攻击方法,阅读文献[Voydock, V., and Kent., S. “Security Mechanisms in High-Level Network Protocols.” Computing Surveys, June 1983.]。

只要IV不可预测,具体选IV就不重要了,SP 800-3A推荐两种方法:第一种是用加密函数加密一个时变值,且明文加密所用的密钥下沟通。这个时变值对每次加密运算来说需是唯一的,时变值可以是一个计数器、一个时间戳或一个消息数。第二种方法是用随机数生成器生成一个随机数初始向量。
NIST SP 800-90(Recommendation for Random Number Generation Using Deterministic Random Bit Generators):定义时变值,随时间变化,具有可忽略的重复概率,如每次使用时都重新生成一个随机值、时间戳、序号,或它们的某种组合

CFB模式

本节将讨论的密码反馈模式和之后要讲述的输出反馈模式(OFB)及计数器模式模式(CRT),也可将分组密码转换为流密码,即CFB,CRT,OFB是分组密码序列化应用模式。流密码不需要将明文长度填充为分组长度的整数倍,而且可以实时操作。CFB模式在设计上,可以使明文长度与分组长度不等,在某些教材的设计中,用移位寄存器突出了这一个特点,下面在OFB模式的流程示意图中,简单展示了一下。下面是CFB模式的流程图:CFB

CFB模式中,也产生一个密钥流,用于一个同步流密码我们可以由 y 0 = I V y_0=IV y0=IV开始,然后通过加密以前的密文分组来产生密钥流元素假设为 z i z_i zi与明文异或形成密文 y i y_i yi。但是尽管CFB可视为流密码,但它和流密码的典型构造是不同的。在典型的流密码中,输入为某个初始值和密钥,输出为位流,位流再与明文进行异或运算。下文的OFB模式和CRT模式也如此。

另外在CFB模式下,与CBC模式相同,改变一个明文分组能影响以后所有的密文分组,错误扩散较大,那么可以用来构造消息认证码,这部分内容在CBC模式上已有相关描述。

串行与并行

  • 在CFB加密中,与CBC加密类似,每个正向函数的输入分组取决于之前函数的结果,因此无法并行执行多个正向密码操作。
  • 在CFB解密中,加密算法的输入只有初始时是由IV和密钥 K K K首次构建后,便可在密文与加密算法输出进行异或得到明文分组的部分(XOR部分),实现并行执行。

只使用“解密函数”

解密也是将收到的密文单元与加密函数的输出异或来得到明文单元。注意,因为明文并没有作为加密算法的输入,所以在CFB模式中解密也是使用的加密函数,而非解密函数。

OFB模式

在OFB模式中,也需要用到初始向量IV,且IV必须是一个时变值,IV对加密操作的每次执行都必须是唯一的。原因是加密输出分组序列 O i O_i Oi只取决于密钥和IV,不取决于明文。换句话说,就是对于一个给定的密钥和IV,用于与明文分组进行XOR运算的输出位流是固定的。如果两个不同消息在同一位置有一个相同的明文分组,那么攻击者就能够确定加密输出分组序列 O i O_i Oi。在下面的OFB模式流程图中,添加了移位寄存器,用于主要表示OFB模式可座位分组密码,并不需要明文分组 t t t位与加密算法的分组位数相同。
OFB

与CFB模式的对比

OFB模式与CFB模式类似。产生一个密钥流,然后将其与明文相异或,就像流密码一样工作。OFB模式和CFB相比,加密函数的输出被反馈到下一个加密函数的输入,明文和密文都不作为加密函数的输入。在加解密流程上能够完全实现并行操作。而CFB模式只能在解密流程时实现并行操作。注意在OFB模式中,与CFB模式一样,在加密解密的流程中,都只使用加密函数。因为我们把加密算法的那部分看作为密钥流 z i z_i zi生成的部分,只要密钥流的生成出来的结果是一样的,就可以通过XOR操作,进行加解密。

对最后一个分组的处理

令一个分组的长度为 b b b。如果明文的最后一个分组包含比 b b b小的 u u u位,那么最后的加密算法输出分组 O N O_N ON的最高的 u u u位用来进行XOR运算,而其余的 b − u b-u bu位丢弃不用。

优缺点分析

由于与明文进行XOR运算的输出位流是固定的。如果两个不同消息在同一位置有一个相同的明文分组,假设攻击这利用这段相同的明文分组,找到对应密文分组,通过XOR运算能得到 O i O_i Oi流的这部分。

OFB的优点之一,是传输过程中的误码不会传播,符合前文在ECB中提到的错误传播。比如,如果误码出现在 C 1 C_1 C1中,那么只会影响到 P 1 P_1 P1值,而不会影响到后续的明文单元。在CFB中, C 1 C_1 C1还作为移位寄存器的输入,因此误码可能会影响后续的所有消息。

OFB的缺点是,抗消息流修改攻击能力不如CFB。密文中的某位取反时,恢复的明文的相应位也要取反,因此攻击者能够改变回复的明文。这样,攻击者就可通过改变消息的校验和及数据部分来改变密文,而且不被纠错码发现。与CFB相比,OFB具有典型的流密码结构,因为密码生成的位流是由初始值和密钥产生的,并且生成的位流与明文异或。这个位流与明文是毫不相关的。但是与后文要讨论的流密码相比,差别是OFB一次加密一个完整的明文分组,其中一个分组通常为64位或128位。许多流密码一次加密1字节。

CRT模式

计数器模式在ATM(异步传输模式)网络安全和IPSec中的有相应的应用。CRT模式的流程结构与OFB模式类似,明文分组没有作为加密算法的输入。在OFB中加密算法的输入位是密钥和时变值(后续为加密算法结果的反馈),在CRT中,加密算法的输入是密钥和不断变化的计数器值,当然计数器值也是时变值,这样使相同密钥加密的所有消息都不同。确保计数器值唯一的办法是,对所有消息将计数器持续增1。
注意CRT模式,在实现了流程中,也只用到了加密算法。讲到这里就会发现,所述的模式有两类,一类是需要用到加解密算法的,另一类是仅用到加密算法。

计数器的优点

  • 硬件效率:与三种链接模式不同,CTR模式能够并行处理多个明文或密文分组。因为在链接模式的设计下,在处理下一个分组之前,必须要等上一个分组处理结束后得到的反馈,这就使得将算法的最大吞吐量限制为执行分组加密或解密所需时间的倒数。在CTR中,能够实现并行,吞吐量仅受到并行数量的限制。
  • 软件效率:因为在CTR模式中能进行并行计算,那么可以很好的利用支持并行功能的各类处理器,如流水线、每个时钟周期分派多个指令、大量寄存器和SIMD指令等。
  • 预处理:基本加密算法的执行并不依赖与明文或密文的输入。因此假设内存空间且不会出现内存安全时,可以实现采用预处理来准备加密盒的输出,然后将输出送入XOR函数。当实际加密或解密时,需要的操作就仅是XOR操作,能加快数据加解密转换时间。
  • 随机存取:明文或密文的第i个分组能以随机存取的方式处理。换句话说,相比于链接模式的下,密文加解密是有顺序的,这个顺序就是序列分组的顺序。但在CTR模式下,能解密已存储的全部密文中的某个明文分组,这在特定的应用场景下,能节省很多的开销。
  • 可证明安全性:能够验证CTR模式符合前面所提的安全要求。
  • 简单性:与ECB和CBC模式不同,CTR模式只要求实现加密算法,而不要求实现解密算法,这在具体实现上,会简单很多,尤其是在加密算法与解密算法差别较大的时候,比如高级加密标准。

CCM模式

讲述一下CCM模式,这在许多教材书上把它放在消息认证应用板块来讲的,很少将其在工作模式中突出。CCM模式在消息验证码中经常用到,实质上是计数模式(用于加密)和CBC模式(用于认证)的组合使用。CCM这个工作模式由NIST作为标准提出的,用于保护IEEE 802.11 WIFI局域网的安全。CCM是独立进行加密和认证方法的改进,可提供认证加密。NIST SP 800-38C提供这一标准。组成CCM模式的关键方法中除了上文讲述过的CBC模式和CTR模式,在加密部分还使用到了AES加密算法。CCM模式通过在加密过程中利用CBC模式的特性产生MAC提供认证加密。下面先讲解一下CBC-MAC。

CBC-MAC

构造一个MAC的最常用办法之一是基于一个固定的、公开的初始化向量的CBC模式。在CBC模式中,每个密文分组在用密钥 K K K通过加密算法加密之前,与下一个明文分组进行XOR运算。

具体来描述一下CBC-MAC的流程:

  1. x = x 1 ∣ ∣ . . . ∣ ∣ x n x=x_1||...||x_n x=x1∣∣...∣∣xn,是长度为 t n tn tn的比特串(对某个正整数 n n n),其中每个 x i x_i xi都是长度为 t t t的比特串
  2. 假设初始向量IV是由 t t t个0组成,设 y 0 = I V y_0=IV y0=IV
  3. for i i i ⬅ 1 to n n n
    {do y i y_i yi e K ( y i − 1 ⨁ x i ) e_K(y_{i-1} \bigoplus{x_i}) eK(yi1xi)};
    return( y n y_n yn)

最后流程反馈得出的 y n y_n yn可作为验证码。

CBC-MAC的安全性风险

已知最好的通用攻击是生日(碰撞)攻击。生日攻击基于生日悖论,一般就是举在一个班级里找到两个生日为同一天的同学概率意外地高,这种方式就在这“意外”二字,描述为主观和客观之间的差距。在CBC-MAC的上下文中,这意味着找到两个不同的消息序列,让它们产生相同的MAC。

下面描述具体过程:

  1. 生成消息:攻击者随机生成或选择大量的不同消息。这些消息被分割成块,并用CBC-MAC进行处理。

  2. 寻找冲突:攻击者计算每个消息的MAC,并尽可能寻找两个不同消息产生相同的MAC情况。由于生日攻击这个悖论,找到冲突所需尝试的次数远少于遍历所有可能的MAC值。

  3. 利用冲突一旦找到冲突,攻击者可以利用这一点来伪造消息。例如,如果两个消息 M 1 M_1 M1 M 2 M_2 M2有相同的MAC,攻击者可以向某人发送 M 1 M_1 M1并声称它是 M 2 M_2 M2,或者反过来。攻击可能会产生( 1 / 2 1/2 1/2 O ( 2 t / 2 ) O(2^{t/2}) O(2t/2)个假冒者,这句话是书上的原话,意思是通过生日攻击,攻击者可以找到这样的两个产生相同MAC的消息的概率大约为 1 / 2 1/2 1/2 O ( 2 t / 2 ) O(2^{t/2}) O(2t/2)是指攻击者执行攻击所需的时间复杂度。在这里,t是指哈希函数的输出长度(以比特为单位),例如在MD5中,t为128比特。因此, O ( 2 64 ) O(2^{64}) O(264)表示攻击者需要进行次哈希函数的计算才能找到两个具有相同哈希值的消息。概率表

  4. 安全性考虑:生日攻击表明,MAC的长度对安全性至关重要,要减小碰撞的概率。例如,使用64位的MAC意味着平均尝试约 2 32 2^{32} 232(即大约42亿)次就能找到一个冲突。增长MAC长度,128位或更长,就会降低生日攻击突破的概率。

工作流程

CCM除了产生CBC-MAC以外,就是利用上文提到的计数模式来加密增强安全性。下面用数学符号描述这个过程:

  1. K K K是加密密钥,令 x = x 1 ∣ ∣ . . . ∣ ∣ x n x=x_1||...||x_n x=x1∣∣...∣∣xn是明文。在计数模式中选择计数器ctr。计数器序列 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0T1...Tn的构造方法为: T i = c r t + i m o d    2 m , m 为密码的分组长度 , n 为明文长 T_i=crt+ {i\mod2^m},m为密码的分组长度,n为明文长 Ti=crt+imod2mm为密码的分组长度,n为明文长
  2. 加密明文分组 y i = x i ⨁ e K ( T i ) y_i=x_i \bigoplus e_K(T_i) yi=xieK(Ti)然后计算 t e m p = C B C − M A C ( x , K ) temp=CBC-MAC(x,K) temp=CBCMAC(x,K) y ′ = T 0 ⨁ t e m p y'=T_0\bigoplus temp y=T0temp
  3. 然后为了解密和验证 y y y,首先使用 T 0 , T 1 , . . . , T n T_0,T_1,...,T_n T0T1...Tn的计数模式解密 y = y 1 ∣ ∣ . . . ∣ ∣ y n y=y_1||...||y_n y=y1∣∣...∣∣yn,得到明文串,然后计算 C B C − M A C ( x , K ) CBC-MAC(x,K) CBCMAC(x,K)并验证其是否等于 y ′ ⨁ T 0 y'\bigoplus T_0 yT0,如果不相等,那么密文会被拒绝

CCM模式在SP 800-38C中,定义的认证/加密过程就更为复杂。有以下几个特点:

  1. CCM加密过程的输入包括三个部分,将被认证和加密的明文消息P、将被认证但不需要被加密的关联数据A(协议运行时,协议首部必须以明文传送,但是同样协议协商内容也需要得到认证保护)、赋给净荷和关联数据的时变值N(对于协议关联寿命期内的每个实例,N的取值是不同的,以阻止重放攻击或者其他攻击)。
  2. 对于加密,生成的计数器序列必须与时变值无关。这是因为CCM模式要求计数器序列具有一致性和可预测性。如果计数器序列与时变值相关,那么每次加密的输入就会有所不同,这将导致每次加密的结果都不同。这将破坏CCM模式的一致性和可预测性,使得解密和验证加密数据的完整性的复杂度得到提升。
  3. 该标准要求对时变值的长度和标记的长度进行折中,对时变值的长度和标记的长度进行折中考虑是为了在保证安全性的同时,提高加密和解密的效率。这有助于实现更加高效和安全的通信和数据传输。但这是不必要的限制。
  4. 在标准中,详细描述了认证和加密的过程,尤其注意与上面的数学符号描述一样,CBC-MAC只需要通过0次序的计数器序列进行加密即可。

小结

除了ECB模式外,NIST批准的所有分组加密工作模式都含有反馈。将这个反馈机制描述的更准确一些就是,认为加密函数从输入寄存器获得输入,而把输出存储到输出寄存器中,其中输入寄存器的长度等于加密分组长度。输入寄存器由反馈机制每次更新一个分组。每次更新后,加密算法执行一次,将结果放在输出寄存器中。
注意,OFB和CTR模式的输出独立于明文和密文,CFB模式的输出没有独立于密文,因此只有它们两种是流密码的自然候选算法,以简化的思想来看,加密密文的过程就是经过了一次XOR运算。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值