首页
社区
课程
招聘
[原创]基于Feistel结构的分组加密算法Smart设计原理详解
发表于: 14小时前 252

[原创]基于Feistel结构的分组加密算法Smart设计原理详解

14小时前
252

基于Feistel结构的分组加密算法Smart设计原理详解

Smart属于对称加密算法5大分支之一的分组加密算法,基于经典Feistel结构设计,轮函数为SPN(Substitution-Permutation Network)结构。Smart的分组长度为128比特,根据主密钥长度的不同,Smart算法可以分为Smart128,Smart192和Smart256这3个版本,对应的算法循环轮数分别为24,28和32。

当主密钥长度为128比特,Smart128算法的加密过程如下图所示:

Smart128算法的解密过程如下图所示:

当主密钥长度为192比特,Smart192算法的加密过程如下图所示:

Smart192算法的解密过程如下图所示:

当主密钥长度为256比特,Smart256算法的加密过程如下图所示:

Smart256算法的解密过程如下图所示:

其中轮函数F如下图所示:

由以上3图我们可以发现,Smart128,Smart192和Smart256加密算法之间除了密钥扩展算法不同和轮函数循环的轮数不同之外,其它地方基本一致。

这里我们只介绍Smart128算法,对于Smart192和Smart256算法可以依此类推。

我们先来看Smart128的轮函数(由3步构成)。

(1)AddRoundKey(轮密钥加)

将R的8个字节的中间状态分别依次异或对应位的密钥字节,具体操作如下图所示:

AddRoundKey(轮密钥加)的设计目的

分组加密中引入轮密钥(而非所有轮次共用主密钥)的核心目的,是破坏轮与轮之间的同构性,并充分混入密钥的随机性,以抵御多种已知密码分析攻击。具体体现在以下三个层面:1. 打破对称性,抵御“滑动攻击”
如果每轮都使用相同的主密钥,整个加密过程会呈现“周期自相似性”(即轮函数的迭代重复)。攻击者可以利用这种结构弱点,通过滑动攻击(Slide Attack)将破解复杂度从指数级降至线性级。轮密钥的差异性直接切断了这种利用路径,使每一轮的变换都具有独特的密钥约束。

2. 实现密钥的充分混淆与扩散(非线性关联)
轮密钥并非简单切分主密钥,而是通过密钥编排算法(Key Schedule)(通常含循环移位、S盒替换等非线性操作)生成。这确保了:

·        充分扩散:主密钥的每一个比特都能影响到多个不同轮密钥的多个比特。

·        强非线性:密文与主密钥之间的统计关系变得极其复杂,有效抵御线性攻击差分攻击(攻击者无法通过线性逼近或差分传递来猜测密钥)

3. 保障轮间独立性,抵御相关密钥攻击
复杂的密钥编排确保各轮子密钥之间、子密钥与主密钥之间不存在简单的线性或代数关系。即使攻击者通过旁路攻击(如功耗分析)部分泄露了某一轮的子密钥,也无法反向推导出主密钥或其他轮密钥,从而提升了整体的安全冗余。

(2)Substitution(S盒替换)

如上图所示,加密过程中的8字节(x0,x1,…,x6,x7)中间状态平行独立地进入8个相同的S盒,输出被S盒替换后的16个字节(y0,y1,…,y6,y7)。该8比特S盒的查找表如下图所示:

S盒的各项密码学指标如下图所示:

由上图可以看出Smart算法的S盒密码学性质与AES算法的S盒相当,能够很好的抵抗差分和线性密码分析,故该S盒可以在分组加密算法中使用。


[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!

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