博客主页:christine-rr-CSDN博客
专栏主页:密码学
📌 【今日更新】📌
对称密码算法——SM4
目录
一、国密SM系列算法概述
二、SM4算法
2.1算法背景
2.2算法特点
2.3 基本部件
2.3.1 S盒
2.3.2 非线性变换 编辑
2.3.3 线性变换部件L
2.3.4合成变换 T
2.3.5轮函数
2.3.6 加密算法
2.3.7 解密算法
2.3.8 密钥扩展算法
2.4算法流程
2.4.1 密钥扩展:
2.4.2 轮函数(F函数):
2.4.3 加密过程:
2.4.4 解密过程:
2.5 算法模式
2.6 安全性分析
2.7 应用场景
一、国密SM系列算法概述
国密算法(SM系列)是由中国国家密码管理局制定的一系列密码算法标准,旨在保障信息安全,推动密码技术的自主可控。涵盖对称加密、非对称加密、哈希算法及身份认证等领域,广泛应用于金融、政务、通信等关键领域。以下是主要SM算法的分类及简介:
- SM1、SM4、SM5、SM6、SM7、SM8、ZUC祖冲之密码:对称密码,
- SM2、SM9:公钥密码 (非对称加密)
- SM3:属于单向散列函数。
- SM9:基于身份基加密(IBE)或叫标识密码的算法
目前我国主要使用公开的SM2、SM3、SM4作为商用密码算法。
其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用
二、SM4算法
2.1算法背景
SM4算法是用于WAPI的分组密码算法,是2006年我国国家密码管理局公布的国内第一个商用密码算法,原名SMS4,2012年正式成为国家标准(GB/T 32907-2016),2021年成为国际标准(ISO/IEC 18033-3:2021/AMD1:2021)。
SM4算法的设计目标是替代国际通用的AES算法,适用于无线局域网、金融支付、物联网等场景的数据加密。
2.2算法特点
- 分组长度和密钥长度:SM4算法的分组长度和密钥长度均为128位(16字节)。
- 迭代轮数:加密算法与密钥扩展算法都采用32轮非线性迭代结构,每轮使用一个轮密钥。
- 算法结构:基于Feistel网络结构,但采用了非平衡的Feistel变体,结合了S盒替换、线性变换和密钥混合等操作。
- 单位:以字节(8位)和字(32位)为单位进行数据处理。
- 安全性:SM4算法的安全性经过严格评估,能够抵御差分攻击、线性攻击等常见密码分析方法。
2.3 基本部件
SM4密码算法的基本运算有模2加和循环移位。
① 模2加:记为,为32位逐比特异或运算。
② 循环移位:i,把32位字循环左移i位。
2.3.1 S盒
S盒是以字节为单位的非线性替换,其密码学作用是混淆,它的输入和输出都是8位的字节。设输入字节为 ,输出字节为, 则S盒的运算可表示为:
S盒的替换规则如下,例如输入为EF,则输出为第E行与第F列交叉处的值84,即 S(EF)=84 。
SM4密码算法的S盒
2.3.2 非线性变换
非线性变换 是以字为单位的非线性替换,它由4个S盒并置构成。设输入为
(4个32位的字),输出为
(4个32位的字),则
(3-1)
2.3.3 线性变换部件L
线性变换部件L是以字为处理单位的线性变换,其输入输出都是32位的字,它的密码学作用是扩散。 设 L的输入为字B,输出为字C,则
(3-2)
2.3.4合成变换 T
合成变换T由非线性变换和线性变换L复合而成,数据处理的单位是字。设输入为字 X,则先对 X进行非线性
变换,再进行线性L变换。记为
(3-3)
由于合成变换 是非线性变换 和线性变换 的复合,所以它综合起到混淆和扩散的作用,从而可提高密码的安全性。
2.3.5轮函数
轮函数由上述基本密码部件构成。设轮函数 的输入为4个32位字共128位,轮密钥为一个32位的字 。输出也是一个32位的字,由下式给出:
根据式(3-3),有
记 ,根据式(3-1)和式(3-2),有
轮函数的结构如图所示
SM4算法的加密算法和轮函数结构图
2.3.6 加密算法
加密算法采用32轮迭代结构,每轮使用一个轮密钥。
设输入的明文为四个字(128比特长),输入的轮密钥为
,共32个字。输出的密文为四个字
(128比特长)。加密算法可描述如下:
为了与解密算法需要的顺序一致,同时也与人们的习惯顺序一致,在加密算法之后还需要一个反序处理:
(3-4)
2.3.7 解密算法
解密算法与加密算法相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
算法的输入为密文 和轮密钥
,输出为明文
。根据式
。为了便于与加密算法对照,解密算法中仍然用
表示密文。于是可得到如下的解密算法。
解密算法:
与加密算法之后需要一个反序处理同样的道理,在解密算法之后也需要一个反序处理 :
2.3.8 密钥扩展算法
SM4算法加密时输入128位的密钥,采用32轮迭代结构,每一轮使用一个32位的轮密钥,共使用32个轮密钥。使用密钥扩展算法,从加密密钥产生出32个轮密钥。
(1)常数FK
在密钥扩展中使用如下的常数:
(2)固定参数
共使用32个固定参数,每个
是一个字,其产生规则如下:
设为
的第
字节
,即
,则
这32个固定参数如下(16进制):
设输入的加密密钥为 ,输出轮密钥为
,密钥扩展算法可描述如下,其中
为中间数据:
其中的变换与加密算法轮函数中的
基本相同,只将其中的线性变化 修改为以下的 :
密钥扩展算法的结构与加密算法的结构类似,也是采用了32轮的迭代处理。
2.4算法流程
SM4算法的加密过程主要包括以下几个步骤:
2.4.1 密钥扩展:
- 将128位的初始密钥通过密钥扩展算法生成32个32位的轮密钥。
- 密钥扩展过程中使用了固定参数(CK)和系统参数(FK),确保密钥与轮函数之间的强关联性。
2.4.2 轮函数(F函数):
- 每轮迭代使用一个轮密钥,通过非线性变换(S盒)和线性变换(L函数)对数据进行处理。
- S盒替换:将8位输入通过复合域S盒进行非线性替换,增强抗差分攻击能力。
- 线性变换:包括循环左移和异或操作,实现数据的高分支数扩散
2.4.3 加密过程:
- 将128位的明文分组分为4个32位的字(X₀, X₁, X₂, X₃)。
- 通过32轮迭代,每轮使用一个轮密钥,生成新的中间状态。
- 最后一轮后,将4个字逆序拼接,得到128位的密文。
2.4.4 解密过程:
- 解密过程与加密过程相同,只是轮密钥的使用顺序相反。
2.5 算法模式
SM4算法支持多种工作模式,常见的有:
- ECB(电子密码本模式):每个分组独立加密,安全性较低,不推荐用于加密大量数据。
- CBC(密码分组链接模式):使用初始化向量(IV),每个分组的加密依赖于前一个分组的密文,安全性较高。
- CTR(计数器模式):将块加密算法转换为流加密算法,适合并行加密,安全性高。
2.6 安全性分析
- 密钥空间:128位的密钥长度提供了足够大的密钥空间,理论上可抵御暴力破解。
- 抗攻击能力:SM4算法的S盒设计和线性变换结构能够有效抵御差分攻击、线性攻击等常见密码分析方法。
- 国际认可:SM4算法已成为国际标准,表明其设计通过了国际密码学界的审查。
2.7 应用场景
- 无线局域网(WLAN):SM4算法是中国无线局域网标准(WAPI)中推荐的加密算法。
- 金融支付:在移动支付、网上银行等场景中,SM4算法用于保护敏感数据。
- 物联网(IoT):SM4算法适用于资源受限的物联网设备,提供高效的数据加密。
- 政务和电信:在政府机密数据传输、电信通信加密等领域广泛应用。