1.概述
随着密码标准的制定活动在国际上热烈开展,我国对密码算法的设计与分析也越来越关注,因此国家密码管理局公布了国密算法SM4。SM4算法(全称为SM4分组密码算法),是国家密码管理局2012年3月发布的第23号公告中公布的密码行业标准。该算法适用于无线局域网的安全领域,优点是软件和硬件实现容易,运算速度快。
SM4分组密码算法是一个迭代分组密码算法,由加解密算法和密钥扩展算法组成。SM4分组密码算法采用非平衡Feistel结构,明文分组长度为128bit,密钥长度为128bit。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
与DES类似,SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。这里解释一下分组长度和密钥长度。分组长度(block length)是一个信息分组的比特位数,密钥长度是密钥的比特位数。可以看出,这2个长度都是比特位数,说16字节也可以。如果看到分组长度是128,没有带单位,那么应该知道默认是比特。
SM4加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。
SM4分组密码算法在使用上表现出了安全高效的特点,与其他分组密码相比较有以下优势。
(1)算法资源利用率高,表现为在密钥扩展算法与加密算法上可共用。
(2)加密算法流程和解密算法流程一样,只是轮密钥顺序相反,因此无论是软件实现还是硬件实现都非常方便。
(3)算法中包含异或运算、数据的输入输出、线性置换等模块,这些模块都是按8位来进行运算的,现有的处理器完全能处理。
SM4分组密码算法主要包括加密算法、解密算法以及密钥的扩展算法三部分。其基本算法结构如图3-15所示。
图3-15
可见,其最初输入的128位密钥还要进行密钥扩展,变成轮密钥后才能用于算法(轮函数)。
2.密钥及密钥参量
SM4算法中的加密密钥和解密密钥长度相同,一般定为128bit,即16字节,在算法中表示为MK=(MK 0 , MK 1 , MK 2 , MK 3 )。其中,MK i (i=0, 1, 2, 3)为32bit。算法中的轮密钥是由加密算法的密钥生成的,主要表示为(rk 0 , rk 1 , …, rk 31 )。其中,rk i (i=0, 1, …, 31)为32bit。
FK=(FK 1 , FK 2 , FK 3 , FK 4 )为系统参数,CK=(CK 0 , CK 1 , …, CK 31 )为固定参数,这两个参数主要在密钥扩展算法中使用。其中,FK i (i=0, 1, …, 31)、CK i (i=0, 1, …, 31)均为32bit,也就是说一个FK i 和一个CK i 都是4个字节。