一种可控并行CBC分组密码工作模式的加解密方法

文档序号:32862637发布日期:2023-01-07 01:06阅读:36来源:国知局
一种可控并行CBC分组密码工作模式的加解密方法
一种可控并行cbc分组密码工作模式的加解密方法
技术领域
1.本发明涉及数据安全技术领域,尤其涉及一种可控并行cbc分组密码工作模式的加解密方法。


背景技术:

2.物联网对数据的感知、云计算对数据的存储利用,促进了以快速分析数据提供有价值的判断能力的大数据时代的到来,海量数据的分析技术受到人们的普遍关注,数据呈现出tb级规模的增长态势,高价值的数据逐渐成为核心竞争资产。与此同时,数据的安全性、可用性也面临着新的挑战,发展高速的海量数据加密技术以保证数据机密性与防篡改迫在眉睫。
3.目前,大数据加密的主流方案是分组密码体制和公钥密码体制相结合的方案,即先采用分组密码对大数据进行加密,再使用公钥密码对分组密码的密钥进行加密保护。1980年,美国国家标准局(现在的nist)公布了4种分组密码工作模式,它们分别是ecb(electronic codebook)、cbc(cipherblockchaining)、cfb(cipher feedback)和ofb(output feedback)。在此基础上人们又做了大量的工作,相继提出了一系列工作模式,如ocb(offset codebook),iapm(integrity aware parallelizable mode),eax等。其中,cbc模式简单易行,具有选择明文攻击下的安全性,相比其他模式具有更好的安全性,并且重复的明文分组不会在密文中暴露出这种重复关系,避免了ecb模式的一些缺陷。因此,cbc模式运用最为广泛,现在的大数据加密也常常采用cbc模式。
4.cbc模式如图1所示,它一次对一个明文分组加密,每次加密使用同一密钥k,加密算法的输入是当前明文分组和前一密文分组的异或,第一个明文分组和一个随机的初始化向量iv异或。
5.cbc模式的明文分组记为mi,对应的密文分组为ci(1≤i≤s),s为总分组数,则cbc模式的加密方程为:
[0006][0007]
解密方程为:
[0008][0009]
从图1可以看出,cbc工作模式中存在反馈形式的迭代,属于串行加密,制约了数据的加密速度。而大数据时代的数据具有数据体量大、数据类型多样等特点,传统的加密技术在加密速度方面已存在掣肘因素。因此,需要构造并行密码体制,结合并行计算理论,以应对海量数据加密,保障核心数据的安全。冯晓等人给出了硬件级别的分组密码的并行处理架构;师金钢等人探究了云环境中海量数据的并行分组密码体制,但也只是借助了mapreduce并行框架,并未对模式本身进行改造。
[0010]
目前,对cbc模式的改进并不多。温凤桐对cbc模式进行了安全性增强,但加密速度
并没有提升;樊凌雁等人给出了cbc模式下sm4算法的芯片级实现,但并未对模式本身进行改进。


技术实现要素:

