首页
社区
课程
招聘
[原创]轻量级分组加密算法GIFT
2023-11-24 16:15 2831

[原创]轻量级分组加密算法GIFT

2023-11-24 16:15
2831

轻量级分组加密算法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-bitS0…S15,然后S0…S15依次进入16个相同的4X4S盒(S),输出为B0…B15

(2)比特置换层

GIFT-64算法的置换层是以比特为单位进行换位变换。实现将第i个比特位置的状态值置换为第P(i)位。

(3)轮密钥加层

该步骤由轮密钥加和轮常数加两部分组成。对于密钥加部分,通过密钥调度算法生成32bit的轮密钥RK(1r28),将轮密钥划分成两部分:

RKr=U||V=u15……u0||v15……v0

将U和V分别与状态值{b4i+1}和{b4i}异或得到

b4i+1←b4i+1⊕ui     b4i←b4i⊕vi(0i15)

对于常数加部分,将单比特“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)



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回