SM4

2023-10-18 10:34:37 浏览数 (1)

sm4

无线局域网产品使用的 SMS4 密码算法

本算法是一个分组算法。该算法的分组长度为 128 比特,密钥长度为 128 比特。加密算 法与密钥扩展算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮 密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

  1. 术语说明 1.1 字与字节 用 表示 e-比特的向量集, 中的元素称为字, 中的元素称为字节。 e Z 2
  2. Z2
  3. Z2 1.2 S 盒 S 盒为固定的 8 比特输入 8 比特输出的置换,记为 Sbox(.)。 1.3 基本运算 在本算法中采用了以下基本运算: ⊕ 32 比特异或 <<< i 32 比特循环左移 i 位 1.4 密钥及密钥参量 加密密钥长度为 128 比特,表示为MK=(MK0, MK1, MK2, MK3),其中MKi(i=0,1,2,3)为 字。 轮密钥表示为(rk0, rk1, …, rk31),其中rki(i=0,…,31)为字。轮密钥由加密密钥生成。 FK=(FK0, FK1, FK2, FK3)为系统参数,CK=(CK0, CK1,…, CK31)为固定参数,用于密钥扩 展算法,其中FKi(i=0,…,3)、CKi(i=0,…,31)为字。
  4. 轮函数 F 本算法采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。 设输入为 ,轮密钥为 ,则轮函数 F 为: 432
  5. 2 ∈ ZXXXX )(),,,( 32 ∈ Zrk 2 ),,,,( ( ) 3210 0 321 = ⊕ ⊕ ⊕ ⊕ rkXXXTXrkXXXXF 1 2.1 合成置换 T T: ,是一个可逆变换,由非线性变换 τ 和线性变换 L 复合而成,即 T(.)=L(τ(.))。 32 2 32
  6. → ZZ 2.1.1 非线性变换τ τ 由 4 个并行的 S 盒构成。 设输入为 , 输出为 ,则 48
  7. 2 = ∈ ZaaaaA )(),,,( 48
  8. 2 = ∈ ZbbbbB )(),,,( ))(),(),(),(()(),,,( 3210 0 1 2 3 = τ = aSboxaSboxaSboxaSboxAbbbb 2.1.2 线性变换 L 非线性变换 τ 的输出是线性变换 L 的输入。设输入为 ,输出为 ,则 32 ∈ ZB 2
  9. ∈ ZC 2 == ⊕ BBBLC B <<<⊕<<< ⊕ B <<< ⊕ B <<< )24()18()10()2()( 2.2 S 盒 S 盒中数据均采用 16 进制表示。
  1. 加/解密算法 定义反序变换 R 为: ),,,(),,,( 3210 = AAAAAAAAR 0123 , 。 3,2,1,0, 32 i 2 iZA =∈ 设明文输入为 ,密文输出为 ,轮密钥 为 。则本算法的加密变换为: 432
  2. 2 ∈ ZXXXX )(),,,( 432
  3. 2 ∈ ZYYYY )(),,,( 31,...,2,1,0, 32 i 2 iZrk =∈ (),,,,( .13,...,1,0,) i 4 = 321 = iiiiii ⊕ 1 ⊕ ii 2 ⊕ i 3 ⊕ i irkXXXTXrkXXXXFX = ),,,(),,,(),,,( 3210 = 35343332 = XXXXXXXXRYYYY 32333435 。 本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序。 加密时轮密钥的使用顺序为:(rk0, rk1, …, rk31) 解密时轮密钥的使用顺序为:(rk31, rk30, …, rk0)
  4. 密钥扩展算法 本算法中加密算法的轮密钥由加密密钥通过密钥扩展算法生成。 加密密钥MK=(MK0, MK1, MK2, MK3),MKi∈ ,i=0,1,2,3;
  5. Z2 令Ki∈ ,i=0,1,…,35,轮密钥为 ,则轮密钥生成方法为: 32 Z2 31,...,1,0, 32 i 2 iZrk =∈ 首先,(K0,K1,K2,K3)=(MK0○ FK0,MK1○ FK1,MK2○ FK2,MK3○ FK3) 然后,对i = 31,...,2,1,0 : ( ) ii 4 i i 1 ⊕ i 2 ⊕ i 3 ⊕ CKKKKTKKrk i ⊕== ′ 说明: (1) ' T 变换与加密算法轮函数中的 T 基本相同,只将其中的线性变换 L 修改为以下 : ' L ' L (B)=B○ (B<<< 13)○ (B<<< 23); (2)系统参数 FK 的取值,采用 16 进制表示为: FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC) (3)固定参数 CK 的取值方法为: 设cki,j为CKi的第j字节(i=0,1,…,31;j=0,1,2,3),即CKi = (cki,0,cki,1,cki,2,cki,3) ∈ , 则ck 48
  6. Z )( i,j = (4i j)×7(mod 256)。32 个固定参数CKi,其 16 进制表示为: 00070e15, 1c232a31, 383f464d, 545b6269, 70777e85, 8c939aa1, a8afb6bd, c4cbd2d9, e0e7eef5, fc030a11, 181f262d, 343b4249, 50575e65, 6c737a81, 888f969d, a4abb2b9, c0c7ced5, dce3eaf1, f8ff060d, 141b2229, 30373e45, 4c535a61, 686f767d, 848b9299, a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209, 10171e25, 2c333a41, 484f565d, 646b7279 3
  7. 加密实例 以下为本算法 ECB 工作方式的运算实例,用以验证密码算法实现的正确性。其中,数 据采用 16 进制表示。 实例一: 对一组明文用密钥加密一次 明 文 : 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 加密密钥 : 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 轮密钥与每轮输出状态 : rk[ 0] = f12186f9 X[ 0] = 27fad345 rk[ 1] = 41662b61 X[ 1] = a18b4cb2 rk[ 2] = 5a6ab19a X[ 2] = 11c1e22a rk[ 3] = 7ba92077 X[ 3] = cc13e2ee rk[ 4] = 367360f4 X[ 4] = f87c5bd5 rk[ 5] = 776a0c61 X[ 5] = 33220757 rk[ 6] = b6bb89b3 X[ 6] = 77f4c297 rk[ 7] = 24763151 X[ 7] = 7a96f2eb rk[ 8] = a520307c X[ 8] = 27dac07f rk[ 9] = b7584dbd X[ 9] = 42dd0f19 rk[10] = c30753ed X[10] = b8a5da02 rk[11] = 7ee55b57 X[11] = 907127fa rk[12] = 6988608c X[12] = 8b952b83 rk[13] = 30d895b7 X[13] = d42b7c59 rk[14] = 44ba14af X[14] = 2ffc5831 rk[15] = 104495a1 X[15] = f69e6888 rk[16] = d120b428 X[16] = af2432c4 rk[17] = 73b55fa3 X[17] = ed1ec85e rk[18] = cc874966 X[18] = 55a3ba22 rk[19] = 92244439 X[19] = 124b18aa rk[20] = e89e641f X[20] = 6ae7725f rk[21] = 98ca015a X[21] = f4cba1f9 rk[22] = c7159060 X[22] = 1dcdfa10 rk[23] = 99e1fd2e X[23] = 2ff60603 rk[24] = b79bd80c X[24] = eff24fdc rk[25] = 1d2115b0 X[25] = 6fe46b75 rk[26] = 0e228aeb X[26] = 893450ad rk[27] = f1780c81 X[27] = 7b938f4c rk[28] = 428d3654 X[28] = 536e4246 rk[29] = 62293496 X[29] = 86b3e94f rk[30] = 01cf72e5 X[30] = d206965e rk[31] = 9124a012 X[31] = 681edf34 密 文 : 68 1e df 34 d2 06 96 5e 86 b3 e9 4f 53 6e 42 46 实例二: 利用相同加密密钥对一组明文反复加密 1000000 次 明 文 : 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 加密密钥 : 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10 密 文 : 59 52 98 c7 c6 fd 27 1f 04 02 f8 04 c3 3d 3f 66

新修订的《商用密码管理条例》7月1日起施行。

0 人点赞