Block-Cipher
任意(即不是 2 的冪)大小域上的偽隨機排列
Feistel 密碼算法產生一個偽隨機排列,域大小等於 $ 2^{2m} $ (對於一些 $ m \in \mathbb{Z}^+ $ )。也就是一對一的函式 $ \pi $ 集合的 $ {0, 1, 2, \dots, 2^{2m} - 1} $ 到自己身上。
此外,使用所謂的不平衡 Feistel 密碼,有可能(儘管我不確定)產生集合的偽隨機排列 $ {0, 1, 2, \dots, 2^m - 1} $ 到自己身上。
是否有一種算法(可能是對上述算法之一的修改)來產生偽隨機排列 $ \pi $ 集合的 $ \mathbb{m} = {0, 1, 2,\dots, m - 1} $ 對於任意 $ m \in \mathbb{Z}^+ $ ?
(實際上,函式的域 $ \pi $ 該算法產生的可能是一個適當的超集 $ \mathbb{m} $ , 只要限制 $ \pi|_{\mathbb{m}} $ 是一個排列 $ \mathbb{m} $ .)
是的。這稱為格式保留加密。
最靈活的算法是FFX,它使用具有基於 AES 的輪函式的 Feistel 網路,但執行模加法 $ m $ . 對於某些值 $ m $ ,為了將統計偏差限制為可忽略的值,擴展了舍入函式的範圍。
什麼時候 $ m $ 非常小,這種方法不是很好,因為如果對手可以看到周圍,它的可證明的安全保證就會開始消失 $ \sqrt{m} $ 查詢。如果這是一個問題,您可以查看更慢但更安全的算法,例如有時遞歸洗牌。