SM4算法简介

这篇具有很好参考价值的文章主要介绍了SM4算法简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  SM4为分组对称密码算法,明文、密文以及密钥长度均为 128 128 128 bits。SM4算法主要包括加解密算法和密钥扩展算法,采用 32 32 32 轮非线性迭代的数学结构,其中算法中每一次迭代运算为一轮非线性变换。主要操作包括异或、合成置换、非线性迭代、反序变换、循环移位以及S盒变换等。加密算法和解密算法的数学架构、运算法则、运算操作等都是完全相同的,解密运算只需要将加密算法中生成的轮密钥进行反序使用。其流程图如下图所示。
sm4,密码学,算法,密码学,安全
图1. SM4密码算法加密流程图

密钥扩展算法

   设加密主密钥 M K = ( M K 0 , M K 1 , M K 2 , M K 3 ) MK = (MK_0, MK_1, MK_2, MK_3) MK=(MK0,MK1,MK2,MK3) M K i ∈ { 0 , 1 } 32 MK_i \in \{0,1\}^{32} MKi{0,1}32
( K 0 , K 1 , K 2 , K 3 ) = ( M K 0 ⊕ F K 0 , M K 1 ⊕ F K 1 , M K 2 ⊕ F K 2 , M K 3 ⊕ F K 3 ) (K_0,K_1,K_2, K_3) = (MK_0 \oplus FK_0, MK_1 \oplus FK_1, MK_2 \oplus FK_2, MK_3 \oplus FK_3) (K0,K1,K2,K3)=(MK0FK0,MK1FK1,MK2FK2,MK3FK3)
r k i = K i + 4 = K i ⊕ T ′ ( K i + 1 ⊕ K i + 2 ⊕ K i + 3 ⊕ C K i ) rk_i = K_{i+4} = K_i \oplus T^{'}(K_{i+1} \oplus K_{i+2} \oplus K_{i+3} \oplus CK_i) rki=Ki+4=KiT(Ki+1Ki+2Ki+3CKi)

T ′ T^{'} T′变换

T ′ ( B ) = B ⊕ ( B < < < 13 ) ⊕ ( B < < < 23 ) T^{'}(B) = B \oplus (B <<< 13) \oplus (B <<< 23) T(B)=B(B<<<13)(B<<<23)

系统参数 F K FK FK

F K i FK_i FKi 十六进制取值
F K 0 FK_0 FK0 A3B1BAC6
F K 1 FK_1 FK1 56AA3350
F K 2 FK_2 FK2 677D9197
F K 3 FK_3 FK3 B27022DC

固定参数 C K CK CK

固定参数 CK 的取值
000070e15 1c232a31 383f464d 545b6269
70777e85 8c939aa1 a8afb6bd c4cbd2d9
e0e7eef5 fc030a11 181f262d 343b4249
50575e65 6c737a81 888f969d a4abb2b9
c0c7ced5 dce3eaf1 f8ff060d 141b2229
3037aeb5 4c535a61 686f767d 848b9299
a0a7aeb5 bcc3cad1 d8dfe6ed f4fb0209
10171e25 2e333a41 484f565d 646b7279

加解密算法

   设输入明文为: ( X 0 , X 1 , X 2 , X 3 ) ∈ { 0 , 1 } 32 × 4 (X_0, X_1, X_2, X_3) \in \{0,1\}^{32 \times 4} (X0,X1,X2,X3){0,1}32×4, 密文输出为: ( Y 0 , Y 1 , Y 2 , Y 3 ) ∈ { 0 , 1 } 32 × 4 (Y_0, Y_1, Y_2, Y_3) \in \{0,1\}^{32 \times 4} (Y0,Y1,Y2,Y3){0,1}32×4, 轮密钥 r k i ∈ { 0 , 1 } 32 × 4 rk_i \in \{0,1\}^{32 \times 4} rki{0,1}32×4, 其中 i ∈ { 0 , 1 , ⋯ 31 } i \in \{0,1,\cdots 31\} i{0,1,31}.SM4密码算法的具体加密过程如下:
X i + 1 = F ( X i , X i + 1 , X i + 2 , X i + 3 , r k i ) = X i ⊕ T ( X i + 1 ⊕ X i + 2 ⊕ X i + 3 ⊕ r k i ) X_{i+1} = F(X_{i}, X_{i+1}, X_{i+2}, X_{i+3}, rk_i)=X_{i}\oplus T(X_{i+1}\oplus X_{i+2}\oplus X_{i+3}\oplus rk_i) Xi+1=F(Xi,Xi+1,Xi+2,Xi+3,rki)=XiT(Xi+1Xi+2Xi+3rki);
( Y 0 , Y 1 , Y 2 , Y 3 ) = R ( X 32 , X 33 , X 34 , X 35 ) = ( X 35 , X 34 , X 33 , X 32 ) (Y_0, Y_1, Y_2, Y_3) = R(X_{32}, X_{33}, X_{34}, X_{35}) = (X_{35}, X_{34}, X_{33}, X_{32}) (Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)

合成置换 T

   由非线性变换 τ \tau τ和线性变换 L L L的转换, T ( ⋅ ) = L ( τ ( ⋅ ) ) T(\cdot)=L(\tau(\cdot)) T()=L(τ())
非线性变换 τ \tau τ : 长度为 32 bits, 由4 个并行的8位输入输出的S盒组成,表示为 S b o x ( ⋅ ) Sbox(\cdot) Sbox()
( B 0 , B 1 , B 2 , B 3 ) = τ ( A ) = ( S b o x ( A 0 ) , S b o x ( A 1 ) , S b o x ( A 2 ) , S b o x ( A 3 ) ) (B_0, B_1, B_2, B_3) = \tau(A) = (Sbox(A_0), Sbox(A_1), Sbox(A_2), Sbox(A_3)) (B0,B1,B2,B3)=τ(A)=(Sbox(A0),Sbox(A1),Sbox(A2),Sbox(A3))
线性变换 L L L : B = L ( A ) = A ⊕ ( A < < < 2 ) ⊕ ( A < < < 10 ) ⊕ ( A < < < 18 ) ⊕ ( A < < < 24 ) B = L(A) = A\oplus(A <<< 2)\oplus(A <<< 10)\oplus(A <<< 18)\oplus(A <<< 24) B=L(A)=A(A<<<2)(A<<<10)(A<<<18)(A<<<24)

S盒

   S盒是SM4算法中唯一的非线性逻辑单元,国家密码局公布的SM4密码时,直接给出了算法中S盒的查找表信息,输入为8 bits,其中,高4bits为查找表的行信息,后4bits为查找表的列信息。文章来源地址https://www.toymoban.com/news/detail-779294.html

- 0 1 2 3 4 5 6 7 8 9 a b c d e f
0 0xd6 0x90 0xc9 0xfe 0xcc 0xe1 0x3d 0xb7 0x16 0xb6 0x14 0xc2 0x28 0xfb 0x2c 0x05
1 0x2b 0x67 0x9a 0x76 0x2a 0xbe 0x04 0xc3 0xaa 0x44 0x13 0x26 0x49 0x86 0x06 0x99
2 0x9c 0x42 0x50 0xf4 0x91 0xef 0x98 0x7a 0x33 0x54 0x0b 0x43 0xed 0xcf 0xac 0x62
3 0xe4 0xb3 0x1c 0xa9 0xc9 0x08 0xe8 0x95 0x80 0xdf 0x94 0xfa 0x75 0x8f 0x3f 0xa6
4 0x47 0x07 0xa7 0xfc 0xf3 0x73 0x17 0xba 0x83 0x59 0x3c 0x19 0xe6 0x85 0x4f 0xa8
5 0x68 0x6b 0x81 0xb2 0x71 0x64 0xda 0x8b 0xf8 0xeb 0x0f 0x4b 0x70 0x56 0x9d 0x35
6 0x1e 0x24 0x0e 0x5e 0x63 0x58 0xd1 0xa2 0x25 0x22 0x7c 0x3b 0x01 0x21 0x78 0x87
7 0xd4 0x00 0x46 0x57 0x9f 0xd3 0x27 0x52 0x4c 0x36 0x02 0xe7 0xa0 0xc4 0xc8 0x9e
8 0xea 0xbf 0x8a 0xd2 0x40 0xc7 0x38 0xb5 0xa3 0xf7 0xf2 0xce 0xf9 0x61 0x15 0xa1
9 0xe0 0xae 0x5d 0xa4 0x9b 0x34 0x1a 0x55 0xad 0x93 0x32 0x30 0xf5 0x8c 0xb1 0xe3
a 0x1d 0xf6 0xe2 0x2e 0x82 0x66 0xca 0x60 0xc0 0x29 0x23 0xab 0x0d 0x53 0x4e 0x6f
b 0xd5 0xdb 0x37 0x45 0xde 0xfd 0x8e 0x2f 0x03 0xff 0x6a 0x72 0x6d 0x6c 0x5b 0x51
c 0x8d 0x1b 0xaf 0x92 0xbb 0xdd 0xbc 0x7f 0x11 0xd9 0x5c 0x41 0x1f 0x10 0x5a 0xd8
d 0x0a 0xc1 0x31 0x88 0xa5 0xcd 0x7b 0xbd 0x2d 0x74 0xd0 0x12 0xb8 0xe5 0xb4 0xb0
e 0x89 0x69 0x97 0x4a 0x0c 0x96 0x77 0x7e 0x65 0xb9 0xf1 0x09 0xc5 0x6e 0xc6 0x84
f 0x18 0xf0 0x7d 0xec 0x3a 0xdc 0x4d 0x20 0x79 0xee 0x5f 0x3e 0xd7 0xcb 0x39 0x48

到了这里,关于SM4算法简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SM4算法简介

      SM4为分组对称密码算法,明文、密文以及密钥长度均为 128 128 128 bits。SM4算法主要包括加解密算法和密钥扩展算法,采用 32 32 32 轮非线性迭代的数学结构,其中算法中每一次迭代运算为一轮非线性变换。主要操作包括异或、合成置换、非线性迭代、反序变换、循环移位以

    2024年02月03日
    浏览(26)
  • SM4分组密码算法

    SM4.0于2013年3月被列为国家密码行业标准“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。2016年被列入国家标准(GB/T 32907-2016) 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit。加密算法与密钥扩展算法都采用32轮非线性迭代

    2024年02月12日
    浏览(40)
  • Python实现国家商用密码算法sm2/sm3/sm4/sm9(国密)

    2010 年开始,我国国家密码管理局就已经开始陆续发布了一系列国产加密算法,这其中就包括 SM1、SM2、SM3 、SM4、SM7、SM9、ZUC(祖冲之加密算法)等,SM 代表商密,即商业密码,是指用于商业的、不涉及国家秘密的密码技术。SM1 和 SM7 的算法不公开,其余算法都已成为 ISO/IEC

    2024年02月15日
    浏览(49)
  • 新手入门 | 掌握国密算法:新手指南: SM2 / SM3 / SM4密码算法详解

    在密码学领域,有多种加密与签名算法,它们在信息安全领域发挥着举足轻重的作用。如今,随着互联网的快速发展,网络安全已经成为各类信息系统完整性、可用性、保密性的重要保障,越来越多的国产密码算法得到了广泛的应用与关注。在本文中,我们将重点介绍三个经

    2024年02月12日
    浏览(157)
  • 国密算法 SM4 对称加密 分组密码 python实现完整代码

    目前,python实现的国密算法库主要是 python-gmssl 库和 snowland-smx ( pysmx )库,二者都对SM2(仅公钥加解密和数字签名)、SM3、SM4进行了细致而优雅的实现。 GMSSL. https://github.com/duanhongyi/gmssl snowland-smx. https://gitee.com/snowlandltd/ snowland-smx-python PyCryptodome. https://www.pycryptodome.org 最近用

    2024年02月06日
    浏览(54)
  • Delphi SM2/SM4国密算法

        最近忙个医保平台的项目,涉及SM2/SM4的签名,验签,加密,解密的业务操作过程。毕竟现在用Delpih的人不是很多,懂这方面的技术的人也更少,能涉及密码算法的少之更少,网上也能搜到一些开源的代码,也由于使用的人少,未加通过业务系统来验证,所以存在不少Bu

    2024年02月11日
    浏览(51)
  • vue前端国密SM2, SM4 算法实现

    整体加密逻辑是,首先生成16位key值 用SM2 公钥加密该key值,后端用sm2私钥 解密出key值,然后采用sm4方法根据key值对返回值进行加密,前端采用sm4 对后端返回结果进行解密进行前端展示 目前主要常用的国密算法有sm-crypto,gm-crypto,gm-crypt(SM4) 1、安装 sm-crypto 2、包装加解密

    2024年02月12日
    浏览(48)
  • SM4算法加解密及实现

    SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算

    2024年02月08日
    浏览(42)
  • 国密算法概述、及算法的集成应用(sm2、sm3、sm4)

    由于项目的需求,需要集成国密加解密,于是对国密又温故知新了一遍。同时整理了一下国密的一些算法。 本文主要从国密相关算法的简介、应用系统的集成、工具类的封装等方面入手,对国密进行深入的学习。 为了保障商用密码的安全性,国家密码局制定了一系列密码标

    2024年02月14日
    浏览(73)
  • Go实现国密算法SM2、SM3、SM4

    SM2椭圆曲线公钥密码算法 Public key cryptographic algorithm SM2 based on elliptic curves 遵循的SM2标准号为: GM/T 0003.1-2012、GM/T 0003.2-2012、GM/T 0003.3-2012、GM/T 0003.4-2012、GM/T 0003.5-2012、GM/T 0009-2012、GM/T 0010-2012 依赖包: github.com/tjfoc/gmsm/sm2 SM3密码杂凑算法 - SM3 cryptographic hash algorithm 遵循的SM

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包