什麼是資訊安全中的 Feistel 密碼?
Feistel 密碼是一種在構建基於塊密碼的演算法和結構中使用的密碼學方法。Feistel 網路在資訊塊上實現一系列迭代密碼,並且通常設計用於加密大量資料的塊密碼。
Feistel 網路透過將資料塊分成兩個相同的部分並使用多輪加密來工作。每一輪都實現來自主函式或金鑰的排列和序列。實現 Feistel 網路的每個密碼的輪數都不同。
Feistel 密碼是一種多輪密碼,它將密碼的當前私有狀態分成兩部分,並且在每一輪加密或解密中只對其中一部分進行操作。
Feistel 提出可以使用產品密碼的概念來近似概念塊密碼,產品密碼是指以某種方式依次執行兩個或多個簡單密碼,使得最終結果或產品在密碼學上優於任何一個組成密碼。
該方法的本質是建立一個金鑰長度為 k 位、塊長度為 n 位的塊密碼,從而能夠實現總共 2k 種可能的轉換,而不是理想塊密碼可用的 2n! 種轉換。
Feistel 提出使用交替進行替換和置換的密碼,其中這些方法定義如下:
替換 - 每個明文元件或元件集都被唯一地恢復為相應的密文元件或元件集。
置換 - 明文元件的順序透過該順序的置換重新儲存。也就是說,在序列中沒有插入、刪除或替換元素,而是改變元素在序列中出現的順序。
Feistel 密碼被稱為金鑰排程,它作為密碼每一輪的輸入。金鑰排程有兩個可用的選擇。
第一個是密碼每一輪的金鑰(或“輪金鑰”)包含在雙方共享的金鑰中(導致一個高共享金鑰)。
另一種選擇是將共享金鑰用作“金鑰擴充套件”函式的輸入,該函式對上一輪金鑰或金鑰生成演算法的當前內部狀態執行某些操作以建立下一輪金鑰。
K 函式將原始金鑰轉換為加密每一輪的輪金鑰。應選擇此函式以支援加密函式的金鑰空間。
如果需要 64 位金鑰,但在類似情況下有效金鑰空間縮小到 32 位,因此攻擊者只需要搜尋 32 位金鑰的空間即可解密密文。