一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

轻量级分组密码加密及解密方法与流程

2021-11-15 17:56:00 来源:中国专利 TAG:


1.本发明涉及信息加密技术领域,具体涉及一种轻量级分组密码加密及解密方法。


背景技术:

2.随着物联网的发展,无线射频识别(rfid)和无线传感器网络(wsn)等技术得到了广泛应用,轻量级加密算法日益受到人们的关注。轻量级分组密码算法作为一种特殊的分组密码算法,它们在硬件实现、加密速度、运行功耗等方面与aes等高强密码算法相比有明显的优势,更适合物联网微型计算设备使用。由于这些微型嵌入式设备自身存在计算能力弱、存储空间以及能力来源非常有限的特点,对于这些资源严格受限的设备,传统密码算法实现规模(资源面积)相对较大,不适合应用,因此密码学界的设计者们提出轻量级密码来保证物联网产业信息安全。
3.近年来,轻量级分组密码引起密码学家的高度重视,其设计则侧重于为资源受限设备,注重算法实现时小面积低资源与高性能。目前轻量级密码算法的设计与实现,存在高性能与高安全性矛盾的关系,造成轻量级密码算法出现实现性能高却安全性不高,或安全性高但实现性能过低的局面。对于轻量级密码算法,安全性与实现性能是最为重要的,也是最基本的,更是轻量级密码算法研究所面临的最大挑战,也是我们必须面对的挑战。本发明即给出了一种基于4分支按不同组件顺序进行加密的方法,本发明提出的加密结构灵活性大,给密码算法开发者提供了不同的设计思路。


技术实现要素:

4.本发明提出了一种硬件资源消耗小且安全性高的轻量级分组密码加密方法dsa(dynamic structure algorithm),该方法通过将明文分为4分支明文数据组后经过f函数动态结构变换,使得加密算法的结构更具灵活性,从而使算法的安全性得到提高。
5.本发明提供一种新的轻量级分组密码加密方法,包括如下步骤:
6.一种轻量级分组密码加密方法,包括以下步骤:
7.步骤a1:获取64位明文作为待加密数据x,进行加密运算。
8.其中,待加密数据x从高位到低位每16位一组依次排序形成4分支明文数据组,记作x=x0x1x2x3。
9.步骤a2:获取80位密钥作为初始密钥数据k,进行密钥更新运算:将初始密钥数据k循环左移7位。然后从高位到低位每16位一组依次排序分为5个密钥数据组,分别为k0、k1、k2、k3、k4。再对k0、k2的前4位数据与轮计数器r

1进行异或运算,其中r代表当前轮数。得到的运算结果进行s盒替换得到更新后的k0、k2,最后将k0、k1、k2、k3、k4依次排序作为下一轮的轮密钥。
10.步骤a3:对步骤a1所述的待加密数据x进行f函数运算。
11.其中,f函数包括轮常量加、s盒替换、列混淆、轮密钥加4个组件,并根据4个组件参与运算时的顺序,分为f1、f2、f3、f4四种结构,4分支明文数据组x0、x1、x2、x3分别进行f1、
f2、f3、f4函数运算。f函数每轮运算所使用的轮密钥为密钥更新运算后的前64位数据。
12.设a数组中4个组件构成了f函数:a[4]=[轮常量加,s盒替换,列混淆,轮密钥加],则4个f函数中组件运算顺序以下公式表示,即fi中第k个组件为:
[0013]
fi
k
=a[((i

1) (k

1))%4],i,k∈[1,4]
[0014]
即x0首先进行轮常量加运算,x1首先进行s盒替换,x2首先进行列混淆变换,x3首先进行轮密钥加运算,%表示取余运算。
[0015]
步骤a4:对步骤a3得到的运算结果进行p置换。
[0016]
步骤a5:判断当前轮数r是否小于16,若小于,令r=r 1,将步骤a2、a4得到的运算结果作为新一轮运算的输入数据,返回步骤a3。否则,进行步骤a6。
[0017]
步骤a6:轮密钥的“白化”操作:将步骤a5得到的运算结果与第16轮密钥更新运算获得的轮密钥的前64位数据进行异或运算,然后输出加密结果。
[0018]
所述的方法,所述步骤a3中f函数包括:
[0019]
f1函数运算包括:对x0依次进行轮常量加运算、s盒替换、列混淆变换和轮密钥加运算。
[0020]
f2函数运算包括:对x1依次进行s盒替换、列混淆变换、轮密钥加运算和轮常量加运算。
[0021]
f3函数运算包括:对x2依次进行列混淆变换、轮密钥加运算、轮常量加运算和s盒替换。
[0022]
f4函数运算包括:对x3依次进行轮密钥加运算、轮常量加运算、s盒替换和列混淆变换。
[0023]
所述的方法,所述步骤a3中,轮常量加运算过程为:每轮在进行轮常量加运算时,将进行f函数运算的每分支数据的前4位数据与4位常量进行异或运算,其中常量更新方式为:将4位常量(rc3,rc2,rc1,rc0)左移一位,更新值的计算式为:该4位常量初始化为全0的状态。其元素如下表所示:
[0024][0025]
所述的方法,所述步骤a3中轮密钥加运算进一步包括以下处理步骤:
[0026]
每轮在进行轮密钥加运算时,进行f1函数运算的第1分支数据与密钥更新运算获得的k3进行异或运算,进行f2函数运算的第2分支数据与密钥更新运算获得的k2进行异或运算,进行f3函数运算的第3分支数据与密钥更新运算获得的k1进行异或运算,进行f4函数运算的第4分支数据与密钥更新运算获得的k0进行异或运算。
[0027]
所述的方法,所述步骤a3中s盒替换包括以下步骤:
[0028]
该s盒包括3个或非门、3个异或门、1个与非门、1个异或非门,用x0,x1,x2,x3代表s盒的4个输入位,其中x0为最低有效位,则s盒构成进一步包括以下步骤:
[0029]
1)对x0进行更新,更新后的x0为:
[0030][0031]
2)将1)得到的结果循环左移1位,即:
[0032]
[x2x1x0x3]

