1.本发明涉及的是一种信息安全领域的技术,具体是一种轻量级分组密码榫式(tenon)算法的实现方法。
背景技术:
2.现有的分组密码算法需要通过较为复杂的运算与结构来达到已知情况下最好的安全性,但需要耗费大量的软硬件资源,使得算法实现变慢,难以应用在微型物联网设备上。而若使用过于简单的逻辑结构,在安全性方面则难以达到要求。
技术实现要素:
3.本发明针对现有技术存在的上述不足,提出一种基于轻量级分组密码榫式算法的加密解密方法,综合考虑了安全性与实现代价,基于spn结构设计,能够实现高效、安全、轻量的tenon分组密码算法,适于应用在资源受限的设备上。
4.本发明是通过以下技术方案实现的:
5.本发明涉及一种基于轻量级分组密码榫式算法的加密方法,包括:
6.步骤1)将待加密数据按照分组长度每组n比特划分为等长的明文分组p,n=64;
7.步骤2)设置主密钥k,长度为m1比特,由主密钥k通过密钥编排算法产生tenon分组密码算法的轮密钥长度为m2比特,m1=128,m2=64,具体为:对于第r轮轮密钥,将128比特主密钥的第位依次赋值给64比特长度的轮密钥如对于第1轮,将主密钥的第1,2,4,7,
…
,97比特依次赋给轮密钥的第0,1,2,
…
,63位。再将按16比特长度依次划分为4组对于轮数r,将其表示为5位二进制数,最右侧为低位:如对于轮数r=11,表示为01011。之后进行:1.将轮密钥中的第15,16,31,47,63位与r的二进制表示的五位依次进行与操作,结果更新为新的k
15
,k
16
,k
31
,k
47
,k
63
;2.将的16比特进行按位取反得到新的k
32k33
…k47
;3.将k
48k49
…k63
与k
32k33
…k47
按位与操作后,再与k0k1…k15
按位进行异或操作得到新的k
48k49
…k63
。更新完成后的64比特k0k1…k63
按16比特长度分为4组即为第r轮的轮密钥,并将主密钥更新为128比特的
8.步骤3)在加密过程中,将输入的待加密数据经过r轮迭代加密运算操作,输出密文,具体为:
9.3.1)对于r=1,2,3,
…
,29轮,在每一轮加密运算中:将n比特明文分组p与m2比特的第i轮的轮密钥ki进行轮密钥加后,将其分为8个8比特的字节,依次经过非线性层s盒替换,线性层置换后,输出的数据作为下一轮的输入。
10.所述的正整数n=64;m1=128;m2=64;r=30;
11.所述的轮密钥加具体实现如下:每一轮输入的64比特明文分组p从高位到低位表
示为{p0,p1,p2,
…
,p
62
,p
63
},第r轮64比特的轮密钥从高位到低位表示为{k0,k1,k2,k3,
…
,k
61
,k
62
,k
63
},按位将pi与ki(0≤i≤63)进行异或得到新的明文分组p={p0,p1,p2,
…
,p
62
,p
63
};
12.所述的过非线性层s盒替换的具体实现为:将进行过轮密钥加后的明文p={p0,p1,p2,
…
,p
62
,p
63
}从高位到低位按照每8比特分为一组,得到8个8比特的字节组,记为w0,w1,w2,w3,w4,w5,w6,w7,其中,wi={w
8i 0
,w
8i 1
,w
8i 2
,w
8i 3
,w
8i 4
,w
8i 5
,w
8i 6
,w
8i 7
},0≤i≤7,将w0,w1,w2,w3,w4,w5,w6,w7同时经过8个并置的s盒中,具体过程为取八个相同的8比特输入8比特输出的s盒变换,变换是将wi作为8比特输入经过s盒运算得到新的8比特输出w
′i={w
′
8i 0
,w
′
8i 1
,
…
,w
′
8i 6
,w
′
8i 7
}=s(wi)=s({w
8i 0
,w
8i 1
,
…
,w
8i 6
,w
8i 7
})。本tenon算法s盒基于8级nfsr(非线性反馈移位寄存器)进行构造,一次s盒运算需要迭代11拍,上一拍的输出将作为下一拍的输入,每一拍将第六个比特的输入作为输出的第一比特;输入的第三个比特取反后与第八个比特进行与运算,后分别与第五比特、第六比特进行异或得到输出的第二比特;输入的第二比特作为输出的第三比特;输入的第八比特作为输出的第四比特;输入的第六比特作为输出的第七比特;输入的第四比特作为输出的第六比特;输入的第三比特作为输出的第七比特;输入的第六比特先与第八比特进行与运算后分别与第一比特、第五比特进行异或得到输出的第八比特。8个并置的s盒各自经过上述的11拍运算后输出为w
′0,w
′1,w
′2,w
′3,w
′4,w
′5,w
′6,w
′7,将其从高位到低位组合为64比特c={c0,c1,c2,
…
,c
62
,c
63
};
13.所述的过线性层置换具体为:将经过非线性层s盒替换运算后的64比特进行比特级的拉线置换。具体过程是64比特按照8个s盒的顺序将输出的8比特置换到新位置:wi经过一个s盒替换后得到的8比特输出w
′i={w
′
8i 0
,w
′
8i 1
,w
′
8i 2
,w
′
8i 3
,w
′
8i 4
,w
′
8i 5
,w
′
8i 6
,w
′
8i 7
}变换为{c
[8(i 1)]mod64 (2i 1)mod8
,c
[8(i 2)]mod64 (2i 2)mod8
,c
[8(i 3)]mod64 (2i 3)mod8
,c
[8(i 4)]mod64 (2i 4)mod8
,c
[8(i 5)]mod64 (2i 5)mod8
,c
[8(i 6)]mod64 (2i 6)mod8
,c
[8(i 7)]mod64 (2i 7)mod8
,c
[8(i 8)]mod64 (2i 8)mod8
},其中0≤i≤7。
[0014]
3.2)对于r=30轮,将n比特分组p与m2比特的第i轮的轮密钥ki进行轮密钥加后,将其分为8个8比特的字节,经过非线性层s盒替换,直接输出最终的64比特密文分组c。
[0015]
本发明涉及上述加密方法的解密方法,包括:密钥编排算法生成轮密钥、非线性层逆s盒代替、轮密钥加和线性层逆置换。
[0016]
所述的密钥编排算法与加密过程中步骤2)相同;非线性层逆s盒代替是将64比特密文分组c按照8比特宽度分为8组,第i组记为w
′i={w
′
8i 0
,w
′
8i 1
,w
′
8i 2
,w
′
8i 3
,w
′
8i 4
,w
′
8i 5
,w
′
8i 6
,w
′
8i 7
},0≤i≤7,将w
′i经过逆s盒代替得到wi,其中选取的逆s盒在具体实施方式中有叙述;轮密钥加操作与步骤3.1所述轮密钥加相同;线性层逆变换是将密文分组c的{c
[8(i 1)]mod64 (2i 1)mod8
,c
[8(i 2)]mod64 (2i 2)mod8
,c
[8(i 3)]mod64 (2i 3)mod8
,c
[8(i 4)]mod64 (2i 4)mod8
,c
[8(i 5)]mod64 (2i 5)mod8
,c
[8(i 6)]mod64 (2i 6)mod8
,c
[8(i 7)]mod64 (2i 7)mod8
,c
[8(i 8)]mod64 (2i 8)mod8
}变换到w
′i={w
′
8i 0
,w
′
8i 1
,w
′
8i 2
,w
′
8i 3
,w
′
8i 4
,w
′
8i 5
,w
′
8i 6
,w
′
8i 7
},这与加密过程中选取的拉线置换是相反的。
[0017]
对于r=30,只需将密文分组c经过逆s盒代替和轮密钥加两个运算;对于1≤r≤29,解密过程需要依次进行线性层逆置换、逆s盒代替和轮密钥加三次运算,最终得到正确的明文分组p。
技术效果
[0018]
本发明使用的8比特非线性层s盒的基于非线性反馈移位寄存器设计,可以显著降低硬件实现代价;在密码学性质方面,达到差分均匀度8,非线性度96;选用的线性变换与present算法中使用的变换相比,64比特经过置换都可以改变位置,防止因具有不动点造成的潜在弱点;密钥编排算法采用非线性的编排方式,增加了安全性。
附图说明
[0019]
图1为本发明s盒使用的非线性反馈移位寄存器单拍结构示意图;
[0020]
图2为本发明采用的线性层拉线置换示意图;
[0021]
图3为本发明流程图。
具体实施方式
[0022]
如图3所示,本实施例中采用spn结构,分组长度为64比特,密钥长度128比特,算法迭代轮数30轮,p为64比特明文分组,c为64比特密文分组,r为算法迭代轮数,r为算法当前所在轮,1≤r≤30,ri为当前轮数的二进制表示形式,1≤r≤30,0≤i≤4,k为128比特主密钥,为第r轮的轮密钥,长度64比特,r=1,2,
…
,30,pi为明文分组由高位到低位的第i比特,i=0,1,2,
…
,62,63,ki为主密钥由高位到低位的第i比特,i=0,1,2,
…
,126,127,ki为轮密钥由高位到低位的第i比特,i=0,1,2,
…
,62,63,为密钥扩展中使用的64比特轮密钥中16比特过程字,i=0,1,2,3,为最终输出的64比特轮密钥中的16比特字,为最终输出的64比特轮密钥中的16比特字,wi为进入s盒替换前的状态字,每个字的长度为8比特,i=0,1,
…
,6,7,w
′i为经过s盒替换后的状态字,每个字的长度为8比特,i=0,1,
…
,6,7,s为长度为16比特的全1序列,为比特级异或运算,&为比特级与运算,||为字符串连接符,本发明tenon算法基于spn结构设计,实现过程主要分为s盒代替(非线性层)和拉线置换(线性层)两部分。
[0023]
如图1所示,为本实施例涉及一种轻量级分组密码算法的实现方法,包括以下步骤:
[0024]
步骤1、将要加密的待加密数据按照64比特的长度进行分组,分别对各分组进行加密,一组待加密数据记为p;设置主密钥,主密钥长度为128比特,按照密钥扩展算法得到64比特长度的轮密钥,第r轮轮密钥记为
[0025]
步骤2、设置主密钥k,长度为m1比特,由主密钥k通过密钥编排算法产生tenon分组密码算法的轮密钥长度为m2比特,m1=128,m2=64,其中tenon算法的密钥编排算法如下:对于r=1,2,
…
,30,取128比特主密钥k的第,30,取128比特主密钥k的第位:共64比特,按序依次赋给
[0026]
当前轮数r以5位二进制数表示为r0,r1,r2,r3,r4,计算k
15
=k
15
&r0;k
16
=k
16
&r1;k
31
=k
31
&r2;k
47
=k
47
&r3;k
63
=k
63
&r4;将得到的以16比特长度划分为4组,记为计算:
输出当前轮密钥主密钥更新为再进行下一轮轮密钥的计算。
[0027]
步骤3)在加密过程中,将输入的待加密数据经过r轮迭代加密运算操作,输出密文,对于r=1,2,3,
…
,29轮,在每一轮加密运算中:将n比特明文分组p与m2比特的第i轮的轮密钥ki进行轮密钥加后,将其分为8个8比特的字节,依次经过非线性层s盒替换,线性层置换后,输出的数据作为下一轮的输入,具体过程如下:将明文分组和轮密钥按照比特顺序分为p0,p1,
…
,p
62
,p
63
和k0,k1,
…
,k
62
,k
63
,对i=0,1,2,3,4,5,6,7,计算
[0028]
所述的非线性层s盒代替操作,具体为:将轮密钥加得到的新明文分组划分为8个状态字,每个状态字长度为8比特,即p=w0||w1||w2|w3||w4||w5||w6||w7;对于wi,将其经过一个8比特进8比特出的s盒变换,得到新的8比特状态字wi′
。每次变换需迭代11拍,每一拍的过程包括;w
′0=w5;w
′2=w1;w
′3=w7;w
′4=w6;w
′5=w3;w
′6=w2;w
′0w
′1w
′2w
′3w
′4w
′5w
′6w
′7作为新的w0w1w2w3w4w5w6w7,进入下一拍。;也可以将各状态字wi以10进制表示,通过查找s盒真值表,再转为二进制表示,得到新的状态字w
′i,0≤i≤7。
[0029]
所采用s盒真值表十进制表示为{0,191,119,88,130,86,165,114,57,77,91,139,148,132,200,84,34,120,180,209,203,42,234,249,61,236,223,192,18,195,21,95,121,219,122,11,221,123,31,60,163,7,112,246,46,55,56,194,210,102,116,143,47,45,173,224,63,141,190,201,17,25,157,133,205,87,28,147,152,30,64,158,129,248,125,182,176,188,154,100,159,230,105,153,103,5,8,89,73,92,107,247,241,238,174,26,229,81,2,104,43,49,227,137,68,212,211,66,251,127,242,76,189,94,111,109,235,36,70,169,14,78,183,22,170,23,214,74,255,250,231,1,79,85,110,178,150,96,240,71,69,29,51,93,185,144,145,12,215,33,217,175,135,166,161,59,155,118,24,75,13,131,128,156,115,228,186,54,149,196,98,167,37,138,67,237,233,207,99,126,216,254,58,3,136,140,41,97,6,53,225,164,39,181,162,38,19,253,83,142,90,171,220,198,226,52,27,199,101,80,218,239,117,9,50,48,108,124,206,15,252,177,208,35,44,62,151,245,168,243,10,222,32,244,179,193,65,134,232,72,213,202,113,160,20,187,4,204,106,184,172,16,197,146,40,82}。
[0030]
将经过非线性层得到的8个状态字w0′
||w1′
||w2′
||w3′
||w4′
||w5′
||w6′
||w7′
从高位到低位按比特顺序排列得到64比特c={c0,c1,c2,
…
,c
62
,c
63
}。
[0031]
步骤5所述的线性层置换运算如下:
[0032]
将经过非线性层s盒替换运算后的64比特进行比特级的拉线置换。具体过程是64比特按照8个s盒的顺序将输出的8比特置换到新位置:wi经过一个s盒替换后得到的8比特输出w
′i={c
8i 0
,c
8i 1
,c
8i 2
,c
8i 3
,c
8i 4
,c
8i 5
,c
8i 6
,c
8i 7
}变换得到下一轮的输入明文分组,为{p
[8(i 1)]mod64 (2i 1)mod8
,p
[8(i 2)]mod64 (2i 2)mod8
,p
[8(i 3)]mod64 (2i 3)mod8
,p
[8(i 4)]mod64 (2i 4)mod8
,
[0033]
p
[8(i 5)]mod64 (2i 5)mod8
,p
[8(i 6)]mod64 (2i 6)mod8
,p
[8(i 7)]mod64 (2i 7)mod8
,p
[8(i 8)]mod64 (2i 8)mod8
},其中0≤i≤7。
[0034]
表1为线性层置换对应关系。
[0035]
对于第30轮,不进行线性层置换运算,直接将经过s盒代替操作后的8个状态字按顺序组合为最终密文输出,即令c=w0′
||w1′
||w2′
||w3′
||w4′
||w5′
||w6′
||w7′
。
[0036]
对于步骤4、步骤5中的解密过程如下:
[0037]
将128比特主密钥k按照密钥编排算法扩展成64比特的轮子密钥对于r=1,2,3,
…
,30,重复执行下列操作。
[0038]
将密文以64比特固定长度进行分组,对于每个密文分组c按照顺序划分为8个8比特长度的状态字w0′
||w1′
||w2′
||w3′
||w4′
||w5′
||w6′
||w7′
。
[0039]
对于每个状态字w
′i,经过逆s盒代替运算,得到新状态字wi,0≤i≤7。逆s盒的十进制表示为:{0,131,98,183,246,85,188,41,86,213,230,35,147,160,120,219,251,60,28,196,244,30,123,125,158,61,95,206,66,141,69,38,232,149,16,223,117,172,195,192,254,186,21,100,224,53,44,52,215,101,214,142,205,189,167,45,46,8,182,155,39,24,225,56,70,236,107,174,104,140,118,139,239,88,127,159,111,9,121,132,209,97,255,198,15,133,5,65,3,87,200,10,89,143,113,31,137,187,170,178,79,208,49,84,99,82,248,90,216,115,134,114,42,242,7,164,50,212,157,2,17,32,34,37,217,74,179,109,162,72,4,161,13,63,237,152,184,103,173,11,185,57,199,51,145,146,253,67,12,168,136,226,68,83,78,156,163,62,71,80,243,154,194,40,191,6,153,171,228,119,124,201,250,54,94,151,76,221,135,234,18,193,75,122,249,144,166,245,77,112,58,1,27,235,47,29,169,252,203,207,14,59,241,20,247,64,218,177,222,19,48,106,105,240,126,148,180,150,210,33,202,36,231,26,55,190,204,102,165,96,81,130,238,176,22,116,25,175,93,211,138,92,110,229,233,227,43,91,73,23,129,108,220,197,181,128}
[0040]
得到的新的8个状态字wi按照顺序排列组合为64比特分组p={p0,p1,p2,
…
,p
62
,p
63
}。
[0041]
所述的轮密钥加是指:将当前轮密钥kr按照从高位到低位的顺序记为kr={k0,k1,k2,
…
,k
63
},对于i=0,1,
…
,63,计算:
[0042]
所述的逆线性层置换是指:将轮密钥加后得到的p={p0,p1,p2,
…
,p
62
,p
63
}经过与加密运算相逆的拉线置换得到下一轮的c={c0,c1,c2,
…
,c
62
,c
63
}。
[0043]
表2为解密过程中线性层置换对应关系。
[0044]
经过具体实际实验,在128比特主密钥设置全0的情况下(0000 0000 0000 0000 0000 0000 0000 0000),各轮轮密钥依次为(十六进制表示):
[0045]
01轮:0000 0000 ffff 0000
[0046]
02轮:0002 0420 fdf6 0816
[0047]
03轮:0000 0cb0 bdb2 2c90
[0048]
04轮:0020 252b 3f73 1430
[0049]
05轮:0302 4861 65b7 0713
[0050]
06轮:c04e 4525 d5f8 d026
[0051]
07轮:185a 00dc 4dc5 105f
[0052]
08轮:72a0 85a6 453f 73a8
[0053]
09轮:460a 4316 f0d5 561e
[0054]
10轮:01b2 2526 94d7 0136
[0055]
11轮:ad40 6a88 da87 a5c7
[0056]
12轮:1802 c2cc 2e6d 3006
[0057]
13轮:6420 012964bb 2423
[0058]
14轮:0228 440f 9e37 8228
[0059]
15轮:147c 4622 77f7 367f
[0060]
16轮:590e 0b76 5db5 41ba
[0061]
17轮:3e02 2ec4 cee7 fc81
[0062]
18轮:b2dc 48a4 1703 b3dc
[0063]
19轮:4ec7 58fc c49c cad3
[0064]
20轮:9740 265b 3109 b648
[0065]
21轮:df8c 6f09 3e03 ed8f
[0066]
22轮:db6e 3529 a3e2 f9cc
[0067]
23轮:abe6 19cf c4af 6b45
[0068]
24轮:dd01 4ce0 a0c3 7dc3
[0069]
25轮:d805 e5a8 e0f3 3896
[0070]
26轮:8abb 560e eef3 2ee9
[0071]
27轮:625f a074 8437 667d
[0072]
28轮:7a48 da2f 0003 7a48
[0073]
29轮:fcb2 8fa6 6859 fcba
[0074]
30轮:8de9 cc93 4885 856d
[0075]
算法加密测试向量(testvector):在主密钥分别为全1和全0的情况下,明文数据分别为全1和全0的情况下,计算密文数据。表3为tenon算法的测试向量(十六进制表示)。
[0076]
与现有技术相比,本发明在硬件资源消耗上具有显著优势,在安全性与实现性能上达到较好的平衡。在非线性层中,采用的s盒相比同类型8比特s盒甚至是一些4比特s盒具有更少的硬件资源消耗,每一次s盒替换运算需要消耗1个非门,2个与门和4个异或门,共约1
×
0.5 2
×
1.3 4
×
2.65=13.7标准门电路(ge)。相比之下,现有流行的轻量级分组密码算法present-80所采用的4比特s盒约消耗28个标准门电路,在分组长度均为64比特的情况下,present一轮需要使用16个s盒,共占用28
×
16=448ge,本发明tenon一轮需要则只使用8个s盒,占用13.7
×
8=109.6ge。此外,本算法采用的线性层为比特级的拉线置换,无需有多余的硬件资源来实现。
[0077]
在安全性方面,算法采用的s盒也具有良好的密码学性质,差分均匀度为8,非线性度为96,代数次数为7,且采用的8比特宽度的s盒相较4比特宽度的s盒具有更强的抵抗攻击的能力。在线性层中,应用了bit-slice技术,使得同一s盒输出的各比特在下一轮加密中分别进入不同的s盒,而下一轮中同一s盒输入的各比特来自上一轮不同s盒的输出。若将s盒视为双射函数而不考虑具体的输入输出对应关系,利用milp(混合整数线性规划)求得算法在30轮下最小活跃s盒个数为44个,安全性不弱于present-80算法的结果。
[0078]
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
转载请注明原文地址:https://tc.8miu.com/read-1499.html