-
-
[原创]基于SPN结构的分组加密算法JinGang设计原理详解
-
发表于: 14小时前 246
-
基于SPN结构的分组加密算法JinGang设计原理详解
JinGang属于对称加密算法5大分支之一的分组加密算法,基于经典SPN结构(Substitution-Permutation Network)设计。JinGang的分组长度为128比特,根据主密钥长度的不同,JinGang算法可以分为JinGang128,JinGang192和JinGang256这3个版本,对应的算法循环轮数分别为12,14和16。
当主密钥长度为128比特,JinGang128算法的加密过程如下图所示:

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

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

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

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

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

由以上3图我们可以发现,JinGang128,JinGang192和JinGang256加密算法之间除了密钥扩展算法不同和轮函数循环的轮数不同之外,其它地方基本一致。
这里我们只介绍JinGang128算法,对于JinGang192和JinGang256算法可以依此类推。
我们先来看JinGang128的轮函数(由4步构成)。
(1)Substitution(S盒替换):

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

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

由上图可以看出JinGang算法的S盒密码学性质与AES算法的S盒相当,能够很好的抵抗差分和线性密码分析,故该S盒可以在分组加密算法中使用。
Substitution(S盒替换)的设计目的:
1. 抵抗差分和线性密码分析
如果整个加密过程都是线性的(仅包含异或、移位等操作),攻击者就可以通过高斯消元法等数学手段,将加密过程表示为线性方程组,从而直接求解出密钥。S盒通过非线性映射(即输出比特是输入比特的非线性函数),彻底破坏了这种线性结构,使得差分密码分析(Differential Cryptanalysis)和线性密码分析(Linear Cryptanalysis)在计算上不可行。
2. 提供加密算法必需的混淆性
S盒是实现克劳德·香农提出的“混淆”原则的关键。它旨在掩盖密钥与密文之间的统计关系。即使明文或密钥只改变1个比特,经过S盒替换后,输出端会有多个比特发生不可预测的剧烈变化,这使得攻击者无法从密文中推导出密钥的任何有效信息。
3. 抵抗侧信道攻击
在实际硬件(如FPGA/ASIC)中,S盒通常以查找表(Look-up Table)的形式实现,仅需极小的门电路即可在单时钟周期内完成替换,执行效率极高。同时,S盒的非线性特性也能有效抵御侧信道攻击(如功耗分析),因为非线性运算在物理层面产生的功耗波动比线性运算更难建模。
(2)Permutation(P盒置换):

如上图所示,上个过程中的16字节(x0,x1,…,x14,x15)中间状态根据置换表变换位置而不改变其值,输出被P盒变换位置后的16字节(y0=x0,y1=x1,…,y14=x14,y15=x15)。不难发现,Permutation 为对合变换。P盒的置换表如下图所示:

Permutation(P盒置换)的设计目的:
Permutation需要和其他操作配合,才能完全发挥扩散作用:
与字节替换(Substitution)协同:Substitution通过S盒进行非线性替换,负责引入“混淆”。而Permutation则是一个线性的置换操作,它只改变字节的位置,不改变字节本身的值。两者结合,既搅乱了数据内容,又打乱了数据位置。
[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。