[x3x2x1x0]。
[0033]
3)将2)得到的结果按上述1)2)步骤迭代2轮。
[0034]
4)将3)得到的结果对x0进行更新,更新后的x0用公式表示,即:
[0035][0036]
经过上述1)2)3)4)步骤后的x0,x1,x2,x3即为s盒的4个输出位,s盒中元素如下表所示,其中数据以16进制表示,其中x表示进行s盒替换前的值,s[x]表示进行s盒替换后的值:
[0037][0038]
所述的方法,所述步骤a3中列混淆包括以下步骤:
[0039]
采用aes算法中的列混淆变换矩阵m,在gf(24)上进行矩阵m的乘法运算,其中gf(24)表示为一个不可约多项式x4 x 1,m矩阵公式如下,其中数据以16进制表示,
[0040][0041]
所述的方法,所述步骤a4中p置换运算过程如下:
[0042]
基于按位排列的置换方式来实现p置换运算,其中置换层的各比特值p(i)通过以下等式得到,其中i表示中间数据的第i位:
[0043]
p(i)=63

i/4(i%4==0)
[0044]
p(i)=47

i/4(i%4==1)
[0045]
p(i)=31

i/4(i%4==2)
[0046]
p(i)=15

i/4(i%4==3)
[0047]
所述的方法,所述步骤a2中密钥更新运算进一步包括以下处理步骤:
[0048]
7)获取80位密钥作为初始密钥数据k(k
79
k
78
···
k1k0)。
[0049]
8)将初始密钥数据k循环左移7位,即:
[0050]
[k
79
k
78

k1k0]

[k
72
k
71

k0k
79

k
73
]。
[0051]
9)将2)得到的运算结果从高位到低位每16位一组依次排序分为5个密钥数据组,分别为k0(k
72
k
71
···
k
58
k
57
)、k1(k
56
k
55
···
k
42
k
41
)、k2(k
40
k
39
···
k
26
k
25
)、k3(k
24
k
23
···
k
10
k9)、k4(k8···
k0k
79
···
k
73
);
[0052]
10)对3)中k0、k2的前4位数据与轮计数器r

