zoukankan      html  css  js  c++  java
  • 中国商用分组密码SM4

    SM4 密码算法结构

    SM4 密码算法基本运算有两部分:

    1.模2加:⊕,32比特异或运算

    2.循环移位: <<< i ,把32位字循环左移i位

    基本密码部件为

    1非线性字节变换S盒(起混淆作用)

    S盒数据表:(横向为低位,纵向为高位)

    S盒的置换规则:

    输入的高半字节为行号,低半字节为列号,行列交叉点处的数据即为输出。设输入为 “5F”,则行号为5,列号为F,于是S盒的输出值为表中第5行和第F列交叉点的值。

    2 非线性字变换 τ:起混淆作用,具体为4个S盒并行置换,设输入字 A=(a0,a1,a2,a3),输出字B=(b0,b1,b2,b3),B = τ(A)=(S_box(a0), S_box(a1), S_box(a2), S_box(a3)

    对于32位字,变换过程如下图:

     

    3 字线性部件 L变换: 起扩散作用
    32位输入,32位输出。
    设输入为 B,输出为C运算规则:
    C=L(B)=B⊕(B<<<2)⊕((B<<<10)⊕(B<<<18) ⊕(B<<<24)
    4 字合成变换 T:

    由非线性变换 τ 和线性变换 L复合而成;

    T(X) =L(τ(X))。(先S后L)

    轮函数 F:

    输入数据:(X0,X1,X2,X3),128位,四个32位字。

    输入轮密钥: rk,32位字。

    输出数据: 32位字。

    轮函数 F:F(X0,X1,X2,X3,rk)= X0 ⊕T(X1⊕X2⊕X3⊕rk)

    加密算法流程:

    输入明文:(M0 , M1 , M 2 , M3)= (X0 , X 1 , X 2 , X3), 128位,四个字。输入轮密钥:rki,,i=0, 1,…,31,共32个轮密钥。

    输出密文:(Y0Y1Y2Y3),128位,四个字。

    算法结构:轮函数32轮迭代,每轮使用一个轮密钥。

    ①加密变换:  Xi+4=F((XiXi+1,,Xi+2,,Xi+3,,rki= XiTXi+1Xi+2Xi+3rki)i= 0,1……31

    ②反序变换::(Y0Y1Y2Y3=X35,,X34,,X33,,X32

     解密算法:SM4密码算法是对合的,因此解密与加密算法相同,只是轮密钥的使用顺序相反。

  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/8570482.html
Copyright © 2011-2022 走看看