CN112287333B - 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 - Google Patents
一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 Download PDFInfo
- Publication number
- CN112287333B CN112287333B CN202011301394.6A CN202011301394A CN112287333B CN 112287333 B CN112287333 B CN 112287333B CN 202011301394 A CN202011301394 A CN 202011301394A CN 112287333 B CN112287333 B CN 112287333B
- Authority
- CN
- China
- Prior art keywords
- data
- data block
- handle
- round
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 135
- 230000006870 function Effects 0.000 claims description 125
- 238000006467 substitution reaction Methods 0.000 claims description 22
- 230000009466 transformation Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 10
- 239000011159 matrix material Substances 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000009792 diffusion process Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000001131 transforming effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- OUXCBPLFCPMLQZ-WOPPDYDQSA-N 4-amino-1-[(2r,3s,4s,5r)-4-hydroxy-5-(hydroxymethyl)-3-methyloxolan-2-yl]-5-iodopyrimidin-2-one Chemical group C[C@H]1[C@H](O)[C@@H](CO)O[C@H]1N1C(=O)N=C(N)C(I)=C1 OUXCBPLFCPMLQZ-WOPPDYDQSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/45—Structures or tools for the administration of authentication
- G06F21/46—Structures or tools for the administration of authentication by designing passwords or checking the strength of passwords
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质,该方法包含:获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;若是加密运算,采用轻量级可调分组密码算法对待加密数据进行加密得到密文,每一轮加密过程中依据当前轮数值和/或初始密钥中某一位的密钥值判断是否需要对调柄进行更新,并将更新后的调柄应用到下一轮加密过程中;若是解密运算,采用轻量级可调分组密码算法对待解密数据进行解密,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。本发明的调柄数据通过更换调柄达到更换密钥的效果,公开的调柄值随着加密过程的进行不再容易获得,增加算法的安全性。
Description
技术领域
本发明属于信息安全加密技术领域,具体涉及一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质。
背景技术
分组密码作为对称加密的一个重要分支,在信息安全方面具有极其重要的作用,一直是研究的热点。分组密码的设计一直遵循香农提出的“混淆”与“扩散”原则。可调分组密码是由Moses Lisko等人在2002年提出的。可调分组密码是一种带有额外输入的分组密码,我们通常称这一额外输入为调柄(tweak)。调柄不需要保密,通过加入它来提高加密的灵活性。对不同的Tweak,可调分组密码就代表两个不同的分组密码,优点体现在改变Tweak比改变密钥代价小,因为改变密钥意味着要重新进行密钥扩展算法。分组密码的安全性通过敌手区分分组密码和随机置换的优势来刻画,可调分组密码的安全性则通过敌手区分可调分组密码和可调随机置换的优势来刻画,敌手攻击的方式分为选择明文攻击和选择密文攻击,而可调分组密码与通常的分组密码不同的是,敌手在攻击过程中还可以选择调柄的值,因此,若是调柄更新部分也是公开且算法本身的安全性不足够强,敌手很可能将公开的调柄数据作为攻击点对算法进行攻击。
发明内容
本发明的目的是提供一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质,所述方法利用轮数以及密钥值来判断是否对调柄进行更新,使调柄更新具有一定的随机性,从而使敌手在攻击过程中不能直接获取到确定的调柄数据,提高了调柄更新部分的复杂度,进而增加了算法整体的安全性。
本发明提供的一种轻量级可调分组密码实现方法,包括如下步骤:
步骤1:获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
步骤2:若是加密运算,则采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或依据所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若是解密运算,则采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
本发明选择用轮数值和密钥值作为调柄更新操作的控制信号,不断变化的轮数值和未知的密钥值导致调柄更新具有不确定的随机性,相比较于当前的可调分组密码算法仅仅只是加入了公开的调柄数据,调柄更新部分也是公开不具有随机性的技术而言,本发明增加了调柄数据的隐秘性,使敌手在攻击过程中不能直接获取到确定的调柄数据,提高了调柄更新部分的复杂度,进而增加了算法整体的安全性。
优选地,依据当前轮数值和/或所述某一位的密钥值判断是否更新调柄时的判断准则为:依据当前轮数值的奇偶性、所述某一位的密钥值为1或0来判断是否需要对调柄进行更新。
本发明设置调柄更新的判断准则时,除奇偶性外,还可以设置其为是否能整除某一个数值等,例如轮数可以整除3时更新,只需保证有部分调柄数据一定能够更新即可,并且轮数和密钥值两个控制信号之间的关系也可以不限定,除了或的关系运算外,还可以是与、异或等。
优选地,当前一轮加密过程中判断是否对调柄进行更新的过程如下:
首先,判断当前轮数控制信号count是否为偶数,若是,则对当前调柄进行更新操作;否则,执行下一步骤,所述当前轮数控制信号count值与当前轮数相关;
然后,判断初始密钥中第count+N位密钥值K[count+N]是否为1,若为1,则进行调柄更新操作,否则不进行调柄更新操作,N为明文长度。
优选地,若获取N位明文作为待加密数据X,步骤2的执行过程如下:
S1:对待加密数据X进行P1置换;
S2:设置轮数控制信号count的初始值Q,并将步骤S1的运算结果从高位开始以每n位为一组依次分为四个数据块X0、X1、X2、X3,以及将初始密钥K的前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR,其中,N=4n,Q为非负整数;
S3:对数据块Xa、Xc分别进行F1函数或F2函数运算得到数据块Xa′、Xc′,再将数据块Xb、Xa′和TL或TR进行异或运算得到数据块Xb′,以及将数据块Xd、Xc′和TR或TL进行异或运算得到数据块Xd′,所述下标a,b,c,d对应0,1,2,3或1,2,3,0;
其中,所述数据块Xa进行F1函数运算时所使用的轮密钥为数据块K0,对应所使用的调柄为数据块TL,数据块Xc进行F1函数运算时所使用的轮密钥为数据块K1,对应所使用的调柄为数据块TR;或所述数据块Xa进行F2函数运算时所使用的轮密钥为数据块K2,对应所使用的调柄为数据块TR,数据块Xc进行F2函数运算时所使用的轮密钥为数据块K3,对应所使用的调柄为数据块TL;
S4:当所述a,b,c,d对应0,1,2,3时,对数据块Xa、Xb′按照Xa,Xb′高位到低位顺序进行P2置换得到数据块Xa″,Xb″,以及对数据块Xc、Xd′按照Xc,Xd′高位到低位顺序进行P2置换得到数据块Xc″,Xd″;当所述a,b,c,d对应1,2,3,0时,对数据块Xa、Xd′按照Xd′,Xa高位到低位顺序进行P2置换得到数据块Xd″,Xa″,以及对数据块Xb′、Xc按照Xb′,Xc高位到低位顺序进行P2置换得到数据块Xb″,Xc″;
S5:对数据块Xb″、Xd″分别进行F2函数或F1函数运算得到数据块Xb′″、Xd′″,然后,将数据块Xc″、Xb′″和TR进行异或运算得到数据块Xc′″,以及将数据块Xa″、Xd′″和TL进行异或运算得到数据块Xa′″;
其中,所述数据块Xb″进行F2函数运算时所使用的轮密钥为数据块K2;数据块Xd″进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块Xb″进行F1函数运算时所使用的轮密钥为数据块K1,数据块Xd″进行F1函数运算时所使用的轮密钥为数据块K0;步骤S3和步骤S5所使用的函数不同;
S6:依据当前轮数控制信号count和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄从高位开始以每n位为一组依次分为数据块TL和TR,并将数据块TL和TR作为下一轮输入的调柄数据;
S7:对步骤S5运算得到的数据块Xa′″、Xc′″和步骤S4运算得到的数据块Xb″、Xd″按照Xa′″,Xb″,Xc′″,Xd″或Xd″,Xa′″,Xb″,Xc′″从高位到低位的顺序进行P1置换得到Y0,Y1,Y2,Y3,然后,判断当前轮数控制信号count是否小于轮数Nr-1+Q,若是,令count=count+1,将Y0,Y1,Y2,Y3作为新一轮输入的数据,依次赋值给X0,X1,X2,X3,再返回步骤S3;否则,将Y0,Y1,Y2,Y3作为密文从高位到低位依次输出。
对应的所述解密过程包括如下步骤:
步骤B1:获取N位密文作为待解密数据Y,对Y进行P1置换,并确定轮数Nr;
步骤B2:将解密过程的轮数控制信号count初始值设置为Nr-1+Q,以及将步骤B1的运算结果从高位开始以每n位为一组依次分为四个数据块Y0、Y1、Y2、Y3;以及获取初始密钥K并将其前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将当前一轮的2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR;
步骤B3:将数据块Yb、Yd分别进行F2函数或F1函数运算得到Yb′、Yd′,然后将数据块Yc、Yb′和TR进行异或运算得到Yc′,以及将数据块Ya、Yd′和TL进行异或运算得到Ya′;
其中,所述数据块Yb进行F2函数运算时所使用的轮密钥为数据块K2,Yd进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块Yb进行F1函数运算时所使用的轮密钥为数据块K0,数据块Yd进行F1函数运算时所使用的轮密钥为数据块K1;
且每一轮加密过程得到的调柄以相反使用顺序作为解密过程中对应一轮的调柄;
步骤B4:当所述a,b,c,d对应0,1,2,3时,对数据块Yb、Ya′按照Ya′,Yb高位到低位顺序进行P2置换得到数据块Ya″,Yb″,以及对数据块Yd、Yc′按照Yc′,Yd高位到低位顺序进行P2置换得到数据块Yc″,Yd″;当所述a,b,c,d对应1,2,3,0时,对数据块Yd、Ya′按照Yd,Ya′高位到低位顺序进行P2置换得到数据块Yd″,Ya″,以及对数据块Yb、Yc′按照Yb,Yc′高位到低位顺序进行P2置换得到数据块Yb″,Yc″;
步骤B5:将数据块Ya″、Yc″分别进行F1函数或F2函数运算得到Ya′″、Yc′″,然后将数据块Yb″、Ya′″和TL或TR进行异或运算得到数据块Yb′″,以及将数据块Yd″、Yc′″和TR或TL进行异或运算得到数据块Yd′″;
其中,所述数据块Ya″进行F1函数运算时所使用的轮密钥为数据块K0,对应所使用的调柄为数据块TL,数据块Yc″进行F1函数运算时所使用的轮密钥为数据块K1,对应所使用的调柄为数据块TR;或所述数据块Ya″进行F2函数运算时所使用的轮密钥为数据块K2,对应所使用的调柄为数据块TR,数据块Yc″进行F2函数运算时所使用的轮密钥为数据块K3,对应所使用的调柄为数据块TL,步骤B3和步骤B5所使用的函数不同;
步骤B6:对步骤B5运算得到的结果Yb′″、Yd′″和步骤B4运算得到的Ya″、Yc″按照Ya″,Yb′″,Yc″,Yd′″或Yd′″,Ya″,Yb′″,Yc″从高位到低位的顺序进行P1置换得到X0,X1,X2,X3,然后判断当前轮数控制信号count是否大于轮数0,若是,令count=count-1,将X0,X1,X2,X3作为新一轮输入的数据,依次赋值给Y0,Y1,Y2,Y3,返回步骤B3;否则将X0,X1,X2,X3作为明文从高位到低位依次输出。
以所述下标a,b,c,d对应0,1,2,3时,若获取N位明文作为待加密数据X,步骤2的执行过程如下:
S1:对待加密数据X进行P1置换;
S2:设置轮数控制信号count的初始值Q,并将步骤S1的运算结果从高位开始以每n位为一组依次分为四个数据块X0、X1、X2、X3,以及将初始密钥K的前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR,其中,N=4n,Q为非负整数;
S3:对数据块X0、X2分别进行F1函数或F2函数运算得到数据块X0′、X2′,再将数据块X1、X0′和TL进行异或运算得到数据块X1′,以及将数据块X3、X2′和TR进行异或运算得到数据块X3′;
其中,所述数据块X0进行F1函数运算时所使用的轮密钥为数据块K0,数据块X2进行F1函数运算时所使用的轮密钥为数据块K1;或所述数据块X0进行F2函数运算时所使用的轮密钥为数据块K2,数据块X2进行F2函数运算时所使用的轮密钥为数据块K3;
S4:对数据块X0、X1′按照X0,X1′高位到低位顺序进行P2置换得到数据块X0″,X1″,以及对数据块X2、X3′按照X2,X3′高位到低位顺序进行P2置换得到数据块X2″,X3″;
S5:对数据块X1″、X3″分别进行F2函数或F1函数运算得到数据块X1′″、X3′″,然后,将数据块X2″、X1′″和TR进行异或运算得到数据块X2′″,以及将数据块X0″、X3′″和TL进行异或运算得到数据块X0′″;
其中,所述数据块X1″进行F2函数运算时所使用的轮密钥为数据块K2;数据块X3″进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块X1″进行F1函数运算时所使用的轮密钥为数据块K0,数据块X3″进行F1函数运算时所使用的轮密钥为数据块K1;步骤S3和步骤S5所使用的函数不同;
S6:依据当前轮数控制信号count和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄从高位开始以每n位为一组依次分为数据块TL和TR,并将数据块TL和TR作为下一轮输入的调柄数据;
S7:对步骤S5运算得到的数据块X0′″、X2′″和步骤S4运算得到的数据块X1″、X3″按照X0′″,X1″,X2′″,X3″从高位到低位的顺序进行P1置换得到Y0,Y1,Y2,Y3,然后,判断当前轮数控制信号count是否小于轮数Nr-1+Q,若是,令count=count+1,将Y0,Y1,Y2,Y3作为新一轮输入的数据,依次赋值给X0,X1,X2,X3,再返回步骤S3;否则,将Y0,Y1,Y2,Y3作为密文从高位到低位依次输出。
应当理解,上述步骤S3中除了选用X0,X2先进行F1函数外,其他可行的方式中,也可以先对X1,X3进行F1函数,即将上述0,2下标的数据替换为1,3下标的数据,其他部分也相应替换。
上述设置的算法采用广义Feistel结构,轮函数F1、F2交替进行,同时每轮再通过P1、P2置换对待加密数据进行扩散处理,可以达到较好的混淆扩散效果。应当理解,其他可行的方式中,采用其他架构的轻量级可调分组密码算法也可以实现本发明的目的,只要其存在调柄,即可利用本发明所述方法增加算法的安全性。
优选地,所述解密过程包括如下步骤:
步骤B1:获取N位密文作为待解密数据Y,对Y进行P1置换,并确定轮数Nr;
步骤B2:将解密过程的轮数控制信号count初始值设置为Nr-1+Q,以及将步骤B1的运算结果从高位开始以每n位为一组依次分为四个数据块Y0、Y1、Y2、Y3;以及获取初始密钥K并将其前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将当前一轮的2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR;
步骤B3:将数据块Y1、Y3分别进行F2函数或F1函数运算得到Y1′、Y3′,然后将数据块Y2、Y1′和TR进行异或运算得到Y2′,以及将数据块Y0、Y3′和TL进行异或运算得到Y0′;
其中,所述数据块Y1进行F2函数运算时所使用的轮密钥为数据块K2,Y3进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块Y1进行F1函数运算时所使用的轮密钥为数据块K0,数据块Y3进行F1函数运算时所使用的轮密钥为数据块K1;且每一轮加密过程得到的调柄以相反使用顺序作为解密过程中对应一轮的调柄;
步骤B4:对数据块Y1、Y0′按照Y0′,Y1高位到低位顺序进行P2置换得到数据块Y0″,Y1″,以及对数据块Y3、Y2′按照Y2′,Y3高位到低位顺序进行P2置换得到数据块Y2″,Y3″;
步骤B5:将数据块Y0″、Y2″分别进行F1函数或F2函数运算得到Y0′″、Y2′″,然后将数据块Y1″、Y0′″和TL进行异或运算得到数据块Y1′″,以及将数据块Y3″、Y2′″和TR进行异或运算得到数据块Y3′″;
其中,所述数据块Y0″进行F1函数运算时所使用的轮密钥为数据块K0,数据块Y2″进行F1函数运算时所使用的轮密钥为数据块K1;或所述数据块Y0″进行F2函数运算时所使用的轮密钥为数据块K2;数据块Y2″进行F2函数运算时所使用的轮密钥为数据块K3,步骤B3和步骤B5所使用的函数不同;
步骤B6:对步骤B5运算得到的结果Y1′″、Y3′″和步骤B4运算得到的Y0″、Y2″按照Y0″,Y1′″,Y2″,Y3′″从高位到低位的顺序进行P1置换得到X0,X1,X2,X3,然后判断当前轮数控制信号count是否大于轮数0,若是,令count=count-1,将X0,X1,X2,X3作为新一轮输入的数据,依次赋值给Y0,Y1,Y2,Y3,返回步骤B3;否则将X0,X1,X2,X3作为明文从高位到低位依次输出。
优选地,若所述明文长度为64,则每个数据块的长度为16;若所述明文长度为128,则每个数据块的长度为32;若所述明文长度为256,则每个数据块的长度为64。
优选地,调柄更新操作过程如下:
步骤A1:将输入的2n位调柄数据T以每n/16为一个单元从高位到低位顺序依次表示为{t[0],t[1],t[2]...t[31]},对其进行P1置换得到置换后的数据T':
T'=P1{t[0],t[1],t[2],t[3]......t[30],t[31]}
步骤A2:将步骤A1得到的2n位数据T'以每32位为一单元从高位到低位顺序依次进行操作,32位数据以每半字节为一个单元从高位到低位进行分组,依次表示为T'0,T'1,T'2,T'3,T'4,T'5,T'6,T'7,每半字节数据从高位到低位依次表示为t3,t2,t1,t0,对下标为0、1、4、6的调柄T'i分别进行如下的更新变换,得到更新后的32位调柄数据T″0,T″1,T'2,T'3,T″4,T'5,T″6,T'7,并将其作为下一轮的调柄输入数据,更新变换公式如下:
譬如,若n为16,调柄更新操作过程如下:
步骤A1:将输入的32位调柄数据T按照从高位到低位顺序依次表示为{t[0],t[1],t[2]...t[31]},对其进行P1置换得到置换后的数据T':
T'=P1{t[0],t[1],t[2],t[3]......t[30],t[31]}
步骤A2:将步骤A1得到的32位数据T'以每半字节为一个单元从高位到低位进行分组,依次表示为T'0,T'1,T'2,T'3,T'4,T'5,T'6,T'7,每半字节数据从高位到低位依次表示为t3,t2,t1,t0,对下标为0、1、4、6的调柄T'i分别进行如下的更新变换,得到更新后的32位调柄数据T″0,T″1,T'2,T'3,T″4,T'5,T″6,T'7,并将其作为下一轮的调柄输入数据,更新变换公式如下:
所述加解密过程中的P1置换为以每n/8位为一个单元将每两个数据比特位位置交换,再按照高位到低位顺序数据输出;所述调柄更新操作中的P1置换是以每n/16位为一个单元进行交换,再按照高位到低位顺序数据输出。
第二方面,本发明提供的一种基于所述方法的系统,包括:获取模块和加解密模块;
其中,所述获取模块用于获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
若是加密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若为解密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
第三方面,本发明提供的一种电子设备,包括处理器和存储器,所述存储器存储了计算机程序,处理器调用所述计算机程序以执行所述轻量级可调分组密码实现方法的步骤。
第四方面,本发明提供的一种可读存储介质,存储了计算机程序,所述计算机程序被处理器调用以执行所述轻量级可调分组密码实现方法的步骤。
有益效果
本发明提供了一种轻量级可调分组密码算法的实现方法,该方法设计了一种调柄额外输入的加密模式,输入的调柄是公开的,可以通过更换调柄达到更换密钥的效果,且更换调柄比更换密钥所实现的代价要小,同时调柄更新由轮常数count和部分密钥值来决定,公开的调柄值随着更新的随机化也不再容易获取,增加了密码算法的安全性。
附图说明
图1为本发明所述的加密流程图;
图2为本发明所述的F1函数流程图;
图3为本发明所述的F2函数流程图;
图4为本发明所述的调柄更新流程图。
具体实施方式
本发明实施例提供了一种轻量级可调分组密码实现方法,所述方法利用轮数以及密钥值来判断是否对调柄进行更新,使调柄更新具有一定的随机性,从而使敌手在攻击过程中不能直接获取到确定的调柄数据,进而提高了算法的安全性。下面本发明将以明文长度为64为例进行,结合实施例对本发明做进一步的说明。
本实施例提供的一种轻量级可调分组密码算法的实现方法,包括以下步骤:
step 1:获取64位明文作为待加密数据X,对X进行P1置换,并确定轮数Nr为16;其中,所述P1置换过程如下:
P1置换是以每两位为一个单元进行交换,输入64位数据从高位到低位依次表示为x0,x1,x2,x3,…x30,x31,经P1置换将每两个数据比特位位置交换,以x31,x8,x16,x24,x27,x12,x20,x28,x1,x22,x17,x25,x5,x18,x21,x29,x2,x10,x13,x26,x6,x14,x9,x30,x3,x11,x19,x4,x7,x15,x23,x0高位到低位顺序数据输出;
step 2:轮数控制信号count初始值设置为0,将step 1的运算结果从高位开始以每16位为一组依次分为四个数据块X0,X1,X2,X3,设置80位密钥K,并将其前64位从高位开始以每16位为一组依次分为四个数据块K0,K1,K2,K3,设置32位公开的调柄数据T,并将其从高位开始以每16位为一组依次记为TL和TR;
step 3:将数据块X0进行F1函数运算得到X0′,同时将数据块X2进行F1函数运算得到X2′,接着,将X1与X0′和TL进行异或运算得到X1′,同时将X3与X2′和TR进行异或运算得到X3′;其中,所述X0进行F1函数运算时所使用的轮密钥为K0,X2进行F1函数运算时所使用的轮密钥为K1;
其中,F1函数依次包括轮常数加运算,轮密钥加运算,S1盒置换,列混淆;具体过程如下:
轮常数加运算:选择轮数作为算法的轮常数与X0或X2进行异或运算;
轮密钥加运算:16位密钥数据K0或K1与轮常数加运算得到的结果进行异或运算;
S盒替换:采用S1盒对轮密钥加运算得到的结果进行变换;
列混淆变换:采用piccolo算法中的列混淆变换矩阵M,在GF(24)上进行矩阵M与S盒替换后得到的数据(16位)的乘法运算,其中GF(24)表示为一个不可约多项式x4+x+1。GF(2n)是在分组密码中常用的有限域,它表示该域总共只有2n个元素。M矩阵表示如下:
step 4:对X0和step3中得到的结果X1′按照X0,X1′高位到低位顺序进行P2置换得到X0″,X1″,同时对X2和step3中得到的结果X3′按照X2,X3′高位到低位顺序进行P2置换得到X2″,X3″;其中,所述P2置换如下:
P2置换是以每一位为一个单元进行交换,输入32位数据从高位到低位表示为x0,x1,x2,x3,…x30,x31,经P2置换将数据比特位位置交换,以x15,x4,x8,x12,x1,x10,x9,x13,x2,x6,x5,x14,x3,x7,x11,x0,x31,x20,x24,x28,x17,x26,x25,x29,x18,x22,x21,x30,x19,x23,x27,x16高位到低位顺序输出得到数据;
step 5:对step4中得到的X1″进行F2函数运算得到X1′″,同时对X3″进行F2函数运算得到X3′″,接着,将X2″与X1′″和TR进行异或运算得到X2′″,同时将X0″与X3′″和TL进行异或运算得到X0′″;其中,所述X1″进行F2函数运算时所使用的轮密钥为K2,X3″进行F2函数运算时所使用的轮密钥为K3;
F2函数运算过程与F1函数运算过程相似,F2函数运算依次包括轮常数加运算、轮密钥加运算、S2盒置换、列混淆;其中,F2函数运算过程与F1函数运算过程相似,二者区别只在于S盒,F1函数采用S1盒进行变换,F2函数采用S2盒进行变换,具体过程如下:
轮常数加运算:选择轮数作为算法的轮常数与X1″或X3″进行异或运算;
轮密钥加运算:16位密钥数据K2或K3与轮常数加运算得到的结果进行异或运算;
S盒替换:采用S2盒对轮密钥加运算得到的结果进行变换;
列混淆变换:采用piccolo算法中的列混淆变换矩阵M,在GF(24)上进行矩阵M与S盒替换后得到的数据(16位)的乘法运算,其中GF(24)表示为一个不可约多项式x4+x+1。GF(2n)是在分组密码中常用的有限域,它表示该域总共只有2n个元素。M矩阵表示如下:
step 6:依据当前轮数控制信号count,判断其是否为偶数,若是,则对32位调柄T进行调柄更新操作,否则判断第count+64位密钥值K[count+64]是否为1,若为1,则对T进行调柄更新操作,否则不进行,得到的32位调柄数据从高位开始以每16位为一组依次记为TL和TR,并将其作为新一轮输入的调柄数据。
其中,调柄更新操作运算过程如下:
步骤A1:将输入的32位调柄数据T按照从高位到低位顺序依次表示为{t[0],t[1],t[2]...t[31]},对其进行P1置换:
T'=P1{t[0],t[1],t[2],t[3]......t[30],t[31]};
步骤A2:将步骤A1得到的32位数据T'以每半字节为一个单元从高位到低位进行分组,依次表示为T'0,T'1,T'2,T'3,T'4,T'5,T'6,T'7,每半字节数据从高位到低位依次表示为t3,t2,t1,t0,对下标为0、1、4、6的调柄T'i分别进行如下的更新变换,得到更新后的32位调柄数据T″0,T″1,T'2,T'3,T″4,T'5,T″6,T'7,并将其作为下一轮的调柄输入数据,变换公式如下:
step 7:对step5运算得到的结果X0′″、X2′″和step4运算得到的X1″、X3″按照X0′″,X1″,X2′″,X3″从高位到低位的顺序进行P1置换得到Y0,Y1,Y2,Y3,接着,判断当前轮数控制信号count是否小于轮数Nr-1,若是,令count=count+1,将Y0,Y1,Y2,Y3作为新一轮输入的数据,依次赋值给X0,X1,X2,X3,返回step3,否则将Y0,Y1,Y2,Y3作为密文从高位到低位依次输出。
所述方法除了加密过程,还包括解密过程,所述解密过程包括如下步骤:
step B1:获取64位密文作为待解密数据Y,对Y进行P1置换,并确定轮数Nr为16;
step B2:轮数控制信号count初始值设置为Nr-1,将stepB1的运算结果从高位开始以每16位为一组依次分为四个数据块Y0,Y1,Y2,Y3,获取80位密钥K,并将其前64位从高位开始以每16位为一组依次分为四个数据块K0,K1,K2,K3,获取32位调柄T,并将其从高位开始以每16位为一组依次记为TL和TR;
step B3:将数据块Y1进行F2函数运算得到Y1′,同时对Y3进行F2函数运算得到Y3′,接着,将Y2与Y1′和TR进行异或运算得到Y2′,同时将Y0与Y3′和TL进行异或运算得到Y0′;
其中,所述Y1进行F2函数运算时所使用的轮密钥为K2,Y3进行F2函数运算时所使用的轮密钥为K3;
所述调柄TL,TR复用加密过程中的调柄数据,解密过程中调柄使用顺序与加密过程中调柄使用顺序相反;
所述F2函数依次包括轮常数加运算,轮密钥加运算,S2盒置换,列混淆;
step B4:对Y1和stepB3中得到的结果Y0′按照Y0′,Y1高位到低位顺序进行P2置换得到Y0″,Y1″,同时对Y3和stepB3中得到的结果Y2′按照Y2′,Y3高位到低位顺序进行P2置换得到Y2″,Y3″;
step B5:将stepB4得到的数据块Y0″进行F1函数运算得到Y0′″,同时将数据块Y2″进行F1函数运算得到Y2′″,接着,将Y1″与Y0′″和TL进行异或运算得到Y1′″,同时将Y3″与Y2′″和TR进行异或运算得到Y3′″;
其中,所述Y0″进行F1函数运算时所使用的轮密钥为K0,Y2″进行F1函数运算时所使用的轮密钥为K1;
所述F1函数依次包括轮常数加运算,轮密钥加运算,S1盒置换,列混淆;
stepB6:对stepB5运算得到的结果Y1′″、Y3′″和stepB4运算得到的Y0″、Y2″按照Y0″,Y1′″,Y2″,Y3′″从高位到低位的顺序进行P1置换得到X0,X1,X2,X3,然后判断当前轮数控制信号count是否大于轮数0,若是,令count=count-1,将X0,X1,X2,X3作为新一轮输入的数据,依次赋值给Y0,Y1,Y2,Y3,返回stepB3,否则将X0,X1,X2,X3作为明文从高位到低位依次输出。
本实施例中该算法的命名为Hide,算法分组长度为64位,密钥长度为80位,调柄长度为32位,迭代轮数为16轮。算法采用广义Feistel结构,F函数包括F1和F2函数,F1函数和F2函数的区别只在于使用的S盒不同,以下对这两组F函数各个模块进行详细描述。
如图2所示,F1函数包括轮常数加、轮密钥加、S1盒替换和列混淆。
轮常数加:为了促进算法安全与减少算法寄存器,在保证算法安全方面,主要是防御自相似攻击等一些攻击方法,设计算法的轮常数,选择轮数作为算法的轮常数,表示公式如下:
轮密钥加:F1函数中参与轮密钥加运算的密钥为K0和K1,表示公式如下:
S盒替换:F1函数变换中采用S1盒替换,S1盒引用PRESENT算法加密的S盒,S1盒元素如表1所示。
表1算法S1盒元素
列混淆变换:采用piccolo算法中的列混淆变换矩阵M,在GF(24)上进行矩阵M与S盒替换后得到的数据(16位)的乘法运算,其中GF(24)表示为一个不可约多项式x4+x+1。GF(2n)是在分组密码中常用的有限域,它表示该域总共只有2n个元素。16位数据以每四位为一单元从高位到低位依次表示为x0,x1,x2,x3,列混淆变换更新数据可表示公式如下:
t(x0(4),x1(4),x2(4),x3(4))←M·t(x0(4),x1(4),x2(4),x3(4))
如图3所示,F2函数包括轮常数加、轮密钥加、S2盒替换和列混淆。
轮常数加:与F1函数相同,选择轮数作为算法的轮常数,表示公式如下:
轮密钥加:F2函数中参与轮密钥加运算的密钥为K2和K3,表示公式如下:
S盒替换:F2函数变换中采用S2盒替换,S2盒引用mCRYPTON密码算法的S0盒,S2盒元素如表2所示。
表2算法S2盒元素
列混淆变换:F2函数中列混淆变换与F1函数中一致。
本发明中的P1置换:用于64位明文置换和32位调柄更新运算中,对64位数据采用以每两位为一个单元进行置换运算,对32位数据采用以每一位为一个单元进行置换运算,P1置换表如表3所示。
表3算法P1置换表
P2置换:用于轮函数中32位明文置换,P2置换表如表4所示。
表4算法P2置换表
调柄更新:对32位调柄数据T首先进行P1置换得到数据T',然后将T'从高位开始以每半字节为一个单元依次分成8组数据,即T'(32)=T'0(4)||T'1(4)||T'2(4)||T'3(4)||T'4(4)||T'5(4)||T'6(4)||T'7(4),对下标为0、1、4、6的半字节数据分别进行更新变换,每半字节数据从高位到低位依次表示为t3,t2,t1,t0,即变换后得到更新后的调柄数据,调柄更新流程图如图4所示。
在一些可行的实施例中,本发明还提供一种基于轻量级可调分组密码实现方法的系统,包括:获取模块和加解密模块;
其中,所述获取模块用于获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
若是加密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若为解密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
本实施例中更新判断准则为依据当前轮数值的奇偶性、所述某一位的密钥值为1或0来判断是否需要对调柄进行更新。譬如:首先,判断当前轮数控制信号count是否为偶数,若是,则对当前调柄进行更新操作;否则,执行下一步骤,所述当前轮数控制信号count值与当前轮数相关;然后,判断初始密钥中第count+N位密钥值K[count+N]是否为1,若为1,则进行调柄更新操作,否则不进行调柄更新操作,N为明文长度。
需要说明的是,所述加解密模块进行加密和解密时,按照前述方法记载的方式进行,故不再赘述。且除此之外,其他可行的实施例中还可以设置满足本发明需求的调柄的其他更新判断准则。
应当理解,上述单元模块的具体实现过程参照方法内容,本发明在此不进行具体的赘述,且上述功能模块单元的划分仅仅是一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。同时,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
在一些可行的实施例中,本发明还提供一种基于轻量级可调分组密码实现方法的电子设备,其处理器和存储器,所述存储器存储了计算机程序,处理器调用所述计算机程序以执行:
获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
若是加密运算,则采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若为解密运算,则采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
本实施例中更新判断准则为依据当前轮数值的奇偶性、所述某一位的密钥值为1或0来判断是否需要对调柄进行更新。譬如:首先,判断当前轮数控制信号count是否为偶数,若是,则对当前调柄进行更新操作;否则,执行下一步骤,所述当前轮数控制信号count值与当前轮数相关;然后,判断初始密钥中第count+N位密钥值K[count+N]是否为1,若为1,则进行调柄更新操作,否则不进行调柄更新操作,N为明文长度。
需要说明的是,本实施例中在进行加密和解密时,按照前述方法记载的方式进行,故不再赘述。且除此之外,其他可行的实施例中还可以设置满足本发明需求的调柄的其他更新判断准则。
在一些可行的实施例中,本发明还提供一种基于轻量级可调分组密码实现方法的可读存储介质,其存储了计算机程序,计算机程序被处理器调用以执行:
获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
若是加密运算,则采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若为解密运算,则采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
本实施例中更新判断准则为依据当前轮数值的奇偶性、所述某一位的密钥值为1或0来判断是否需要对调柄进行更新。譬如:首先,判断当前轮数控制信号count是否为偶数,若是,则对当前调柄进行更新操作;否则,执行下一步骤,所述当前轮数控制信号count值与当前轮数相关;然后,判断初始密钥中第count+N位密钥值K[count+N]是否为1,若为1,则进行调柄更新操作,否则不进行调柄更新操作,N为明文长度。
需要说明的是,本实施例中在进行加密和解密时,按照前述方法记载的方式进行,故不再赘述。且除此之外,其他可行的实施例中还可以设置满足本发明需求的调柄的其他更新判断准则。
应当理解,在本发明实施例中,所称处理器可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。
所述可读存储介质为计算机可读存储介质,其可以是前述任一实施例所述的控制器的内部存储单元,例如控制器的硬盘或内存。所述可读存储介质也可以是所述控制器的外部存储设备,例如所述控制器上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述可读存储介质还可以既包括所述控制器的内部存储单元也包括外部存储设备。所述可读存储介质用于存储所述计算机程序以及所述控制器所需的其他程序和数据。所述可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
测试:
对本发明实施例提供的方法进行测试,其中本发明提供的密码算法数据如表5所示:
表5实验测试数据
本发明所述的密码算法在Xilinx Virtex-5 FPGA硬件实现时,算法时钟周期是4.916ns,时钟频率为203.413MHz,吞吐率为813.652Mbps;
本发明所述的密码算法在ASIC硬件实现时,综合工艺库为SMIC 0.18。算法所占用的资源面积为1409GE。其中,表6为最小密钥长的典型轻量级密码算法FPGA硬件实现,表7为最小密钥长的典型轻量级密码算法ASIC硬件实现。
表6各轻量级密码算法FPGA实现
表7各轻量级密码算法ASIC实现
算法 | 结构 | 分组长度(bits) | 密钥长度(bits) | 资源面积(GE) |
Piccolo-80 | GFN | 64 | 80 | 1136 |
PRESNET-80 | SPN | 64 | 80 | 1570 |
KLEIN-64 | SPN | 64 | 64 | 1220 |
LBlock | Feistel | 64 | 80 | 1320 |
Twine-80 | Feistel | 64 | 80 | 1503 |
LED-64 | SPN | 64 | 80 | 1040 |
MIBS-64 | Feistel | 64 | 64 | 1396 |
SCENERY-64 | Feistel | 64 | 64 | 1190 |
Hide | GFN | 64 | 80 | 1409 |
通过表6与表7中数据对比表明,Hide相对目前的轻量级密码,在占用面积资源相差不大的情况下,频率以及吞吐率具有较高的性能。
需要强调的是,本发明所述的实例是说明性的,而不是限定性的,因此本发明不限于具体实施方式中所述的实例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,不脱离本发明宗旨和范围的,不论是修改还是替换,同样属于本发明的保护范围。
Claims (8)
1.一种轻量级可调分组密码实现方法,其特征在于:包括如下步骤:
步骤1:获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
步骤2:若是加密运算,则采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或依据所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若是解密运算,则采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应;
依据当前轮数值和/或所述某一位的密钥值判断是否更新调柄时的判断准则为:依据当前轮数值的奇偶性、所述某一位的密钥值为1或0来判断是否需要对调柄进行更新;
当前一轮加密过程中判断是否对调柄进行更新的过程如下:
首先,判断当前轮数控制信号count是否为偶数,若是,则对当前调柄进行更新操作;否则,执行下一步骤,所述当前轮数控制信号count值与当前轮数相关;
然后,判断初始密钥中第count+N位密钥值K[count+N]是否为1,若为1,则进行调柄更新操作,否则不进行调柄更新操作,N为明文长度。
2.根据权利要求1所述的方法,其特征在于:若获取N位明文作为待加密数据X,步骤2的执行过程如下:
S1:对待加密数据X进行P1置换;
S2:设置轮数控制信号count的初始值Q,并将步骤S1的运算结果从高位开始以每n位为一组依次分为四个数据块X0、X1、X2、X3,以及将初始密钥K的前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR,其中,N=4n,Q为非负整数;
S3:对数据块Xa、Xc分别进行F1函数或F2函数运算得到数据块Xa′、Xc′,再将数据块Xb、Xa′和TL或TR进行异或运算得到数据块Xb′,以及将数据块Xd、Xc′和TR或TL进行异或运算得到数据块Xd′,所述下标a,b,c,d对应0,1,2,3或1,2,3,0;
其中,所述数据块Xa进行F1函数运算时所使用的轮密钥为数据块K0,对应所使用的调柄为数据块TL,数据块Xc进行F1函数运算时所使用的轮密钥为数据块K1,对应所使用的调柄为数据块TR;或所述数据块Xa进行F2函数运算时所使用的轮密钥为数据块K2,对应所使用的调柄为数据块TR,数据块Xc进行F2函数运算时所使用的轮密钥为数据块K3,对应所使用的调柄为数据块TL;
S4:当所述a,b,c,d对应0,1,2,3时,对数据块Xa、Xb′按照Xa,Xb′高位到低位顺序进行P2置换得到数据块Xa″,Xb″,以及对数据块Xc、Xd′按照Xc,Xd′高位到低位顺序进行P2置换得到数据块Xc″,Xd″;当所述a,b,c,d对应1,2,3,0时,对数据块Xa、Xd′按照Xd′,Xa高位到低位顺序进行P2置换得到数据块Xd″,Xa″,以及对数据块Xb′、Xc按照Xb′,Xc高位到低位顺序进行P2置换得到数据块Xb″,Xc″;
S5:对数据块Xb″、Xd″分别进行F2函数或F1函数运算得到数据块Xb″′、Xd″′,然后,将数据块Xc″、Xb″′和TR进行异或运算得到数据块Xc″′,以及将数据块Xa″、Xd″′和TL进行异或运算得到数据块Xa″′;
其中,所述数据块Xb″进行F2函数运算时所使用的轮密钥为数据块K2;数据块Xd″进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块Xb″进行F1函数运算时所使用的轮密钥为数据块K1,数据块Xd″进行F1函数运算时所使用的轮密钥为数据块K0;步骤S3和步骤S5所使用的函数不同;
S6:依据当前轮数控制信号count和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄从高位开始以每n位为一组依次分为数据块TL和TR,并将数据块TL和TR作为下一轮输入的调柄数据;
S7:对步骤S5运算得到的数据块Xa″′、Xc″′和步骤S4运算得到的数据块Xb″、Xd″按照Xa″′,Xb″,Xc″′,Xd″或Xd″,Xa″′,Xb″,Xc″′从高位到低位的顺序进行P1置换得到Y0,Y1,Y2,Y3,然后,判断当前轮数控制信号count是否小于轮数Nr-1+Q,若是,令count=count+1,将Y0,Y1,Y2,Y3作为新一轮输入的数据,依次赋值给X0,X1,X2,X3,再返回步骤S3;否则,将Y0,Y1,Y2,Y3作为密文从高位到低位依次输出。
3.根据权利要求2所述的方法,其特征在于:所述解密过程包括如下步骤:
步骤B1:获取N位密文作为待解密数据Y,对Y进行P1置换,并确定轮数Nr;
步骤B2:将解密过程的轮数控制信号count初始值设置为Nr-1+Q,以及将步骤B1的运算结果从高位开始以每n位为一组依次分为四个数据块Y0、Y1、Y2、Y3;以及获取初始密钥K并将其前N位从高位开始以每n位为一组依次分为四个数据块K0、K1、K2、K3,以及将当前一轮的2n位调柄数据T从高位开始以每n位为一组依次分为两个数据块TL和TR;
步骤B3:将数据块Yb、Yd分别进行F2函数或F1函数运算得到Yb′、Yd′,然后将数据块Yc、Yb′和TR进行异或运算得到Yc′,以及将数据块Ya、Yd′和TL进行异或运算得到Ya′;
其中,所述数据块Yb进行F2函数运算时所使用的轮密钥为数据块K2,Yd进行F2函数运算时所使用的轮密钥为数据块K3;或所述数据块Yb进行F1函数运算时所使用的轮密钥为数据块K1,数据块Yd进行F1函数运算时所使用的轮密钥为数据块K0;
且每一轮加密过程得到的调柄以相反使用顺序作为解密过程中对应一轮的调柄;
步骤B4:当所述a,b,c,d对应0,1,2,3时,对数据块Yb、Ya′按照Ya′,Yb高位到低位顺序进行P2置换得到数据块Ya″,Yb″,以及对数据块Yd、Yc′按照Yc′,Yd高位到低位顺序进行P2置换得到数据块Yc″,Yd″;当所述a,b,c,d对应1,2,3,0时,对数据块Yd、Ya′按照Yd,Ya′高位到低位顺序进行P2置换得到数据块Yd″,Ya″,以及对数据块Yb、Yc′按照Yb,Yc′高位到低位顺序进行P2置换得到数据块Yb″,Yc″;
步骤B5:将数据块Ya″、Yc″分别进行F1函数或F2函数运算得到Ya″′、Yc″′,然后将数据块Yb″、Ya″′和TL或TR进行异或运算得到数据块Yb″′,以及将数据块Yd″、Yc″′和TR或TL进行异或运算得到数据块Yd″′;
其中,所述数据块Ya″进行F1函数运算时所使用的轮密钥为数据块K0,对应所使用的调柄为数据块TL,数据块Yc″进行F1函数运算时所使用的轮密钥为数据块K1,对应所使用的调柄为数据块TR;或所述数据块Ya″进行F2函数运算时所使用的轮密钥为数据块K2,对应所使用的调柄为数据块TR,数据块Yc″进行F2函数运算时所使用的轮密钥为数据块K3,对应所使用的调柄为数据块TL,步骤B3和步骤B5所使用的函数不同;
步骤B6:对步骤B5运算得到的结果Yb″′、Yd″′和步骤B4运算得到的Ya″、Yc″按照Ya″,Yb″′,Yc″,Yd″′或Yd″′,Ya″,Yb″′,Yc″从高位到低位的顺序进行P1置换得到X0,X1,X2,X3,然后判断当前轮数控制信号count是否大于轮数0,若是,令count=count-1,将X0,X1,X2,X3作为新一轮输入的数据,依次赋值给Y0,Y1,Y2,Y3,返回步骤B3;否则将X0,X1,X2,X3作为明文从高位到低位依次输出。
4.根据权利要求1所述的方法,其特征在于:若所述明文长度为64,则每个数据块的长度为16;初始密钥的长度为64+Nr。
5.根据权利要求1所述的方法,其特征在于:调柄更新操作过程如下:
步骤A1:将输入的2n位调柄数据T以每n/16为一个单元从高位到低位顺序依次表示为{t[0],t[1],t[2]...t[31]},对其进行P1置换得到置换后的数据T':
T'=P1{t[0],t[1],t[2],t[3]......t[30],t[31]}
步骤A2:将步骤A1得到的2n位数据T'以每32位为一单元从高位到低位顺序依次进行操作,32位数据以每半字节为一个单元从高位到低位进行分组,依次表示为T'0,T'1,T'2,T'3,T'4,T'5,T'6,T'7,每半字节数据从高位到低位依次表示为t3,t2,t1,t0,对下标为0、1、4、6的调柄T'i分别进行如下的更新变换,得到更新后的32位调柄数据T″0,T″1,T'2,T'3,T″4,T'5,T″6,T'7,并将其作为下一轮的调柄输入数据,更新变换公式如下:
6.一种基于权利要求1-5任一项所述方法的系统,其特征在于:包括:获取模块和加解密模块;
其中,所述获取模块用于获取明文作为待加密数据或密文作为待解密数据,并确定总轮数Nr;
若是加密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待加密数据进行加密得到密文,其中,所述轻量级可调分组密码算法的每一轮加密过程中依据当前轮数值和/或所述轻量级可调分组密码算法的初始密钥中某一位的密钥值判断是否需要对调柄进行更新,若需要,则对调柄进行更新,将更新后的调柄应用到下一轮加密过程中;
若为解密运算,所述加解密模块用于采用轻量级可调分组密码算法对所述待解密数据进行解密,其中,在每一轮的解密过程存在:第1→Nr轮解密过程中的调柄与第Nr→1轮加密过程得到的调柄是一一对应。
7.一种电子设备,其特征在于:包括处理器和存储器,所述存储器存储了计算机程序,处理器调用所述计算机程序以执行权利要求1-5任一项所述方法的步骤。
8.一种可读存储介质,其特征在于:存储了计算机程序,所述计算机程序被处理器调用以执行权利要求1-5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011301394.6A CN112287333B (zh) | 2020-11-19 | 2020-11-19 | 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011301394.6A CN112287333B (zh) | 2020-11-19 | 2020-11-19 | 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112287333A CN112287333A (zh) | 2021-01-29 |
CN112287333B true CN112287333B (zh) | 2023-12-01 |
Family
ID=74398283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011301394.6A Active CN112287333B (zh) | 2020-11-19 | 2020-11-19 | 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112287333B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113343276B (zh) * | 2021-07-01 | 2022-06-14 | 衡阳师范学院 | 基于广义二维猫映射的轻量级分组密码算法gcm的加密方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104717059A (zh) * | 2013-12-16 | 2015-06-17 | 国际商业机器公司 | 用于自测试加密/解密循环的方法和系统 |
CN111814162A (zh) * | 2020-06-30 | 2020-10-23 | 浙江大学 | 一种基于定制硬件安全属性的内核敏感数据保护方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130168450A1 (en) * | 2011-12-30 | 2013-07-04 | Clay W. von Mueller | Format preserving cipher system and method |
KR101593169B1 (ko) * | 2014-08-20 | 2016-02-15 | 한국전자통신연구원 | 페이스텔 구조의 가변길이 블록암호 장치 및 방법 |
JP6386198B1 (ja) * | 2017-02-21 | 2018-09-05 | 三菱電機株式会社 | 暗号化装置及び復号装置 |
-
2020
- 2020-11-19 CN CN202011301394.6A patent/CN112287333B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104717059A (zh) * | 2013-12-16 | 2015-06-17 | 国际商业机器公司 | 用于自测试加密/解密循环的方法和系统 |
CN111814162A (zh) * | 2020-06-30 | 2020-10-23 | 浙江大学 | 一种基于定制硬件安全属性的内核敏感数据保护方法 |
Non-Patent Citations (1)
Title |
---|
Surge:一种新型、低资源、高效的轻量级分组密码算法;李浪;刘波涛;;计算机科学(02);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112287333A (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
ES2805125T3 (es) | Arquitectura e instrucciones flexibles para el estándar de cifrado avanzado (AES) | |
CN106487498B (zh) | 电子电路对边信道攻击的抵抗的检验 | |
CN106487497B (zh) | 对rijndael算法的dpa保护 | |
US20070071236A1 (en) | High speed configurable cryptographic architecture | |
TWI571091B (zh) | 用於以第二密文編密演算法之運算修改第一密文編密演算法的技術 | |
JP5682525B2 (ja) | 暗号処理装置、および暗号処理方法、並びにプログラム | |
WO2012132623A1 (ja) | 暗号処理装置、および暗号処理方法、並びにプログラム | |
WO2019114122A1 (zh) | 登录信息的加密方法、装置、电子设备及介质 | |
WO2008072455A1 (ja) | 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム | |
TW201044334A (en) | Encryption device, encryption method, and computer program | |
US10187198B2 (en) | Protection of a rijndael algorithm | |
CN112202547B (zh) | 一种轻量级分组密码gfcs实现方法、装置及可读存储介质 | |
CN113645615B (zh) | 轻量级分组密码加密及解密方法 | |
WO2014013680A1 (ja) | ユニバーサルハッシュ関数演算装置、方法およびプログラム | |
CN112287333B (zh) | 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质 | |
US20140369499A1 (en) | Cryptographic device, cryptographic processing method, and cryptographic processing program | |
TW595183B (en) | Crypto-system with an inverse key evaluation circuit | |
JP2010044251A (ja) | ハッシュ値生成装置、プログラム及びハッシュ値生成方法 | |
US20240097880A1 (en) | High-speed circuit combining aes and sm4 encryption and decryption | |
Shoukat et al. | Randomized substitution method for effectively secure block ciphers in IOT environment | |
Abdulwahed | Chaos-Based Advanced Encryption Standard | |
Lee et al. | Lightweight and Low-Latency AES Accelerator Using Shared SRAM | |
KR102393958B1 (ko) | 암호화 알고리즘이 적용된 시스템에서의 데이터 처리 방법 | |
Henricksen et al. | The HKC authenticated stream cipher (Ver. 1) | |
CN112134691B (zh) | 一种部件可重复的nlcs分组密码实现方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |