-
-
[原创]轻量级分组加密算法GIFT
-
发表于: 2023-11-24 16:15 5201
-
轻量级分组加密算法GIFT
GIFT算法为基于SPN结构设计的轻量级分组密码算法。算法分组大小为64位,密钥长度分别为64bit(GIFT-64)和128bit(GIFT-128),对应的迭代轮数为28轮与40轮。每轮轮函数F由S盒变换、比特置换、轮密钥加共3部分组成。分组状态表示为16个比特块的形式,每个比特块为半字节(4-bit)。
GIFT-64算法轮函数
(1) S盒变换层
把输入的64位中间状态划分为16个4-bit的S0…S15,然后S0…S15依次进入16个相同的4X4S盒(S),输出为B0…B15。
GIFT-64算法的置换层是以比特为单位进行换位变换。实现将第i个比特位置的状态值置换为第P(i)位。
(3)轮密钥加层
该步骤由轮密钥加和轮常数加两部分组成。对于密钥加部分,通过密钥调度算法生成32bit的轮密钥RK(1≤r≤28),将轮密钥划分成两部分:
RKr=U||V=u15……u0||v15……v0
将U和V分别与状态值{b4i+1}和{b4i}异或得到
b4i+1←b4i+1⊕ui b4i←b4i⊕vi(0≤i≤15)
对于常数加部分,将单比特“1”和一个6bit常数C=c5c4c3c2c1c0分别与状态值的第63、23、19、15、11、7、3个比特进行异或:
b63←b63⊕1,b23←b23⊕c5,b19←b19⊕c4,
b15←b15⊕c3,b11←b11⊕c2,b7←b7⊕c1,b3←b3⊕c0
轮密钥生成算法
对于64比特密钥长度的GIFT算法,轮密钥RKr=U‖V
由从密钥状态(k7‖k6‖…‖k0)中提取的两个
16比特字组成,且轮密钥的提取在密钥状态更新之前:
U←k1,V←k0
密钥状态的更新方式如下:
(k7‖k6‖…‖k0)←(k1>>>2‖k0>>>12‖…‖k3‖k2)
轮常数定义为(c5,c4,c3,c2,c1,c0),其通过一个LFSR作用进行状态值更新,初始值置0,采用如下函数进行状态更新:
(c5,c4,c3,c2,c1,c0)←(c4,c3,c2,c1,c0,c5⊕c4⊕1)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
- [原创]基于NFSR和S盒的国产流密码算法Bagua 3062
- [原创]基于ARX结构的流密码算法Salsa20 2548
- [原创]基于LFSR和NFSR的流密码算法Grain v1 1973
- [原创]轻量级流密码算法Trivium 2517
- [原创]常见分组加密算法的整体结构 2049