DES decryption is, in fact, the inverse of the DES encryption.

DES算法的解密过程是加密过程的逆运算

证明:
除初始置换IP与逆初始置换IP^(-1)外,DES算法其实与Feistel加密算法具有相同的结构。而Feistel算法的解密过程就是其加密过程的逆运算;即Feistel的加密算法和解密算法一样,只不过加密和解密时使用的子密钥的顺序刚好相反,如:16轮轮转换,加密时使用的子密钥顺序为K1,K2,...,K16,解密时使用的子密钥顺序为K16,K15,...,K1。

首先,证明Feistel算法的加密与解密过程互逆;

设加密过程第i轮的输出为LEi || REi,解密过程第(n - i)轮的输出为RDn - i || LDn - i。因此,只要证明出 LDn = RE0和RDn = LE0 ,就可得出Feistel算法的加密与解密过程互逆的结论。

∵ LEi = REi - 1,
REi = LEi - 1 ⊕ F(REi - 1, Ki),
LDi = RDi - 1,
RDi = LDi - 1 ⊕F(RDi - 1, Kn - i + 1)
且解密算法的输入为LD0 = REn, RD0 = LEn,

∴ LD1 = RD0 = LEn = REn - 1;
RD1 = LD0 ⊕F(RD0, Kn) = REn ⊕F(REn - 1, Kn) = (LEn - 1 ⊕F(REn - 1, Kn) ⊕F(REn - 1, Kn) = LEn - 1;
同理,按照此算法进行(n-1)轮计算后,可得:
LDn - 1 = RDn - 2 = LE2 = RE1,
RDn - 1 = LDn - 2⊕F(RDn - 2,K2) = RE2⊕F(RE1,K2) = LE1⊕F(RE1,K2)⊕F(RE1,K2)=LE1;
第n轮计算后:
LDn = RDn - 1 = LE1 = RE0,
RDn = LDn - 1⊕F(RDn - 1,K1) = RE1⊕F(RE0,K1) = LE0.

由此,可得LDn = RE0,RDn = LE0;
即Feistel算法的加密与解密过程互逆得证。

接下来,证明DES算法的加密与解密过程互逆;

设明文为X,经过初始置换IP后得到Y=IP(X);Feistel算法加密过程每一轮轮换后的输出分别为Y1,Y2,......,Y16 (Yi=LEi||REi),然后交换一次LE16与RE16,得到Y',经过逆初始置换IP^(-1) 后得到Z=IP^(-1)(Y');

加密过程:
*初始置换:Y=IP(X).
*16轮轮换:从 Y=LE0||RE0 到 Y16=LE16||RE16.
*1次交换:从 Y16=LE16||RE16 到 Y'=RE16||LE16.
*逆初始置换:Z=IP^(-1)(Y').

解密算法与加密算法相同,只是子密钥的使用顺序刚好相反。
设Y'经过初始置换IP后得到IP(Z)=IP(IP^(-1)(Y'))=Y';Feistel算法解密过程每一轮轮换后的输出分别为Y'1,Y'2,......,Y'16 (Y'i=LDi||RDi),且解密算法的输入为LD0 = RE16, RD0 = LE16;接下来交换一次LD16与RD16,得到Y;Z最后,经过逆初始置换IP^(-1) 后得到IP^(-1) (Y)=IP^(-1)(IP(X))=X;

解密过程:
*初始置换:IP(Z)=IP(IP^(-1)(Y'))=Y'.
*16轮轮换:从 Y'=LD0||RD0 =RE16||LE16 到 Y'16=LD16||RD16=RE0||LE0.
*1次交换:从 Y'16=LD16||RD16=RE0||LE0 到 Y=RD16||LD16=LE0||RE0.
*逆初始置换:IP^(-1) (Y)=IP^(-1)(IP(X))=X.

可见,DES算法加密过程的输入与解密过程的输出一致;即DES算法的加密与解密过程互逆得证。

综上,DES算法的解密过程是加密的逆运算。

你可能感兴趣的:(DES decryption is, in fact, the inverse of the DES encryption.)