[0011]
为提升cbc模式的加密速度,本发明提供一种可控并行cbc分组密码工作模式的加解密方法,不仅能够根据需要自由控制并行度,且在不改变原分组密码操作模式的密码学特征的前提下,几乎可以达到线性的加速比。
[0012]
一方面,本发明提供一种可控并行cbc分组密码工作模式的加密方法,包括以下步骤:
[0013]
步骤1:设定并行度n,根据原cbc模式中第x个明文分组的记号x和并行度n确定cp-cbc模式下明文分组和密文分组中的行号i和列号j;其中,cp-cbc模式为可控并行cbc分组密码工作模式;1≤x≤s,|m|表示明文长度,l表示分组大小;
[0014]
步骤2:在cp-cbc模式中,设定i=1时为扩展阶段;对于扩展阶段的明文分组和称为的前驱分组,为的后继分组;其中,2≤j≤n;
[0015]
设定i≥2时为并行加密阶段;对于并行加密阶段的明文分组和称为的前驱分组,为的后继分组;其中,1≤j≤n;
[0016]
步骤3:在扩展阶段,按照原cbc模式对n个明文分组进行串行加密,得到对应的n个密文分组其中,1≤j≤n;
[0017]
步骤4:将扩展阶段产生的n个密文分组分别作为并行加密阶段的初始化向量,开启n条并行的加密链;其中,同一条加密链中,按照原cbc模式进行串行加密。
[0018]
进一步地,步骤1具体包括:
[0019][0020][0021]
进一步地,步骤3中,扩展阶段的加密方程具体为:
[0022][0023]
其中,ek表示加密算法。
[0024]
进一步地,步骤4中,并行加密阶段的加密方程具体为:
[0025][0026]
其中,ek表示加密算法。
[0027]
进一步地,还包括:在进行加密之前,采用pkcs7填充算法对明文进行填充。
[0028]
另一方面,本发明还提供一种可控并行cbc分组密码工作模式的解密方法,包括:
[0029]
步骤1:获取并行度n,根据并行度n对密文进行分组,得到密文分组;
[0030]
步骤2:在cp-cbc模式中,设定i=1时为扩展阶段;对于扩展阶段的密文分组和称为的前驱分组,为的后继分组;其中,2≤j≤n;
[0031]
设定i≥2时为并行解密阶段;对于并行解密阶段的密文分组和称为的前驱分组,为的后继分组;其中,1≤j≤n;
[0032]
步骤3:在扩展阶段,按照原cbc模式对n个密文分组进行解密,得到对应的n个明文分组其中,1≤j≤n;
[0033]
步骤4:将扩展阶段的n个密文分组分别作为并行解密阶段的初始化向量,开启n条并行的解密链;其中,同一条解密链中,按照原cbc模式进行解密。
[0034]
进一步地,步骤3中,扩展阶段的解密方程具体为:
[0035][0036]
其中,dk表示解密算法。
[0037]
进一步地,步骤4中,并行解密阶段的解密方程具体为:
[0038][0039]
其中,dk表示解密算法。
[0040]
本发明的有益效果:
[0041]
本发明提出的一种可控并行cbc分组密码工作模式的加解密方法,可以实现近似线性加速比,并且可以自由控制并行度n,同时保持了传统cbc模式的安全特性,即在lor-cpa模型下是可证明安全的。针对字节反转攻击和填充攻击,本发明方案在不公开并行度n的前提下,对攻击更具抗性,安全性相比传统的cbc模式具有一定的提升。
附图说明
[0042]
图1为cbc工作模式的加解密方法的流程示意图:(a)为加密过程;(b)为解密过程;
[0043]
图2为本发明实施例提供的一种可控并行cbc分组密码工作模式的加密方法的流程示意图;
[0044]
图3为本发明实施例提供的一种可控并行cbc分组密码工作模式的解密方法的流程示意图。
具体实施方式
[0045]
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0046]
为表述方便,本文中的一些符号约定如下:
[0047]
表1符号表
[0048][0049][0050]
其中,明文分组和密文分组的上标i和下标j确定了该分组所在的行和列。
[0051]
实施例1
[0052]
如图2所示,本发明实施例提供一种可控并行cbc分组密码工作模式的加密方法,包括以下步骤:
[0053]
s101:对明文进行填充;
[0054]
具体地,分组密码体制要求待加密的明文长度是分组长度的整数倍,对于最后一个明文分组往往难以恰好形成一个完整的明文分组,这时候就需要填充。
[0055]
pkcs7填充算法是目前比较常用的填充算法,该填充算法需要在原始数据末尾附加一系列pad字节,pad的值既是待填充的字节,同时也是需要填充的字节数,具体为:
[0056]
pad=l-(|m|modl)
[0057]
其中,l为分组大小,|m|表示明文长度,1≤l≤255。
[0058]
以aes为例,填充示例如表2所示。
[0059]
表2 pkcs7填充格式
[0060][0061]
s102:设定并行度n,根据原cbc模式中第x个明文分组的记号x和并行度n确定cp-cbc模式下明文分组和密文分组中的行号i和列号j;其中,cp-cbc(controlled parallel cipher block chaining)模式为可控并行cbc分组密码工作模式;1≤x≤s,|m|表示明文长度,l表示分组大小;
[0062]
具体地,根据实际加密场景下处理机的个数以及加密需求确定并行度n。行号i和列号j的计算过程如下:
[0063][0064]
[0065]
s103:在cp-cbc模式中,设定i=1时为扩展阶段;对于扩展阶段的明文分组和称为的前驱分组,为的后继分组;其中,2≤j≤n;
[0066]
设定i≥2时为并行加密阶段;对于并行加密阶段的明文分组和称为的前驱分组,为的后继分组;其中,1≤j≤n;
[0067]
具体地,按照每行n个分组的排列,则可以确定分组的总行数由于明、密文的排布按行划分,所以并行加密阶段的前驱分组和后继分组在合并后的密文中相差n个分组。
[0068]
s104:在扩展阶段,按照原cbc模式对n个明文分组进行串行加密,得到对应的n个密文分组其中,1≤j≤n;
[0069]
具体地,扩展阶段的加密方程,即第一行的n个分组的加密方程具体为:
[0070][0071]
其中,ek表示加密算法。
[0072]
s105:将扩展阶段产生的n个密文分组分别作为并行加密阶段的初始化向量,开启n条并行的加密链;其中,同一条加密链中,按照原cbc模式进行串行加密,即和前驱分组异或后再进行加密。
[0073]
具体地,各加密链之间相互独立,呈现并行关系。并行加密阶段的加密方程具体为:
[0074][0075]
其中,ek表示加密算法。
[0076]
本发明实施例提供的可控并行cbc分组密码工作模式的加密方法的核心思想是利用部分已产生的密文作为初始化向量开启新的加密链。
[0077]
需要说明的是,对于加密方法中的最后一行,图2中给出的是并行度n恰能整除明文分组个数的理想情况。
[0078]
实施例2
[0079]
对应上述的加密方法,如图3所示,本发明实施例提供一种可控并行cbc分组密码工作模式的解密方法,包括以下步骤:
[0080]
s201:获取并行度n,根据并行度n对密文进行分组,得到密文分组;
[0081]
具体地,加密方法得到的密文c是由若干个密文分组连接而成,例如具体为:
[0082][0083]
其中,d表示最后一行的明文或密文分组个数,存在
[0084]
因此,为了后续的解密过程,首先需要对整个密文进行分组,具体将密文c分为:
[0085]
s202:在cp-cbc模式中,设定i=1时为扩展阶段;对于扩展阶段的密文分组和称为的前驱分组,为的后继分组;其中,2≤j≤n;
[0086]
设定i≥2时为并行解密阶段;对于并行解密阶段的密文分组和称为的前驱分组,为的后继分组;其中,1≤j≤n;
[0087]
s203:在扩展阶段,按照原cbc模式对n个密文分组进行解密,得到对应的n个明文分组其中,1≤j≤n;
[0088]
具体地,扩展阶段的解密方程具体为:
[0089][0090]
其中,dk表示解密算法。
[0091]
s204:将扩展阶段的n个密文分组分别作为并行解密阶段的初始化向量,开启n条并行的解密链;其中,同一条解密链中,按照原cbc模式进行解密。
[0092]
具体地,并行解密阶段的解密方程具体为:
[0093][0094]
其中,dk表示解密算法。
[0095]
最后,即可得到明文m,具体为:
[0096][0097]
下面对本发明提供的加密方法的安全性进行具体分析。
[0098]
本发明方案的两个阶段——扩展阶段和并行加密阶段,本质上仍是cbc模式。扩展阶段串行产生密文由于密文具有良好的随机性,并且加密结果随明文m和初始化向量iv的不同而不同,具有不可预测性,所以将这n个分组产生的密文分别作为并行加密阶段的初始化向量开启n条并行的cbc加密链。所以,本发明方案保持了传统cbc模式的安全特性,即在lor-cpa模型下是可证明安全的。
[0099]
因此,不再从可证明安全的角度对本发明方案的安全性进行证明,但将从攻击路线的角度进行分析。目前,针对cbc模式较为有效的攻击方案包括:字节反转攻击和填充攻击。下文将分别从这两种攻击分析cp-cbc模式的安全性。
[0100]
根据上述的实施例,可以分别将本发明的加密过程(如公式(1))和解密过程(如公式(2))概述为:
[0101][0102][0103]
(1)字节反转攻击
[0104]
字节反转攻击(byte-flippingattack,bfa)的核心思想是利用前驱密文分组对后一明文分组的影响来实现特定位置的明文篡改。根据上述的cp-cbc模式的解密方程,即公式(2),第一个明文分组需和初始化向量iv异或后才进行加密,后续的明文分组需和前一组的密文异或才进行加密。
[0105]
存在结论1:并行度n不公开的条件下,字节反转攻击的思路仍能攻击cp-cbc模式,攻击代价和n成正比;该结论验证过程如下:
[0106]
由于字节反转攻击仅考虑前驱分组和后继分组之间的关系,所以将前驱分组和后继分组简记为第n-1个和第n个分组,根据第n-1组密文某一位的值a,以及第n组密文相同位置经过解密后的值b,容易得到第n组明文该位置上的明文c
[0107][0108]
如果修改第n-1组的密文a,将其与明文c进行异或运算得到继续上述操作,由异或性质得到下式
[0109][0110]
由此可见,计算出的明文被篡改成了0。进一步地,明文可以随意更改成任意字符x,只需在a

