在 Feistel 網路中使用 AES 處理較小的塊
我想知道在循環 Feistel 密碼的情況下,FPE 如何進行解密。我知道,簡單地重複使用反向密鑰順序的網路將生成在網路開頭輸入的密文。
密文是某個數字的位表示,所以我只是在停止之前擴展數字以搜尋正確的長度。
但是,我的問題是我使用 AES 作為我的圓形函式。但是,我需要大量填充(0),因為 AES 塊大小為 128,塊大小(每一半)在 10-30 位時明顯更小。我只是將這些 0 附加到字元串的末尾,然後使用 AES 獲得加密的 128 位輸出。
在這一點上,我不太確定該怎麼做。我通過刪除最後約 100 位並僅取字元串的開頭來截斷。但是,在我看來,這好像我正在失去數據,並且我無法理解如何使用相同的方法進行解密。
這種簡單的截斷方法實際上是為較小塊實現 AES 的正確方法,還是我應該以不同的方式填充/截斷?另外,如果它是正確的,有人可以解釋為什麼會這樣或將我連結到一些相關文獻嗎?
乾杯!
我已經看到相關連結Recover plaintext from truncated ciphertext using AES for FPE,但我要麼不理解評論,要麼從未發布過解決方案。
在 Feistel 網路中,您可以使用任何函式,並且它是可逆的。當然,為了獲得安全性,您需要該功能來實現某些屬性。使用 Feistel 網路的主要原因之一是獲得偽隨機排列。為此,您需要 3 或 4 輪具有偽隨機函式的 Feistel(每輪都有調整或獨立鍵)。現在,截斷的 AES 是一個偽隨機函式(也是一個非常有效的函式),所以這是一個好主意。您可以按照您所說的用零填充,但您還必須將輪數添加到填充中(這是“調整”),或者在每一輪中使用不同的密鑰。後一個選項效率低得多,因為您需要多次執行 AES 密鑰計劃。輪函式的使用本質上保證了“計算獨立”
為了查看它是否有效,只需繪製它並跟踪解密。Feistel 的神奇之處在於您無需反轉輪函式即可解密。