feistel cipher也叫作Luby–Rackoff分組密碼,是用來構建分組加密算法的對稱結構。它是由德籍密碼學家Horst Feistel在IBM工做的時候發明的。feistel cipher也被稱爲Feistel網絡。算法
不少分組加密算法都是在feistel cipher的基礎上發展起來的,好比很是有名的DES算法。安全
在feistel cipher中,加密和解密的操做很是類似,一般須要進行多輪加密和解密操做。網絡
Feistel網絡中會用到一個round function也叫作輪函數,這個函數接收兩個輸入參數,分別是分組數據(原始數據的一半)和子key,而後生成和分組數據一樣長度的數據。函數
而後使用上一輪生成的數據和原始數據的另外一半進行XOR異或操做,做爲下一輪輪函數的輸入。加密
就這樣一輪一輪進行下去最後生成加密事後的數據。spa
解密的流程和加密的流程是相似的,只不過把加密的操做反過來。設計
Feistel網絡的輪數能夠任意增長。不論多少輪均可以正常解密。教程
解密與輪函數f無關,輪函數f也不須要有逆函數。輪函數能夠設計得足夠複製。ip
加密和解密可使用徹底相同的結構來實現。從上面咱們講到的能夠看到,加密和解密實際上是沒有什麼區別的。ci
咱們用一個圖的方式來介紹一下Feistel的工做流程:
上圖中F表示的就是round function也就是輪函數。
K0,K1,K2...,Kn表示的是子key,分別做爲各輪的輸入。
原始數據被分紅了左右兩邊相等的部分,(L0,R0)
每一輪都會進行下面的操做:
最後的加密出的結果就是(Ri+1,Li+1)
解密的過程是加密過程的逆序,每一輪解密都會進行下面的操做:
最終獲得咱們的原始數據(R0,L0)
Michael Luby 和 Charles Rackoff 證實了若是輪函數是使用Ki爲種子的密碼安全的僞隨機函數,那麼通過三輪操做以後,生成的分組密碼就已是僞隨機排列了。通過四輪操做能夠生成「強」僞隨機排列。
什麼是僞隨機數呢?
考慮一下若是在計算機中生成隨機數,由於計算機中的數據是由0和1組成的,全部的數據都是肯定的,要麼是0要麼是1,因此計算機程序並不能生成真正的隨機數。
若是要讓計算機來生成隨機數,一般的作法就是將輸入經過必定的算法函數進行計算,從而獲得處理事後的數字。
若是這個算法函數是肯定的,也就是說一樣的輸入能夠獲得一樣的輸出,那麼這個數就不是隨機產生的,這個數就被稱爲僞隨機數。
僞隨機數是用肯定性的算法計算出來自[0,1]均勻分佈的隨機數序列。並不真正的隨機,但具備相似於隨機數的統計特徵,如均勻性、獨立性等。
由於Luby和Rackoff的研究很是重要,因此Feistel密碼也稱爲Luby–Rackoff密碼。
除了咱們以前介紹過的DES以外,不少算法都用到了Feistel網絡結構,好比Blowfish,Twofish等等。
由於Feistel網絡的對稱性質和簡單的操做,使得經過硬件的方式來實現Feistel網絡變得很是簡單,因此Feistel網絡的應用很是的普遍。
本文已收錄於 http://www.flydean.com/feistel-cipher/
最通俗的解讀,最深入的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!
歡迎關注個人公衆號:「程序那些事」,懂技術,更懂你!