1进行异或运算,其中r代表当前轮数,即:
[0053][0054]
11)对4)得到的运算结果进行s盒替换,此时得到经4)、5)更新后的k0、k2,即:
[0055][0056]
12)经上述2)至5)密钥更新运算完成后的k0、k1、k2、k3、k4依次排序作为下一轮的轮密钥,每轮运算所使用的轮密钥为密钥更新运算后的前64位数据。
[0057]
一种轻量级分组密码解密方法,基于所述的加密方法得到的加密结果进行解密,包括以下步骤:
[0058]
步骤b1:获取64位密文作为待解密数据y。
[0059]
步骤b2:将待解密数据y与加密过程第16轮子密钥进行异或运算。
[0060]
步骤b3:对步骤b2得到的运算结果进行p逆置换。
[0061]
步骤b4:对步骤b3得到的运算结果从高位到低位每16位一组依次排序形成4分支数据块,分别为c0、c1、c2、c3,进行f函数逆运算,f函数逆运算由轮常量加、逆s盒替换、逆列混淆变换、轮密钥加4个组件构成,即c0、c1、c2、c3分别进行f1、f2、f3、f4函数逆运算。
[0062]
f1函数逆运算包括:
[0063]
5)对c0进行轮密钥加运算。
[0064]
6)对1)得到的运算结果进行逆列混淆变换。
[0065]
7)对2)得到的运算结果进行逆s盒替换。
[0066]
8)对3)得到的运算结果进行轮常量加运算。
[0067]
f2函数逆运算包括:
[0068]
5)对c1进行轮常量加运算。
[0069]
6)对1)得到的运算结果进行轮密钥加运算。
[0070]
7)对2)得到的运算结果进行逆列混淆变换。
[0071]
8)对3)得到的运算结果进行逆s盒替换。
[0072]
f3函数逆运算包括:
[0073]
5)对c2进行逆s盒替换。
[0074]
6)对1)得到的运算结果进行轮常量加运算。
[0075]
7)对2)得到的运算结果进行轮密钥加运算。
[0076]
8)对3)得到的运算结果进行逆列混淆变换。
[0077]
f4函数逆运算包括:
[0078]
5)对c3进行逆列混淆变换。
[0079]
6)对1)得到的运算结果进行逆s盒替换。
[0080]
7)对2)得到的运算结果进行轮常量加运算。
[0081]
8)对3)得到的运算结果进行轮密钥加运算。
[0082]
步骤b5:判断当前轮数r是否小于16,若小于,令r=r 1,将步骤b4得到的运算结果作为新一轮运算的输入数据,返回步骤b3。否则,输出解密结果。
[0083]
其中,每一轮f函数逆运算中的轮密钥与加密过程中轮密钥使用顺序相反,即解密过程中f函数逆运算中的第1轮轮密钥与加密过程中f函数运算的第16轮轮密钥相同,以此类推。
[0084]
所述的方法,所述步骤b3中p逆置换包括以下步骤:
[0085]
设0≤i≤15,i表示中间数据的第i位,表示公式如下:
[0086]
p
i

p
63
‑4×
i
[0087]
p
i 16

p
62
‑4×
i
[0088]
p
i 32

p
61
‑4×
i
[0089]
p
i 48

p
60
‑4×
i
[0090]
其中

左侧表示p逆置换前的值,

右侧表示p逆置换后的值。
[0091]
本发明的技术效果在于,通过本发明所设计的一种动态算法结构,即轮函数由动态f函数与p置换构成,可以通过每分支采用不同的f函数结构,即每分支数据块经过不同的
组件顺序运算,改善了算法结构的灵活性,增加了密码算法的安全性。
附图说明
[0092]
图1为本发明所述的算法结构加密流程图;
[0093]
图2为本发明所述的s盒结构图。
[0094]
图3为本发明所述的p置换结构图。
[0095]
图4为本发明所述的密码算法在fpga硬件实现时算法时钟周期与时钟频率截图。
具体实施方式
[0096]
本发明实施例提供了一种新的轻量级分组密码加密方法,此方法通过明文分为4个分支进行由不同组件顺序构成的动态f函数运算,再进行p置换,以此构成扩散速度快且高效的轮函数,从而提高算法的安全性。下面本发明将以明文长度为64为例进行,结合实施例对本发明做进一步的说明。
[0097]
本实施例提供的一种新的轻量级分组密码加密方法,包括以下步骤:
[0098]
步骤a1:获取64位明文作为待加密数据x,将待加密数据x从高位到低位每16位一组形成4分支明文数据组,记作x=x0x1x2x3。
[0099]
步骤a2:获取80位密钥作为初始密钥数据k(k
79
k
78

k1k0),将初始密钥数据k循环左移4位;将上一步得到的运算结果从高位到低位每16位一组依次排序分为5个密钥数据组,分别为k0(k
72
k
71
···
k
58
k
57
)、k1(k
56
k
55
···
k
42
k
41
)、k2(k
40
k
39
···
k
26
k
25
)、k3(k
24
k
23
···
k
10
k9)、k4(k8···
k0k
79
···
k
73
);将上一步k0、k2的前4位数据与轮计数器(r

1,r代表轮数)进行异或运算,再对其进行s盒替换,此时得到更新后的k0、k2。具体操作步骤如下:
[0100]
1)[k
79
k
78

k1k0]