的基础上再异或x,得到类似可得
[0111][0112]
此时,我们已经通过修改密文将明文更改为任意想要的字符。对于第一个分组,利用该原理更改iv即可。特别地,在cp-cbc模式的扩展阶段,即i=1时,不仅用于和异或,还用于和异或。若敌手想同时篡改这两处的明文,这将对敌手造成困扰。
[0113]
在已知部分明文和密文的条件下,并且能够定位到该明文所在分组的前驱密文分组,字节反转攻击可以实现特定位置的明文篡改。根据cp-cbc模式的密文排布(如图2所示),并行加密阶段的和它的前驱分组之间相差n个分组。若不公开并行度n,除上述操作外,攻击者想要实现明文的篡改还需要试探n的取值,且n的取值越大,攻击者的破解难度越高,平均攻击耗时和n成正比。
[0114]
因此,相比传统的cbc模式,本发明提出的cp-cbc模式对于字节反转攻击的抗攻击能力更高,安全性具有一定的提升。
[0115]
(2)填充攻击
[0116]
填充攻击(padding oracle attack,poa)存在一个接收者对接收到的密文进行解密,并检查解密后的结果是否满足填充规则,如果满足则返回valid,否则返回invalid。serge vaudenay等人发明了这种使用密文填充验证应答消息攻击cbc模式的方法。基于这种思想,下面介绍针对cp-cbc模式的填充攻击。
[0117]
存在结论2:并行度n不公开的条件下,cbc模式的填充攻击的思路仍能攻击cp-cbc模式,但步骤(1)(参见下述的攻击过程)的攻击代价和n成正比。该结论验证过程如下:
[0118]
设cp-cbc模式最后一个明文分组为则其前驱分组为对应的密文分组分别为记应用对称密钥k解密密文分组后的中间结果为
即的前驱分组为则式(3)变为:
[0119][0120]
r=1或n=1时,cp-cbc模式退化成了cbc模式,攻击方法如serge vaudenay等人提出的使用密文填充验证应答消息攻击cbc模式的方法。因此,下面的讨论基于r≥2且n≥2。
[0121]
若并行度n公开,则由明文分组往前推n个分组容易定位到其前驱分组具体攻击过程如下:
[0122]
步骤(1)确定最后一个分组的填充长度:最后一个分组必然包含填充,至少一个0x01,最多16个0x10(以aes为例,参见前表2)。攻击者从其前驱分组左边第一个字节开始,将其修改成
[0123][0124]
然后将修改后的密文发送给接收者,接收者执行解密流程得到左边第一个字节为
[0125][0126]
这时,如果接收者返回invalid,表明为填充的一部分,填充长度为16。如果返回valid,那么的变化不影响填充验证,填充长度一定小于16,攻击者再仿照式(4)修改第二个字节,将异或的数减一,再次发送给接收者,重复上述操作即可获得填充长度l。
[0127]
步骤(2)破解最后一个分组的明文:得到填充长度后,攻击者就可以从右向左逐个破解明文。由pkcs#7规范得出最后一个分组最后l个字节数值全为l,即攻击者先修改的最后l个字节
[0128][0129]
其中16-l≤i《16。这样接收者执行解密流程得到最后l个字节为
[0130][0131]
所以,式(5)的效果相当于将解密后最后一个明文分组的最后l个字节变为l+1。然后攻击者尝试对倒数第l+1个字节执行
[0132][0133]
接收者执行后的效果如下
[0134][0135]
其中,x的取值范围为0x00-0xff。在这个区间有且仅有一个x使得即倒数第l+1个字节也为l+1。这时整个分组以l+1个l+1结尾,是唯一不会产生invalid的情况。根据式(7)导出
[0136][0137]
所以,只要爆破出x,攻击者即可算出明文倒数第l+1个字节为接下来攻击者将l递增,重复此过程,即可获得最后一个分组的明文。可以看出,在这种攻击方法下破解每一个明文字节平均需要发送128次修改的密文。
[0138]
步骤(3)破解非尾块的明文:对于非尾部的分组,攻击方式没有什么本质不同。攻击者去掉刚刚破解的最后一个分组,此时为末尾分组,为其前驱分组,依照式(6)更改的最后一个字节(即),然后发送给接收者。当接收到invalid消息,攻击者尝试下一个x。当接收到valid消息,需要区分下面两种情况:
[0139]

