Feistel 密码
在密码学研究中,Feistel 密码结构是用于分组密码中的一种对称结构。以它的发明者 Horst Feistel 为名。
对其简单的理解是:
-
给明文分组(L,R)
-
对R进行加密
-
密文=加密后的R+L(即LR的位置交换)
-
很好理解对吧=_+,分组加密交换即可,我们再将其复杂化:
完整的Feistel密码
这里要先知道加密的方式——轮函数F;令K1,K2,……,Kn 分别为第1,2,……,n 轮的子密钥
给明文分组(LE0,RE0)
对于第i轮(i<=轮数n)
-
LEi+1=REi
-
REi+1=LEi⊕F(REi+Ki+1)
-
循环直到得到(LE16,RE16)=(RD0,LD0),再将其置换得到密文(LE17,RE17)
而解密可以看成其逆过程:要点就是轮函数倒过来使用Kn,Kn-1,……,K1
给密文分组(LD0,RD0)
对于第i轮(i<=轮数n)
-
LDi+1=RDi
-
RDi+1=LDi⊕F(RDi+Kn-i-1)
-
循环直到得到(LD16,RD16)=(RE0,LE0),再将其置换得到明文(LD17,RD17)
加密E(Encrypt)/解密D(Decrypt)
在DES中,加密轮数一般为16轮(n=16)
例:解密过程第二轮的输入(LD1,RD1)等于加密过程第十六轮的输出互换的值(RE15,LE15)
LE16=RE15
RE16=LE15⊕F(RE15+K16)
LD1=RD0=LE16=RE15
RD1=LD0⊕F(RD0+K16)
=RE16⊕F(RE15+K16)
=(LE15⊕F(RE15+K16))⊕F(RE15+K16) ps:D⊕D=0
=LE15⊕(F(RE15+K16)⊕F(RE15+K16))
=LE15