[k
72
k
71

k0k
79

k
73
];
[0101]
2)
[0102][0103]
经上述密钥更新运算完成后的k0、k1、k2、k3、k4依次排序作为下一轮的轮密钥,每轮运算所使用的轮密钥为密钥更新运算后的前64位数据
[0104]
步骤a3:对步骤a1所述的待加密数据x进行f函数运算,f函数是一种动态结构,由轮常量加、s盒替换、列混淆、轮密钥加4个组件构成,根据4个组件参与运算时的顺序循环移动,分为f1、f2、f3、f4四种结构,4分支明文数据组x0、x1、x2、x3分别进行f1、f2、f3、f4函数运算。设f函数由a数组中的4个组件构成:a[4]=[轮常量加,s盒替换,列混淆,轮密钥加],则4个f函数中组件运算顺序可用以下公式表示,fi中第k个组件为:
[0105]
fi
k
=a[((i

1) (k

1))%4],i,k∈[1,4]
[0106]
f1函数运算包括:
[0107]
1)对x0进行轮常量加运算;
[0108]
2)对1)得到的运算结果进行s盒替换;
[0109]
3)对2)得到的运算结果进行列混淆变换;
[0110]
4)对3)得到的运算结果进行轮密钥加运算;
[0111]
f2函数运算包括:
[0112]
1)对x1进行s盒替换;
[0113]
2)对1)得到的运算结果进行列混淆变换;
[0114]
3)对2)得到的运算结果进行轮密钥加运算;
[0115]
4)对3)得到的运算结果进行轮常量加运算;
[0116]
f3函数运算包括:
[0117]
1)对x2进行列混淆变换;
[0118]
2)对1)得到的运算结果进行轮密钥加运算;
[0119]
3)对2)得到的运算结果进行轮常量加运算;
[0120]
4)对3)得到的运算结果进行s盒替换;
[0121]
f4函数运算包括:
[0122]
1)对x3进行轮密钥加运算;
[0123]
2)对1)得到的运算结果进行轮常量加运算;
[0124]
3)对2)得到的运算结果进行s盒替换;
[0125]
4)对3)得到的运算结果进行列混淆变换;
[0126]
轮常量加运算:每轮运算进行前先完成一次更新,更新方式为:将4位常量(rc3,rc2,rc1,rc0)左移一位,更新值的计算式为:该4位常量初始化为全0的状态。其元素如表1所示。
[0127]
表1轮常量加变换常数
[0128][0129]
将进行f函数运算的每16位明文中间数据的前4位数据与上述更新方式得到的4位常量进行异或运算。
[0130]
s盒替换:采用类似广义feistel结构构造的s盒,其元素如表2所示,其中数据以16进制表示。
[0131]
表2s盒元素列表
[0132][0133]
列混淆变换:采用aes算法中的列混淆变换矩阵m,在gf(24)上进行矩阵m的乘法运算,其中gf(24)表示为一个不可约多项式x4 x 1。gf(24)是在分组密码中常用的有限域,它表示该域总共只有24个元素。m矩阵公式如下,其中数据以16进制表示。
[0134][0135]
轮密钥加运算:进行f1函数运算的第1分支数据与密钥更新运算获得的k3进行异或运算,进行f2函数运算的第2分支数据与密钥更新运算获得的k2进行异或运算,进行f3函数运算的第3分支数据与密钥更新运算获得的k1进行异或运算,进行f4函数运算的第4分支数据与密钥更新运算获得的k0进行异或运算。
[0136]
步骤a4:设置一种新的按位排列的置换方式,即p置换。对步骤a3运算得到的结果进行p置换,其置换方式如表3所示。
[0137]
表3p置换表
[0138][0139][0140]
步骤a5:判断当前轮数r是否小于16,若小于,令r=r 1,将步骤a2、a3得到的运算结果作为新一轮运算的输入数据,返回步骤a3;否则,进行步骤a6;
[0141]
步骤a6:轮密钥的“白化”操作:将步骤a5得到的运算结果与第16轮密钥更新运算获得的轮密钥的前64位数据进行异或运算,然后输出加密结果。
[0142]
所述方法除了加密过程,还包括解密过程,所述解密过程包括如下步骤:
[0143]
步骤b1:获取64位密文作为待解密数据y,将y与加密过程第16轮更新后的密钥的前64位数据进行异或运算。
[0144]
步骤b2:对步骤b1得到的运算结果进行p逆置换,置换方式如表4所示。
[0145]
表4p逆置换表
[0146][0147]
步骤b3:对步骤b3得到的运算结果从高位到低位每16位一组依次排序形成4分支数据块,分别为c0、c1、c2、c3,进行f函数逆运算,f函数由轮常量加、逆s盒替换、逆列混淆变换、轮密钥加4个组件构成,即c0、c1、c2、c3分别进行f1、f2、f3、f4函数逆运算。
[0148]
f1函数逆运算包括:
[0149]
1)对c0进行轮密钥加运算;
[0150]
2)对1)得到的运算结果进行逆列混淆变换;
[0151]
3)对2)得到的运算结果进行逆s盒替换;
[0152]
4)对3)得到的运算结果进行轮常量加运算;
[0153]
f2函数逆运算包括:
[0154]
1)对c1进行轮常量加运算;
[0155]
2)对1)得到的运算结果进行轮密钥加运算;
[0156]
3)对2)得到的运算结果进行逆列混淆变换;
[0157]
4)对3)得到的运算结果进行逆s盒替换;
[0158]
f3函数逆运算包括:
[0159]
1)对c2进行逆s盒替换;
[0160]
2)对1)得到的运算结果进行轮常量加运算;
[0161]
3)对2)得到的运算结果进行轮密钥加运算;
[0162]
4)对3)得到的运算结果进行逆列混淆变换;
[0163]
f4函数逆运算包括:
[0164]
1)对c3进行逆列混淆变换;
[0165]
2)对1)得到的运算结果进行逆s盒替换;
[0166]
3)对2)得到的运算结果进行轮常量加运算;
[0167]
4)对3)得到的运算结果进行轮密钥加运算;
[0168]
轮常量加运算:每轮在进行轮常量加运算时,将进行f函数运算的每分支数据的前4位数据与4位常量进行异或运算。其中,每一轮f函数逆运算中的轮常量与加密过程中轮常量使用顺序相反。
[0169]
逆s盒替换:采用present算法解密过程的s盒,其元素如表5所示,其中数据以16进制表示。
[0170]
表5s
‑1盒元素列表
[0171][0172]
逆列混淆变换:逆列混淆变换矩阵为逆矩阵m
‑1,m
‑1矩阵公式如下,其中数据以16进制表示。
[0173][0174]
步骤b4:判断当前轮数r是否小于16,若小于,令r=r 1,将步骤b4得到的运算结果作为新一轮运算的输入数据,返回步骤b3;否则,输出解密结果。
[0175]
其中,每一轮f函数逆运算中的轮密钥与加密过程中轮密钥使用顺序相反。
[0176]
测试:
[0177]
对本发明实施例提供的方法进行测试,其中本发明提供的密码算法数据如表6所示:
[0178]
表6实验测试数据
[0179][0180]
[0181]
本发明所述的密码算法在xilinx virtex

5 fpga硬件实现时,算法时钟周期是2.926ns,时钟频率为341.728mhz,吞吐率为1366.912mbps。下表为最小密钥长的典型轻量级密码算法fpga硬件实现。
[0182]
表7各轻量级密码算法fpga实现
[0183][0184]
本发明所述的密码算法在asic硬件实现时,综合工艺库为ibm130nm

8rf。算法所占用的资源面积为1581.5ges。下表为最小密钥长的典型轻量级密码算法asic硬件实现。
[0185]
表8各轻量级密码算法asic实现
[0186]
算法结构分组长度(bits)密钥长度(bits)资源面积(ges)piccolo

80gfn64801136presnet

80spn64801570klein

64spn64641220lblockfeistel64801320twine

80feistel64801503led

64spn64801040mibs

64feistel64641396scenery

64feistel64641190dsaspn64801581.5
[0187]
通过表7与表8中数据对比表明,dsa与目前的轻量级分组密码相比较,在面积资源同样轻量的情况下,频率以及吞吐率具有较高的性能。
[0188]
需要强调的是,以上所述本发明实施例是非限制性的,对于本领域的技术人员,凡是不脱离本发明宗旨,根据本发明技术方案所作的任何修改,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献