SM4
SM4
SM4的前身是SMS4(后改名),即使SMS4跟SM4是同一个算法
算法结构
- 分组算法,分组长度为128比特,密钥长度为128 比特,输入输出都是128bit
- 加密算法与密钥扩展算法均采用非线性迭代结构,运算轮数均为32轮。
- 数据解密和数据加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
- 以字节(8位)和字(32位)为单位进行数据处理
完整过程
前置知识
字:长度为32比特的字符串。
128bit = 4字,以四个字为单位(128bit)来进行运算,8个16进制的比特串=1字
加密
加密算法的运算过程如下:
- 将128bit的明文分成4个32bit的字X1,X2,X3,X4
- 进行32轮的轮操作
- 对最后得到的4个字进行反序变换,即得到128bit的密文
加密过程中:迭代 Xi+4
也就是每一轮的四个X如何计算得到?
迭代运算,对明文扩展:已知X0 - X3【明文】,对这些X与当前的轮密钥rki进行某种运算F。去求出X4 - X35
这其中每一轮用到了F(X,rk),但这里的T是什么?
为得到Xi+4 ,用到的合成变换T
非线性变换示例
密钥扩展:轮密钥rk的生成过程
轮密钥由输入的128bit密钥生成,来生成32轮的轮密钥
即,用MK去计算,得到32轮的rki
前置知识
密钥拓展的算法
注:得到的第一轮的子密钥,也是下一轮密钥运算的K4。
用的是T‘,因为相比于T,这里的线性变换算法L’是有所变化的。
例子
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”