logo资料库

SM4密码算法.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
SMS4 密码算法 本算法是一个分组算法。该算法的分组长度为 128 比特,密钥长度为 128 比特。加密算 法与密钥扩展算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮 密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 1. 术语说明 1.1 字与字节 用 eZ 2 表示 e-比特的向量集, 32 2Z 中的元素称为字, 8 2Z 中的元素称为字节。 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)为字。 2. 轮函数 F 本算法采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。 设输入为 ( XXXX , , , 0 1 2 ) ∈ ( Z 32 2 4 ) 3 ,轮密钥为 rk ∈ ,则轮函数 F 为: 2Z 32 XXXXF ( , , , 2 1 0 , rk ) = X ⊕ XT ( ⊕ 1 X 2 ⊕ X 3 0 3 ⊕ rk ) 1
2.1 合成置换 T Z → ,是一个可逆变换,由非线性变换 τ 和线性变换 L 复合而成,即 T(.)=L(τ(.))。 Z T: 32 2 32 2 2.1.1 非线性变换τ τ 由 4 个并行的 S 盒构成。 ) aaaa , 0 设输入为 A = ( , , 3 2 1 ∈ ( Z ) 48 2 , 输出为 B = ( bbbb , 3 0 , , 2 1 ) ∈ ( Z ) 48 2 ,则 ( bbbb 0 3 , , , 2 1 ) ( = τ A ) = ( Sbox ( a ), Sbox ( a 1 ), Sbox ( a ), Sbox ( a )) 3 2 0 2.2.2 线性变换 L 非线性变换 τ 的输出是线性变换 L 的输入。设输入为 2ZB ∈ ,输出为 32 2ZC ∈ ,则 32 BLC = ( ) ⊕= B ( B <<< )2 ⊕ ( B <<< )10 ⊕ ( B <<< )18 ⊕ ( B <<< )24 2.2 S 盒 S 盒中数据均采用 16 进制表示。 0 1 2 3 4 5 6 7 8 9 a b c d e f 2 e9 9a 50 1c a7 81 0e 46 8a 5d e2 37 af 31 97 7d 1 90 67 42 b3 07 6b 24 00 bf ae f6 db 1b c1 69 f0 e 0 2c d6 06 2b ac 9c 3f e4 4f 47 9d 68 78 1e c8 d4 15 ea b1 e0 4e 1d 5b d5 5a 8d b4 0a c6 89 18 39 例:输入‘ef’,则经 S 盒后的值为表中第 e 行和第 f 列的值,Sbox(‘ef’)= ‘84’。 d fb 86 cf 8f 85 56 21 c4 61 8c 53 6c 10 e5 6e cb 4 cc 2a 91 c9 f3 71 63 9f 40 9b 82 de bb a5 0c 3a 3 fe 76 f4 a9 fc b2 5e 57 d2 a4 2e 45 92 88 4a ec c 28 49 ed 75 e6 70 01 a0 f9 f5 0d 6d 1f b8 c5 d7 8 16 aa 33 80 83 f8 25 4c a3 ad c0 03 11 2d 65 79 b c2 26 43 fa 19 4b 3b e7 ce 30 ab 72 41 12 09 3e a 14 13 0b 94 3c 0f 7c 02 f2 32 23 6a 5c d0 f1 5f 7 b7 c3 7a 95 ba 8b a2 52 b5 55 60 2f 7f bd 7e 20 5 e1 be ef 08 73 64 58 d3 c7 34 66 fd dd cd 96 dc 9 b6 44 54 df 59 eb 22 36 f7 93 29 ff d9 74 b9 ee 6 3d 04 98 e8 17 da d1 27 38 1a ca 8e bc 7b 77 4d f 05 99 62 a6 a8 35 87 9e a1 e3 6f 51 d8 b0 84 48 2
3. 加/解密算法 0 1 , , ( 定义反序变换 R 为: AAAAR , ( = ( , 1 31, ,2,1,0 设明文输入为 ) , ∈ Z = i 2 0 ,32 2 = XXF ( , i i + YYYY ( , 0 3 4 , , 2 1 ) = L X , i 1 + XR ( 为 rki X , , 3 2 XXXX AAAA , 0 3 Z ( 1 ∈ ) , ) 32 2 3 2 , ) 4 Ai ∈ Z ,32 2 i ,密文输出为 3,2,1,0 = 。 YYYY ( , , , 0 3 2 1 ) ∈ ( Z 32 2 ) 4 ,轮密钥 。则本算法的加密变换为: , rk ) ⊕= X i XT ( ⊕ 1 X i ⊕ X i + 3 ⊕ rk i ,) i ,1,0 L= .13, , X i X 33 + , 3 X i + 32 2 , i , X ) = ( X , 35 35 34 , X 34 33 ) 32 。 i + X + , 2 X 本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序。 加密时轮密钥的使用顺序为:(rk0, rk1, …, rk31) 解密时轮密钥的使用顺序为:(rk31, rk30, …, rk0) 4. 密钥扩展算法 本算法中加密算法的轮密钥由加密密钥通过密钥扩展算法生成。 2Z ,i=0,1,2,3; 加密密钥 MK=(MK0, MK1, MK2, MK3),MKi∈ 32 令 Ki∈ 32 i , = 首先,(K0,K1,K2,K3)=(MK0 FK⊕ 0,MK1 FK⊕ 1,MK2 FK⊕ 2,MK3 FK⊕ 3) 2Z ,i=0,1,…,35,轮密钥为 ,1,0 rk i 31, L 32 2 ∈ Z ,则轮密钥生成方法为: 然后,对 =i ,2,1,0 31, : L rk i = K i + 4 = K i ′⊕ KT ( ⊕ K i + 2 ⊕ K i + 3 ⊕ CK ) i i + 1 说明: (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) ∈ (Z , 2 ) 48 则 cki,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
5. 加密实例 以下为本算法 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] = f12 186f9 X[ 0 ] = 27f ad345 rk[ 1] = 416 62b61 X[ 1 ] = a18 b4cb2 rk[ 2] = 5a6 ab19a X[ 2 ] = 11c 1e22a rk[ 3] = 7ba 92077 X[ 3 ] = cc1 3e2ee rk[ 4] = 367 360f4 X[ 4 ] = f87 c5bd5 rk[ 5] = 776 a0c61 X[ 5 ] = 332 20757 rk[ 6] = b6b b89b3 X[ 6 ] = 77f 4c297 rk[ 7] = 247 63151 X[ 7 ] = 7a9 6f2eb rk[ 8] = a52 0307c X[ 8 ] = 27d ac07f rk[ 9] = b75 84dbd X[ 9 ] = 42d d0f19 rk[ 10] = c30 753ed X[10 ] = b8a 5da02 rk[ 11] = 7ee 55b57 X[11 ] = 907 127fa rk[ 12] = 698 8608c X[12 ] = 8b9 52b83 rk[ 13] = 30d 895b7 X[13 ] = d42 b7c59 rk[ 14] = 44b a14af X[14 ] = 2ff c5831 rk[ 15] = 104 495a1 X[15 ] = f69 e6888 rk[ 16] = d12 0b428 X[16 ] = af2 432c4 rk[ 17] = 73b 55fa3 X[17 ] = ed1 ec85e rk[ 18] = cc8 74966 X[18 ] = 55a 3ba22 rk[ 19] = 922 44439 X[19 ] = 124 b18aa rk[ 20] = e89 e641f X[20 ] = 6ae 7725f rk[ 21] = 98c a015a X[21 ] = f4c ba1f9 rk[ 22] = c71 59060 X[22 ] = 1dc dfa10 rk[ 23] = 99e 1fd2e X[23 ] = 2ff 60603 rk[ 24] = b79 bd80c X[24 ] = eff 24fdc rk[ 25] = 1d2 115b0 X[25 ] = 6fe 46b75 rk[ 26] = 0e2 28aeb X[26 ] = 893 450ad rk[ 27] = f17 80c81 X[27 ] = 7b9 38f4c rk[ 28] = 428 d3654 X[28 ] = 536 e4246 rk[ 29] = 622 93496 X[29 ] = 86b 3e94f rk[ 30] = 01c f72e5 X[30 ] = d20 6965e rk[ 31] = 912 4a012 X[31 ] = 681 edf34 密 文 : 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 4
分享到:
收藏