ICS35.040 L80 备案号:36825—2012 GM 中华人民共和国密码行业标准 GM/T0002-2012 SM4分组密码算法 SM4 block cipher algorithm 2012-03-21发布 2012-03-21实施 国家密码管理局 发布 GM/T0002-2012 目 次 前言 1范围 2术语和定义 1 3符号和缩略语 4 ...1 4算法结构 1 5密钥及密钥参量 .2 6轮函数F 2 6.1轮函数结构 2 6.2合成置换T 7算法描述 3 7.1加密算法 7.2解密算法 3 7.3密钥扩展算法 .3 附录A(资料性附录)运算示例 4 A.1示例1 .4 A.2示例2 5 I GM/T0002-2012 前言 本标准依据GB/T1.1一2009给出的规则起草. 请注意本文件的某些内容可能涉及专利.本文件的发布机构不承担识别这些专利的责任. 本标准的附录A为资料性附录. 本标准由国家密码管理局提出并归口. 本标准起草单位:中国科学院数据与通信保护研究教育中心、国家密码管理局商用密码检测中心. 本标准主要起草人:吕述望、李大为、张超、张众、董芳、毛颖颖、刘振华. GM/T0002-2012 SM4分组密码算法 1范围 本标准规定了SM4分组密码算法的算法结构和算法描述,并给出了运算示例. 本标准适用于密码应用中使用分组密码的需求. 2术语和定义 下列术语和定义适用于本文件. 2.1 分组长度block length 一个信息分组的比特位数. 2.2 密钥长度key length 密钥的比特位数. 2.3 密钥扩展算法key expansion algorithm 将密钥变换为轮密钥的运算单元. 2.4 轮数rounds 轮函数的迭代次数. 2.5 字word 长度为32比特的组(串). 2.6 S盒S-hox S盒为固定的8比特输入8比特输出的置换,记为Sbox(.). 3符号和缩略语 下列符号和缩略语适用于本文件: ⊕ 32位异或 <<<32位循环左移i位 4算法结构 M4密码算法是一个分组算法.该算法的分组长度为128比特,密钥长度为128比特.加密算法 与密钥扩展算法都采用32轮非线性迭代结构.数据解密和数据加密的算法结构相同,只是轮密钥的使 用顺序相反,解密轮密钥是加密轮密钥的逆序. 1 GM/T0002-2012 5密钥及密钥参量 加密密钥长度为128比特,表示为MK=(MKa MK1 MK2 MK) 其中MK(i=0 1 2 3)为字. 轮密钥表示为(rk rk1 rka) 其中rk (i=0 31)为32比特字.轮密钥由加密密钥生成. FK=(FK FK1 FK2 FK3)为系统参数,CK=(CK CK1 CK31)为固定参数,用于密钥扩展 算法,其中FK (i=0 3)、CK (i=0 31)为字. 6轮函数F 6.1轮函数结构 设输入为(X X1 X2 Xx)E(Z) 轮密钥为rkEZ 则轮函数F为: F(X X1 X2 X3 rk)=Xn⊕T(X1⊕X2⊕X⊕rk) 6.2合成置换T T:Z→Z是一个可逆变换,由非线性变换和线性变换L复合而成,即T(.)=L((.)). (1)非线性变换x x由4个并行的S盒构成. 设输入为A=(aoa1 2 as)E(Z) 输出为B=(bo b1 b b)∈(Z) 则 (bo.b b2 ba)=t(A )=(Sbox(a) Sbox(a) Sbox(a?) Sbox(aa)) 其中,Sbox数据如下: 0 2 3 5 7 8 9 A B C D E F 0 D6 90 E9 FE cc El 3D B7 16 B6 14 C2 28 FB 2C 05 1 2B 67 9A 76 2A BE 04 C3 AA 44 13 26 49 86 06 99 2 9C 42 50 F4 91 EF 98 7A 33 54 OB 43 ED CF AC 62 EA B3 IC A9 C9 08 E8 95 80 DF 94 FA 75 8F 3F A6 4 47 07 A7 FC F3 73 17 BA 83 59 3C 19 E6 85 4F A8 5 68 6B 81 B2 71 64 DA 8B F8 EB OF 4B 70 56 9D 35 6 IE 24 OE SE 63 58 DI A2 25 22 7C 3B 01 21 78 87 7 D4 00 46 57 9F D3 27 52 4C 36 02 E7...