SM4加密原理推导证明
SM4算法是国密算法中的一种算法,属于对称算法。对称算法,我们知道是用一把密钥加密,并用同一把密钥进行解密,但是根据SM4算法如何知道解密出来的明文就是加密前的明文呢?笔者根据SM4的算法文档,仔细研究了一下加密和解密过程,对解密过程进行推导,发现最终解密出来的数据就是原始的明文数据。以下是笔者的简单推导过程说明。
SM4算法的文档可以在网上或国密局下载,下面是SM4加密算法的核心部分,反应了加密和解密之间的关系。
加密的最终结果:
Y0=X35 Y1=X34 Y2=X33 Y3=X32
解密算法:
输入: (Y0,Y1,Y2,Y3) 输出: (X0,X1,X2,X3)
Yi+4=F(Yi,Yi+1,Yi+2,Yi+3, rk31-i)= Yi⊕T(Yi+1⊕Yi+2⊕Yi+3⊕rk31-i),
i=0,1,,,,,31
(X0,X1,X2,X3)=R(Y32,Y33,Y34,Y35)=(Y35,Y34,Y33,Y32)
最终:
X0=Y35 X1=Y34 X2=Y33 X3=Y32
简单证明:
证明思路:
由加密结果知道Y0,Y1,Y2,Y3的值,在此基础上把Y4,Y5,Y6…..Y32,Y33,Y34,Y35都推算出来, 看最终的Y32,Y33,Y34,Y35是否是加密输入数据X3,X2,X1,X0,若是,得证。
过程如下:
Y4= Y0⊕T(Y1⊕Y2⊕Y3⊕rk31) 注意:不是 rk0, 轮密钥使用顺序和加密相反。
由加密结果知: Y0=X35 Y1=X34 Y2=X33 Y3=X32
所以:
Y4= X35⊕T(X34⊕X33⊕X32⊕rk31)
由加密运算过程知:
X35=X31⊕T(X32⊕X33⊕X34⊕rk31)
代入 Y4= X35⊕T(X34⊕X33⊕X32⊕rk31),得到 :
Y4= (X31⊕T(X32⊕X33⊕X34⊕rk31))⊕T(X34⊕X33⊕X32⊕rk31)
=X31⊕(T(X32⊕X33⊕X34⊕rk31) ⊕T(X34⊕X33⊕X32⊕rk31))
=X31
所以:
Y4=X31 即:解密运算的Y4和加密运算的X31相等。
继续:
Y5= Y1⊕T(Y2⊕Y3⊕Y4⊕rk30)
由加密结果知:Y0=X35 Y1=X34 Y2=X33 Y3=X32
以及上步推算结果: Y4=X31
代入得知:
Y5= X34⊕T(X33⊕X32⊕X31⊕rk30)
由加密运算过程知:
X34=X30⊕T(X31⊕X32⊕X33⊕rk30)
代入得知:
Y5= (X30⊕T(X31⊕X32⊕X33⊕rk30))⊕T(X33⊕X32⊕X31⊕rk30)
=X30⊕(T(X31⊕X32⊕X33⊕rk30))⊕T(X33⊕X32⊕X31⊕rk30))
=X30
所以:
Y5=X30 即:解密运算的Y5和加密运算的X30相等。
以此类推可以得到:
Y4=X31
Y5=X30
Y6=X29
……
Y32=X3 注:加密算法的输入 X3
Y33=X2 注:加密算法的输入 X2
Y34=X1 注:加密算法的输入 X1
Y35=X0 注:加密算法的输入 X0
以上推算代入 解密算法的最终结果:
X0=Y35 X1=Y34 X2=Y33 X3=Y32
X0=Y35=X0 X1=Y34=X1 X2=Y33=X2 X3=Y32=X3
即:
X0=X0 X1=X1 X2=X2 X3=X3
得证。