本文提出了一种轻量级分组密码算法ASD,该算法明文长度为64比特,密钥长度为80比特和128比特。算法整体采用SPN结构,混淆层采用16个并置的S盒运算,其中S盒为最优S盒;扩散层为PRESENT该部件的旋转。通过混合整数线性规划(MILP)寻找最小活跃S盒个数进行安全性分析,结果表明ASD具有足够的安全冗余。 This paper proposes a lightweight block cipher algorithm ASD, which has a plaintext length of 64 bits with key length of 80 bits and 128 bits. The algorithm adopts SPN structure as a whole, and the confusion layer adopts 16 concurrent S box operations, of which the S box is the optimal S box. The diffusion layer is present for the rotation of the part. Security analysis was performed by mixed in-teger linear programming (MILP) to find the minimum number of active S boxes, and the results showed that ASD had sufficient security margins.
本文提出了一种轻量级分组密码算法ASD,该算法明文长度为64比特,密钥长度为80比特和128比特。算法整体采用SPN结构,混淆层采用16个并置的S盒运算,其中S盒为最优S盒;扩散层为PRESENT该部件的旋转。通过混合整数线性规划(MILP)寻找最小活跃S盒个数进行安全性分析,结果表明ASD具有足够的安全冗余。
轻量级分组密码,SPN结构,MILP,安全性分析
Xin Xie
College of Mathematics and Statistics, Northwest Normal University, Lanzhou Gansu
Received: Jun. 15th, 2022; accepted: Jul. 12th, 2022; published: Jul. 19th, 2022
This paper proposes a lightweight block cipher algorithm ASD, which has a plaintext length of 64 bits with key length of 80 bits and 128 bits. The algorithm adopts SPN structure as a whole, and the confusion layer adopts 16 concurrent S box operations, of which the S box is the optimal S box. The diffusion layer is present for the rotation of the part. Security analysis was performed by mixed integer linear programming (MILP) to find the minimum number of active S boxes, and the results showed that ASD had sufficient security margins.
Keywords:Lightweight Block Cipher, SPN Structure, MILP, Security Cryptanalysis
Copyright © 2022 by author(s) and beplay安卓登录
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
http://creativecommons.org/licenses/by/4.0/
随着信息技术的飞速发展,各类安全问题引起广泛的关注,信息泄露等问题也愈演愈烈,加密成为重要的问题,分组加密算法是现代密码学的重要基础之一,在保护数据的安全和隐私方面发挥着不可替代的作用。5G时代的到来和智能设备的普及,各类应用场景中资源受限的软硬件实现平台对密码算法的实现性质和表现提出了更加严苛的要求,也催生了众多轻量级密码算法设计的新思想。
目前分组密码所采用的整体结构主要为Feistel结构和SPN结构。加解密相似是Feistel结构的一个优点,但扩散速度比较慢。与Feistel结构相比,SPN结构可以实现更快速的扩散。适合资源约束应用的密码需求越来越多,著名的轻量级分组密码算法有CLEFIA [
受PRESENT启发,本文提出了一种轻量级的分组密码算法ASD。采用SPN结构来构造ASD算法,算法版本是ASD-64-80和ASD-64-128,支持64比特长度的明文分组以及80比特和128比特的密钥。在整体结构上,ASD算法采用SPN结构设计,S盒采用与PRESENT算法等价的S盒,其各项密码学性质达到最优,为最轻的S盒之一,扩散层采用PRESENT的旋转操作,具有很好的密码学性质。在安全性方面,利用混合整数线性规划的自动化分析方法寻找最少活跃盒个数进行差分分析和线性分析。实验结果表明,ASD算法可以抵抗上述两种攻击。
本文结构安排如下:第二节给出算法的结构,第三节给出算法的设计准则,第四节进行算法分析,最后,总结全文。
ASD是一个轻量级分组密码算法,分组长度支持64比特,密钥长度支持80比特和128比特,分别记作ASD-64-80和ASD-64-128,迭代轮数为31轮。
X :n比特明文
Y :n比特密文
R i :第i轮的轮常数
K i :第i轮的轮密钥
⊕ :异或
S :4比特S盒
ASD算法整体采用SPN结构,轮函数包含三个步骤:ASD算法整体采用SPN结构,轮函数F包含三个步骤:轮密钥加(AddRoundKey)、S盒替换(SubNibble)、P置换(Permutation)操作。算法结构见图1,其中 K i 为轮密钥。
图1. ASD算法结构图
将明文X逐比特异或轮密钥 K i ,获得输出状态:
V = X ⊕ K i (1)
其中 X = ( x 63 , x 62 , ⋯ , x 0 ) 表示64比特明文, V = ( v 63 , v 62 , ⋯ , v 0 ) 表示轮密钥加以后的状态。
替换是基于半字节的非线性替换,将64比特状态V划分为16个4比特块,进行S盒操作,获得输出状态:
W = S ( V ) (2)
其中 W ≜ ( w 63 , w 62 , ⋯ , w 0 ) 表示S盒替换完成后的状态,具体见表1。
将64的状态进行P置换,ASD算法的P置换。输入的第i比特对应输出的第P(i)比特,例如,输入的第0比特对应输出的第63比特,输入的第15比特对应输出的第12比特,具体见表2。
v | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S(v) | 6 | 5 | C | A | 1 | E | 7 | 9 | B | 0 | 3 | D | 8 | F | 4 | 2 |
表1. ASD算法的S盒真值表
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P(i) | 63 | 47 | 31 | 15 | 62 | 46 | 30 | 14 | 61 | 45 | 29 | 13 | 60 | 44 | 28 | 12 |
i | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
P(i) | 59 | 43 | 27 | 11 | 58 | 42 | 26 | 10 | 57 | 41 | 25 | 9 | 56 | 40 | 24 | 8 |
i | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
P(i) | 55 | 39 | 23 | 7 | 54 | 38 | 22 | 6 | 53 | 37 | 21 | 5 | 52 | 36 | 20 | 4 |
i | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
P(i) | 51 | 35 | 19 | 3 | 50 | 34 | 18 | 2 | 49 | 33 | 17 | 1 | 48 | 32 | 16 | 0 |
表2. ASD算法的P置换
将80比特种子密钥 K = k 79 k 78 ⋯ k 1 k 0 放置在寄存器中,每轮提取左边64比特作为轮密钥 K i = k 63 k 62 ⋯ k 1 k 0 = k 79 k 78 ⋯ k 17 k 16 。对K做如下更新:
1) [ k 79 k 78 ⋯ k 1 k 0 ] = [ k 18 k 17 ⋯ k 20 k 19 ] ;
2) [ k 79 k 78 k 77 k 76 ] = S [ k 79 k 78 k 77 k 76 ] ;
3) [ k 19 k 18 k 17 k 16 k 15 ] = [ k 19 k 18 k 17 k 16 k 15 ] ⊕ R i , i = 1 , 2 , ⋯ , 32 。
首先,将种子密钥K循环右移19比特;然后,将种子密钥最左端的4比特进行S盒操作,为了提高运行效率,密钥扩展算法的S盒采用加密算法中的S盒;最后,将 k 19 k 18 k 17 k 16 k 15 这5比特与 R i 进行异或操作, R i 取轮密钥最右边的5比特 k 4 k 3 k 2 k 1 k 0 。K更新完成。
将128比特种子密钥 K = k 127 k 126 ⋯ k 1 k 0 放置在寄存器中,每轮提取左边64比特作为轮密钥 K i = k 63 k 62 ⋯ k 1 k 0 = k 127 k 126 ⋯ k 65 k 64 。对K做如下更新:
1) [ k 79 k 78 ⋯ k 1 k 0 ] = [ k 62 k 61 ⋯ k 64 k 63 ] ;
2) [ k 119 k 118 k 117 k 116 ] = S [ k 119 k 118 k 117 k 116 ] ;
3) [ k 99 k 98 k 97 k 96 ] = S [ k 99 k 98 k 97 k 96 ] ;
4) [ k 79 k 78 k 77 k 76 ] = S [ k 79 k 78 k 77 k 76 ] ;
5) [ k 57 k 56 k 55 k 54 k 53 ] = [ k 57 k 56 k 55 k 54 k 53 ] ⊕ R i , i = 1 , 2 , ⋯ , 32 。
首先,将种子密钥K循环右移63比特;然后,将种子密钥中间的12比特进行S盒操作,为了提高运行效率,密钥扩展算法的S盒采用加密算法中的S盒;最后,将 k 57 k 56 k 55 k 54 k 53 这5比特与 R i 进行异或操作, R i 取为轮密钥的中间5比特 k 75 k 74 k 73 k 72 k 71 。K更新完成。
定义1 (差分均匀度)令S表示一个4 × 4的S盒。对任意非零输入差分和输出差分 α , β ∈ F 2 n ,定义集合 D S ( α → β ) = { x ∈ F 2 n | S ( x ⊕ α ) ⊕ S ( x ) = β } ,集合 D S ( α → β ) 中元素的个数为 δ S ( α , β ) ,则函数S的
差分均匀度为 δ ( S ) = max α ≠ 0 , β δ S ( α , β ) 。
定义2 (线性度)令S表示一个4 × 4的S盒。对任意非零输入掩码和输出掩码 α , β ∈ F 2 n ,令 I m b S ( α , β ) = | # { x ∈ F 2 n | α ⋅ x = β ⋅ S ( x ) } − 8 | ,其中,“∙”为内积运算,则函数S的线性度为
λ ( S ) = max α , β ∈ F 2 n , β ≠ 0 2 I m b S ( α , β ) 。
对于任意4 × 4的双射S盒,均有 δ ( S ) ≥ 4 , λ ( S ) ≥ 8 ,使得这两个值都达到最小值的S盒被称为最优S盒。
定义3 (最优S盒 [
Eslice选取最优S盒的规则如下 :
1) S是双射,即对任意 x ≠ x * ,有 S ( x ) ≠ S ( x * ) 。
2) 由差分分布表(表3)可知,对任意非零输入差分和输出差分 α , β ∈ F 2 n ,有 δ S ( α , β ) ≤ 4 ,由定义1知, δ ( S ) = 4 。
3) 由线性逼近表(表4)可知,对任意非零输入掩码和输出掩码 α , β ∈ F 2 n ,有 I m b S ( α , β ) ≤ 4 ,由定义2知, λ ( S ) = 8 。
4) S没有不动点,即对任意的 x ∈ F 2 4 ,有 S ( x ) ≠ x 。
定义4 (差分活跃S盒 [
定义5 (线性活跃S盒 [
ASD算法S盒在设计时主要遵循下列准则:
1) 单比特输入差分能引起单比特输出差分的差分特征个数为0;
2) S盒是最优S盒;
3) S盒没有不动点,即对于任意 v ∈ F 2 4 ,有 S ( v ) ≠ v ;
4) 单比特输入掩码能引起单比特输出掩码对应偏差非零的线性特征个数为4。
基于上述准则选择了ASD算法的S盒,S盒的选择对于SPN结构算法的安全性具有极大的影响。相较于8比特S盒,之所以选择4比特S盒,是因为8比特S盒不适合轻量级环境。对于选择4比特S盒作为扩散层的分组密码算法,以 Leander等人 [
扩散层作为分组密码的核心部分,其目的是提高扩散和混淆程度来实现雪崩效应,这有助于抵抗差分分析、线性分析以及一些未知分析方法的攻击。它的设计不仅影响算法的安全性,还影响分组密码在软硬件中的实现效率,在实际应用中迫切需求具有轻量级的扩散层,采用按比特进行拉线操作的扩散层极大地减少硬件面积以及更好地防御侧信道攻击,因此本文采用比特级拉线操作构造扩散层,且该扩散层具有较高的扩散性能。
密钥扩展算法设计准则如下:
1) 密钥扩展算法采用与加密算法相同的S盒,以此减少实现代价;
2) 使用轮常数消除对称性;
3) 采用简单的逻辑运算,易于实现。
实验平台的硬件环境为处理器:AMD Ryzen 5 5600U,内存16GB,操作系统:Windows 10。采用MILP搜索算法进行安全性分析。
差分和线性密码分析是分组密码最强大的技术之一。要使用差分密码分析(DC)攻击n比特分组密码,需要找到一条概率大于 2 1 − n 的差分传播,差分传播由一组微分特征组成,其概率是具有指定输入差分特征和输出差分特征的概率之和。应用MILP搜索模型,搜索差分活跃S盒个数的方法评估算法抵抗攻击的能力,得到了16轮活跃S盒个数。差分活跃S盒个数的结果见表3:
轮数 | #{AS} | 轮数 | #{AS} | 轮数 | #{AS} | 轮数 | #{AS} |
---|---|---|---|---|---|---|---|
1 | 1 | 5 | 10 | 9 | 18 | 13 | 26 |
2 | 2 | 6 | 12 | 10 | 20 | 14 | 28 |
3 | 4 | 7 | 14 | 11 | 22 | 15 | 30 |
4 | 6 | 8 | 16 | 12 | 24 | 16 | 32 |
表3. ASD算法活跃S盒的最小个数
通过差分活跃S盒个数的下界评估最大差分概率的上界。本文通过MILP模型搜索了ASD-64的结果,16轮最小差分活跃S盒的个数为32,由S盒的差分分布表(见表4)可知该算法S盒的最大差分概率为2−2,因此,估算16轮差分特征的概率约为: D P max < 2 − 2 × 32 = 2 − 64 ≤ 2 − 64 ,根据安全性分析,ASD-64的绝对安全冗余为16轮。实验结果也表明,16轮差分特征概率为 2 − 70 ≤ 2 − 64 ,因此,认为该算法能够抵抗差分攻击。
运用类似差分分析的方法,进一步评估算法抵抗线性攻击的能力。通过估算线性特征中活跃S盒个数的下界,评估线性特征最大偏差概率的上界。采用MILP自动化搜索算法搜索ASD-64的结果,线性活跃S盒个数的结果同差分结果一致,由S盒的线性分布表(见表5)可知该算法S盒的最大线性概率为2−2,估算16轮的线性偏差为: L P max ≤ 2 32 − 1 ⋅ 2 − 2 × 32 = 2 − 33 ;考虑到迭代轮数为31,因此,我们认为该算法能够抵抗线性攻击。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 2 | 0 | 0 | 4 | 2 | 0 | 0 | 0 | 2 | 0 | 0 | 4 | 2 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2 | 2 | 0 | 2 | 0 | 2 | 4 | 0 | 2 |
3 | 0 | 0 | 0 | 2 | 0 | 0 | 2 | 0 | 2 | 4 | 2 | 2 | 2 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 4 |
5 | 0 | 2 | 0 | 0 | 4 | 2 | 0 | 0 | 4 | 2 | 0 | 0 | 0 | 2 | 0 | 0 |
6 | 0 | 2 | 4 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 2 | 2 | 0 | 2 |
7 | 0 | 0 | 4 | 0 | 2 | 2 | 0 | 0 | 0 | 2 | 0 | 2 | 2 | 0 | 0 | 2 |
8 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 |
9 | 0 | 2 | 0 | 0 | 0 | 2 | 4 | 0 | 0 | 2 | 0 | 0 | 0 | 2 | 4 | 0 |
A | 0 | 0 | 0 | 0 | 0 | 4 | 2 | 2 | 2 | 0 | 2 | 0 | 2 | 0 | 0 | 2 |
B | 0 | 4 | 0 | 2 | 0 | 0 | 2 | 0 | 2 | 0 | 2 | 2 | 2 | 0 | 0 | 0 |
C | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 4 | 0 | 4 | 0 | 0 | 0 | 4 | 0 |
D | 0 | 2 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 2 | 4 | 0 | 0 | 2 | 4 | 0 |
E | 0 | 0 | 4 | 2 | 2 | 2 | 0 | 2 | 0 | 2 | 0 | 0 | 2 | 0 | 0 | 0 |
F | 0 | 2 | 4 | 2 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 2 | 2 | 0 | 0 |
表4. S盒差分分布表
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 4 | 0 | −4 | 0 | 0 | 2 | −2 | −2 | −2 | −2 | −2 | 2 | −2 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 0 | 0 | 4 | −4 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | −4 | 4 | 0 | 0 | 0 | −2 | 2 | −2 | −2 | −2 | −2 | 2 | −2 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | −4 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 |
5 | 0 | 0 | −4 | 0 | 0 | −4 | 0 | 0 | −2 | 2 | −2 | −2 | 2 | 2 | −2 | 2 |
6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 0 | 0 | −4 | 4 | 0 | 0 |
7 | 0 | 0 | −4 | 0 | −4 | 0 | 0 | 0 | −2 | 2 | 2 | 2 | −2 | −2 | 2 | −2 |
8 | 0 | 0 | 0 | −4 | −2 | −2 | 2 | −2 | 0 | −4 | 0 | 0 | −2 | 2 | 2 | 2 |
9 | 0 | 0 | 0 | 0 | −2 | 2 | 2 | −2 | 2 | 2 | −2 | −2 | 4 | 0 | 4 | 0 |
A | 0 | 0 | 0 | −4 | −2 | −2 | −2 | 2 | 4 | 0 | 0 | 0 | 2 | −2 | −2 | −2 |
B | 0 | 0 | 0 | 0 | 2 | −2 | 2 | −2 | 2 | 2 | 2 | 2 | 0 | −4 | 0 | 4 |
C | 0 | 4 | 0 | 0 | −2 | 2 | −2 | −2 | 0 | 0 | 0 | −4 | −2 | −2 | −2 | 2 |
D | 0 | 4 | 4 | 0 | −2 | −2 | 2 | 2 | −2 | 2 | −2 | 2 | 0 | 0 | 0 | 0 |
E | 0 | −4 | 0 | 0 | −2 | 2 | 2 | 2 | 0 | 0 | −4 | 0 | −2 | −2 | −2 | 2 |
F | 0 | 4 | −4 | 0 | 2 | 2 | 2 | 2 | 2 | −2 | −2 | 2 | 0 | 0 | 0 | 0 |
表5. S盒线性逼近表
SPN结构中的S是指替换(Substitution),P是指置换或更广泛的线性变换(Permutation)。SPN结构是目前广泛使用的一种分组密码整体结构,PRESENT,GIFT 和Midori等分组密码都采用该结构。SPN结构的原理是在这种密码结构的每一轮中,首先每一轮的输入经过一个可逆函数S作用,其中可逆函数S由子密钥控制,然后再作用到一个置换P。SPN结构清晰,S层一般被称为混淆层,主要起混淆作用。P一般被称为扩散层,主要起扩散的作用。直观来看,先经过混淆层,再经过扩散层,就很接近Shannon所提出的混淆原则和扩散原则,而现代分组密码将混淆层和扩散层通过整体结构迭代多次,将会增强密码的混淆性和扩散性,使得密码的输入和输出之间的依赖关系更为复杂。和Feistel结构相比,SPN结构优势在于可以得到更快的扩散。综上所述,该结构具有足够的安全性。
本算法采用分组密码算法常用的SPN结构,该结构优点在于适用于资源受限的环境,通过MILP估计了活跃S盒的个数进行计算,以此计算差分特征的概率和线性偏差,实验表明该算法该可以抵抗差分分析和线性分析等安全密码分析,具有绝对安全冗余16轮。
谢 歆. 基于SPN结构的分组密码算法ASDAn Lightweight Block Cipher ASD Based on SPN Structure[J]. 应用数学进展, 2022, 11(07): 4690-4697. https://doi.org/10.12677/AAM.2022.117495
https://linkspringer.53yu.com/chapter/10.1007/978-3-540-74619-5_12
https://doi.org/10.1007/978-3-540-74619-5_12
https://linkspringer.53yu.com/chapter/10.1007/978-3-540-74735-2_31
https://doi.org/10.1007/978-3-540-74735-2_31
https://linkspringer.53yu.com/chapter/10.1007/978-3-319-66787-4_16
https://doi.org/10.1007/978-3-319-66787-4_16
https://linkspringer.53yu.com/chapter/10.1007/978-3-662-48800-3_17
https://doi.org/10.1007/978-3-662-48800-3_17
https://linkspringer.53yu.com/chapter/10.1007/3-540-48071-4_34
https://doi.org/10.1007/3-540-48071-4_34
https://linkspringer.53yu.com/chapter/10.1007/3-540-48285-7_33
https://doi.org/10.1007/3-540-48285-7_33
https://linkspringer.53yu.com/chapter/10.1007/978-3-662-52993-5_14
https://doi.org/10.1007/978-3-662-52993-5_14
https://linkspringer.53yu.com/chapter/10.1007/978-3-540-73074-3_13
https://doi.org/10.1007/978-3-540-73074-3_13