前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

SM4

作者头像
发布2023-10-18 10:34:37
2070
发布2023-10-18 10:34:37
举报
文章被收录于专栏:IT杂症IT杂症
sm4
sm4

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日起施行。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 无线局域网产品使用的 SMS4 密码算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com