Encryption
在 FPE 中每輪驗證而不是循環驗證
我正在考慮專門針對數字、CC、電話、SS # 等的 FPE,並且我想到了一些可以實施的小型“優化”。我是否可以在 Feistel 網路中的每一輪之後驗證字元串長度,如果數據無效,則使用相同的調整重複一輪,並繼續直到完成一組調整/成功的輪次。
對於解密來說,這幾乎是一樣的,因為任何無效的回合都可以簡單地接受前一個成功回合的調整。
這種方法是否有任何缺點(即安全漏洞,實際上並沒有優化執行時間等)?
好的,所以在幾乎所有情況下使用每輪驗證都會導致性能下降。
簡單的機率告訴我們,在每一輪之後,該輪有 1/x 的機會落在“有效”數據集中。這意味著對於通過 Feistel 網路的任何循環,輸出都有 1/x 的正確機會。同樣,任何指定了 n 輪的 FFX 的 Feistel 網路在完成前將趨向於 x*n 總輪。這與全週期驗證相同。
但是,驗證函式需要在每輪之後呼叫,而全週期驗證只需要在每個完整的循環之後進行驗證。因為驗證和所有相關的函式和每輪驗證更頻繁地呼叫,所以這個方法更慢。
我不認為這會破壞正確性,但實際上你可能會平均減慢你的算法。您需要對預期的重複回合數與預期的完整循環行走次數進行更嚴格的組合分析。這真的取決於具體的算法;你在使用 FFX 嗎?
您還需要證明這樣做不會以破壞 SPRP 安全性的方式改變密文的分佈。它可能沒有,但證明它對我來說似乎不平凡。