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