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密码算法是对合的,因此解密与加密算法相同,只是轮密钥的使用顺序相反。

  • 相关阅读:
    NOI2005 维护数列(splay)
    傻子代码行列式
    Matrix-tree定理 spoj HIGH
    Boruvka算法求最小生成树
    Codeforces 521 E cycling city
    欧拉回路 uoj117
    BZOJ1146: [CTSC2008]网络管理Network
    我的OI生涯番外篇
    主席树+dfs SPOJ BZOJ2588 Count on a tree
    动态主席树 优化版
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/8570482.html
Copyright © 2011-2022 走看看