-
-
[原创]轻量级分组加密算法Midori
-
发表于: 2023-10-4 10:13 4982
-
轻量级分组加密算法Midori
Midori算法为基于SPN结构设计的轻量级分组密码算法。算法密钥长度为128位,分组大小分别为64位(Midori-64)和128位(Midori-128),对应的迭代轮数为16轮与20轮。每轮轮函数F由SubCell、ShuffleCell、MixColumn、AddKey共4部分组成。分组状态表示为16个比特块的形式,分组规模为64比特时,每个比特块为半字节(4-bit);分组规模为128比特时,每个比特块为字节(8-bit)。
(1) 单元替换层
在Midori-64中使用一个S盒S1,在Midori-128中使用由两个S2与4个不同的置换生成4个8比特的S盒Sb0,Sb1,Sb2,Sb3。
64位中间状态划分为16个4-bit的S0…S15,然后S0…S15依次进入16个相同的4X4S盒(S1),输出为B0…B15
(2)单元置换层
(1)中输出的4X16位中间状态的每个半字节通过置换表进行重新排列。
(B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15)=(S0,S10,S5,S15,S14,S4,S11,S1,S9,S3,S12,S6,S7,S13,S2,S8)
(3) 列混合层
使用对合二元矩阵M对状态中每一列进行如下操作,即M●(si,si+1,si+2,si+3)T→(bi,bi+1,bi+2,bi+3)T,其中,i=0,4,8,12。
(2)中输出的4X16位中间状态每一列乘以4×4的M矩阵运算。
(4)轮密钥加层
将(3)中输出的64位的中间状态与64位的轮密钥逐比特异或。
中间状态为S0…S15(16半字节),轮密钥为RK0…RK15(16半字节),则输出为Bi=Si+RKi(0≤i≤15)
在第一轮加密之前对明文有一个轮密钥加操作,最后一轮取消了单元置换和列混合操作,只包括单元替换和密钥加操作。
轮密钥生成算法
Midori算法使用128比特主密钥,其密钥扩展算法较为简单。其中,Midori-64算法将128比特主密钥分为两部分K=k0||k1,算法的入口与出口白化密钥均为WK=k0⊕k1,圈子密钥kei=k(i+1)mod2⊕αi,1≤i≤15,其中,αi是轮常数。而Midori-128算法的入口与出口白化密钥均为WK=K,圈子密钥kei=K⊕βi,1≤i≤19,其中,βi为轮常数。且当1≤i≤15时,满足αi=βi。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]基于NFSR和S盒的国产流密码算法Bagua 3087
- [原创]基于ARX结构的流密码算法Salsa20 2566
- [原创]基于LFSR和NFSR的流密码算法Grain v1 1998
- [原创]轻量级流密码算法Trivium 2535
- [原创]常见分组加密算法的整体结构 2068