一种分组密码FBC的实现方法及装置与流程

文档序号:18702271发布日期:2019-09-17 23:05阅读:1082来源:国知局
一种分组密码FBC的实现方法及装置与流程
本发明属于信息安全
技术领域
,具体涉及一种分组密码fbc的实现方法以及相应的装置。
背景技术
:分组密码是一种主流的密码体制之一。由于其明文信息有良好的扩展性,对插入的敏感性,不需要密钥同步及较强的适用性,分组密码适合作为加密标准。目前分组密码所采用的整体结构可分为feistel结构(例如cast—256、deal、dfc、e2等)、sp网络(例如safer+、serpent等)及其他密码结构(例如frog和hpc)。加解密相似是feistel型密码的一个实现优点,但它在密码的扩散似乎有些慢,例如需要两轮才能改变输入的每一个比特。sp的网络结构非常清晰,s一般被称为混淆层,主要起混淆作用。p一般被称为扩散层,主要起扩散作用。在明确s和p的某些密码指标后,设计者能估计sp型密码抵抗差分密码分析和线性密码分析的能力。sp网络和feistel网络相比,可以得到更快速的扩散,但是sp密码的加/解密通常不相似。目前bit-slice技术是实现分组密码的一种有效手段,具有良好的安全性。但是对明文分组的行之间的混淆程度不够,通常的做法是对明文分组进行列变换之后再进行一个线性行变换,从而保证行之间的混淆程度,相应地也增加了密码实现的代价。针对这一问题,本发明通过选取合适的s盒以及循环移位的位数,只需要进行s盒变换以及循环移位相加,就能达到之前需要进行行变换的效果,在保证行之间混淆程度的情况下,使得密码实现的开销达到最优。技术实现要素:针对现有技术中存在的技术问题,本发明的目的在于提供一种快速、高效分组密码fbc实现方法以及相应的装置。本发明分组密码实现方法的具体方案如下:一种分组密码fbc的实现方法,其特征在于包括以下步骤:1.一种分组密码fbc的实现方法,其特征在于包括以下步骤:步骤1.1:将明文数据按每组n比特分成明文数据组,n可取128和256;步骤1.2:设置主密钥k,其长度为m比特,由主密钥k产生分组密码fbc的轮密钥;其中,m=nn,n为自然数;步骤1.3:设置循环左移位的比特位数s和t(对明文数据分组进行s盒变换后通过循环移位相加实现行之间的混淆);步骤1.4:设置分组密码算法fbc的轮函数f,并设置该密码算法的轮数r;步骤1.5:对n比特明文p,将其分成4个w比特的字,利用轮密钥和轮函数f按四路两重feistel结构对明文p进行r轮加密,得到密文c。本发明在对明文数据组p进行s盒变换后,添加了一个行变换v是s盒变换后的中间变量,s,t为步骤1.3中选取的参数,s,t参数的选取使得在同样的混淆程度下,实现代价达到最优。所述正整数n可取128或256;m可取128或256;s和t为正整数;加密轮数r可取48、64或80。步骤1.2具体操作为:若n=128,m=128;或者n=256,m=256,则将主密钥k分为4个w比特的字k0,k1,k2,k3作为前4个轮密钥,第i+4个轮密钥ki+4由其前面四个子密钥ki,ki+1,ki+2,ki+3决定,取q为w比特全1字符块,将子密钥ki和ki+1分别与q异或,得到的两个字再进行异或,然后再与ki+2进行按位与操作,得到的结果再与ki+3进行按位与操作,最后再与i进行异或操作,得到中间变量hi+4;将hi+4分别循环左移两个选定的a比特、b比特(比如a=7、b=25),得到两个字,将这两个字进行异或操作,得到的结果再与hi+4进行异或操作就得到第i+4个子密钥ki+4。i从0取到2r-5。若n=128,m=256,则将主密钥k分为8个32比特的字k0,k1,…,k7,第i+8个子密钥ki+8由其前面四个子密钥ki,ki+1,ki+2,ki+3决定,取q为32比特全1字符块,将子密钥ki和ki+1分别与q异或,得到的两个字再进行异或,然后再与ki+2进行按位与操作,得到的结果再与ki+3进行按位与操作,最后再与i进行异或操作,得到中间变量hi+8;将hi+8分别循环左移两个选定的a、b比特(比如a=7、b=25),得到两个字,将这两个字进行异或操作,得到的结果再与hi+8进行异或操作就得到第i+8个子密钥ki+8。i从0取到2r-9。步骤1.5中轮函数f的具体实现如下:f的输出为一个w比特的字,输入为两个w比特的字。首先将输入的两个字进行异或得到中间变量u;对u进行列变换得到中间变量v,具体过程为取一个4进4出的s盒变换,则v[j,j+w/4,j+w/2,j+3w/4]的值为s(u[j,j+w/4,j+w/2,j+3w/4]),这里v[j,j+w/4,j+w/2,j+3w/4]代表v的第j,j+w/4,j+w/2,j+3w/4比特组成的一个4比特的字,u[j,j+w/4,j+w/2,j+3w/4]代表u的第j,j+w/4,j+w/2,j+3w/4比特组成的一个4比特的字;对中间变量v进行行变换得到f的输出值z,具体过程为对v分别循环左移s,t比特,将得到的两个结果进行异或,再与v异或得到f的输出值z。j取遍0,1,…,w/4-1。步骤1.5中加密过程为:将n比特明文p分成4个长度为w比特的字a0,b0,c0,d0,并记第i轮的中间状态为ai,bi,ci,di,则将ai,k2i作为f的输入,得到f的输出值,再与bi异或得到ai+1;将ai+1与di异或得到ci+1;将di,k2i+1作为f的输入,得到f的输出值,再与ci异或得到di+1;将di+1与ai异或得到bi+1,如此进行r-1轮基于四路两重feistel结构轮函数更新,得到中间状态ar-1,br-1,cr-1,dr-1;然后将ar-1,k2r-2作为f的输入,得到f的输出值,再与br-1异或得到密文的第2个w比特,将br与dr-1异或得到密文的第4个w比特,将dr-1,k2r-2作为f的输入,得到f的输出值,再与cr-1异或得到密文的第3个w比特,将cr与ar-1异或得到密文的第1个w比特,最后输出密文。此处基于四路两重feistel结构,为公知方法。与现有技术相比,本发明的积极效果为:本发明使用了bit-slice技术,该技术是实现分组密码的一种有效手段。通常做法是进行s盒变换后再进行行变换,这种做法已经被证明了具有良好的安全性。本发明通过选取合适的s盒进行变化并进行循环移位s、t比特,只需要进行s盒变换以及循环移位相加,就能达到之前需要进行行变换的效果(从而与通常做法有相同的安全性),在保证行之间混淆程度的情况下,使得密码实现的开销达到最优。附图说明图1为本发明的fbc算法结构图。具体实施方式下面结合附图对本发明的分组密码算法进行进一步描述。本发明的分组加密算法fbc,其以英文feistel-basedblockcipher的首字母命名。如图1所示,该算法基于两重feistel结构设计,支持128比特和256比特明文分组,以及128比特和256比特的主密钥,主要包含三个版本:fbc128-128,fbc128-256,fbc256-256。本规范主要使用下面的一些符号:pn比特明文cn比特密文km比特主密钥ki第i个轮密钥字,i=0,1,…,2r+1ai,bi,ci,di第i轮迭代的状态字,每个字的长度为w比特,i=0,1,2,…,r+1u,v长度为w比特的字ui,vi字u和v的第i个长度为w/4比特的子块,i=1,2,3,4ui[j],vi[j]子块ui和vi的第j比特,j=0,1,2,…,w/4-1q长度为w比特的全1字符块和运算符:面向比特的异或运算&面向比特的与运算<<<w比特的字左循环移位运算‖字符串连接符算法不同版本以格式fbcn-m统一进行命名,其中n为明文分组比特长度,m为主密钥比特长度。不同版本的状态均由4个w比特的字组成。字长w与明文分组长度n的关系满足w=n/4。设r为迭代轮数。后续给出了对于步骤1.1,步骤1.2,步骤1.3fbc算法主要参数。表1为算法主要参数取值版本分组长度n主密钥长度m字宽度w迭代轮数rfbc128-1281281283248fbc128-2561282563264fbc256-2562562566480表2为l线性变换中循环参数s,t取值w3264s1119t1733对于步骤1.2,fbc的密钥扩展算法如下:针对fbc128-128和fbc256-256,将m比特主密钥k分成4个w比特的字k0,k1,k2,k3,对i=0,1,…,2r-5,计算针对fbc128-256,将256比特主密钥k分成8个32比特的字k0,k1,k2,…,k7,对i=0,1,…,2r-9,计算对于步骤1.4,该密码算法的轮函数f定义如下:轮函数f的输入包含2个w比特的字x和y,输出一个w比特的字z,记z=f(x,y)。具体运算过程如下:1)子密钥加:2)列变换:将u二进制表示分解成4个等宽的字符串,每个字符串包含w/4个比特,即u=u1‖u2‖u3‖u4,令:v1[j]‖v2[j]‖v3[j]‖v4[j]=s(u1[j]‖u2[j]‖u3[j]‖u4[j]),j=0,1,…,w/4-1这里s为4进4出的s盒变换,见表3。记v=v1‖v2‖v3‖v4。表3为s盒真值表012345678910111213141551015491411827121336103)行变换:在行变换ls,t中参数s,t取值与w有关,见上表2。对于步骤1.5,加密过程如下:1)首先根据步骤1.2密钥扩展算法将主密钥k扩展成子密钥序列ki,i=0,1,…,2r-1。2)将输入明文块p分成4个长度为w比特的子块,即p=a0‖b0‖c0‖d0。重复执行下列操作r-1次(roundfunc):a)b)c)d)3)然后执行下列操作1次(finalroundfunc)(不交换顺序):a)b)c)d)最后令输出密文块c=ar+1‖br+1‖cr+1‖dr+1。解密过程如下:1)首先根据密钥扩展算法将主密钥k扩展成子密钥序列ki,i=0,1,…,2r-1。2)将输入密文块c分成4个长度为w比特的子块,即c=a0‖b0‖c0‖d0。首先执行下列操作1次:a)b)c)d)3)然后对i=1,2,…,r,重复执行下列操作r-1次:a)b)c)d)最后令输出明文块p=ar+1‖br+1‖cr+1‖dr+1。以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1