若解密后的最后一个字节为0x01,接收者必然会返回valid。因为填充必然存在,而0x01是唯一能通过验证的单字节填充情况。由式(8)得到
[0140][0141]

若解密后的最后一个字节为0x02-0x10之间的某个值,而明文数据碰巧为以下15种情况之一时,接收者也会返回valid。
[0142]
表3明文式样
[0143][0144][0145]
为区分这两种情况,攻击者在收到valid后,修改的倒数第二个字节再重发给接收者。如果是情况

,接收者仍返回valid,因为倒数第二个字节的变化对格式没有影响;如果是情况

,倒数第二个字节的变化破坏了格式,接收者返回invalid。由此鉴别出两种情况,然后应用式(8)即可。
[0146]
接下来对非尾块其他明文字节的破解,重复上述步骤(2)相同的处理,参考式(5)-(8)从右到左逐个字节破解。
[0147]
通过步骤(1)(2)(3)可以完成cp-cbc模式并行加密阶段的攻击,攻击者去掉已经
破解的分组,剩下的扩展阶段也退化成了cbc模式,攻击方法如serge vaudenay等人提出的使用密文填充验证应答消息攻击cbc模式的方法。
[0148]
若不公开并行度n,攻击者由分组定位其前驱分组需要逐步试探n的取值,且n的取值越大,攻击者的破解难度越高。为了攻击能够顺利进行,攻击者会在步骤(1)确定最后一个分组的填充长度的同时试探n的取值。若攻击者对n的某次试探,修改了前驱分组的所有字节收到的反馈均为valid,说明对该前驱分组的修改未能影响到末尾分组,即n的取值错误,攻击者令n自增1继续试探,直到收到invalid的反馈。在此过程中,攻击者要修改密文的次数和n成正比。
[0149]
因此,相比传统的cbc模式,cp-cbc模式对于该攻击更具抗攻击能力,安全性具有一定的提升。另外,该攻击的产生是由于设计使用的场景不当,导致可以通过“旁路攻击”被破解,并不是对算法本身的破解。
[0150]
衡量分组密码工作模式性能的一个重要指标就是加密速度。下面通过cbc和cp-cbc对相同明文的加密时间进行比较,分析cp-cbc模式的性能。
[0151]
存在结论3:相比cbc模式,cp-cbc模式具有近似线性加速比n。该结论的验证过程具体如下:
[0152]
设m为待加密的明文比特串,|m|为比特串m的长度,l为所选用的加密算法的位数,也即分组大小,采用pkcs7填充方案,则总分组数记单个分组的处理时间为t,其中包括异或操作和加密操作所用时间,则传统的cbc模式在输入明文为m的情况下,加密总用时为:
[0153][0154]
cp-cbc模式扩展阶段的明文分组数为并行度n,将n代入公式(10)得到扩展阶段加密用时t1=tn。并行加密阶段的用时由n条加密链中的最大用时决定,即由最大的明文分组数决定。该阶段最大明文分组数(不包括扩展阶段的那一个明文分组),代入公式(10)得到并行加密阶段用时公式(10)得到并行加密阶段用时则cp-cbc模式在输入明文为m的情况下,加密总用时为:
[0155][0156]
定义加速比:
[0157][0158]
其中t
cbc
为传统cbc模式所需的加密时间,t
cp-cbc
为可控并行cbc模式所需的加密时间。将式(10)和式(11)代入得到加速比为
[0159]
[0160]
其中对式(12)做近似计算得到加速比为
[0161][0162]
对于常用的对称加密算法,l的大小不会太大,例如sm4算法分组长度为128位,aes算法分组长度可以为128、192或256位。对于并行度n,限于实际的处理机成本,n的大小也无法过大。而对于大数据量的加密,|m|远大于l和n。所以,也就是说,在|m|趋于无穷的时候,加速比趋于n。
[0163]
cp-cbc模式解密时,由于接收方已知所有的密文分组和初始化向量iv,所以解密时和其他分组不存在依赖关系,即仍保留了传统cbc模式解密的高效性。表4给出了cp-cbc模式和一些常见模式的对比分析:
[0164]
表4 cp-cbc模式和一些常见模式
[0165][0166][0167]
因此,本发明方案对于大数据量的加密,几乎具有线性加速比。相较于传统的cbc模式,加密速度具有较大的提升。
[0168]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1