Block-Cipher

即使 F(0) … F(n) 是公共知識,是否有可能在 32 位整數上生成安全排列 F?

  • September 5, 2014

我目前對從順序數據庫 ID 生成看起來隨機的 URL 的問題很感興趣,比如它們在連結縮短器中是如何做到的。一種方法是使用 32 位塊密碼對順序數據庫 ID 進行加密,並對結果進行 base62 編碼,以便將其寫入 URL。

例如:

foo.com/1       foo.com/2        -- Original sequential IDs
foo.com/142365  foo.com/226340   -- Encrypt IDs using a permutation function
foo.com/b2D     foo.com/wse      -- Encode in base62 format - looks random + compact.

現在有一個問題:每當我們加密一個新的數據庫 ID 並發布 URL 時,該明文-密文對就會成為公共知識。**是否有可能創建一個加密系統,讓我們很難猜測我們將生成的下一個 URL 是什麼?**也就是說,我們能不能讓攻擊者猜不到 $ F(1000000) $ 即使他知道 $ F(n) $ 為了 $ n \leq 999999 $ ?

我認為需要注意的一些事情很重要:

  • 密碼必須具有 32 位塊大小。否則,生成的 URL 會變得太長。
  • 密鑰可以是任意大小。
  • 每個數字只加密一次,我加密的所有消息都是 32 位長度。(沒有任何流密碼的東西適用)

我的實際案例——老實說,大多數人的案例——並不真正需要那種安全性。從順序 ID 到乍一看混亂的 URL 的雙射映射就足夠了。但是,我現在很好奇這種不可預測性要求是否可以實現。在我的搜尋中,我發現很多人說由於生日問題,32 位塊太小了,但我不確定此處是否適用警告。另一方面,我發現的 32 位塊密碼都沒有說明它們對已知密文攻擊的抵抗力……

的,可以使用一個安全的 32 位分組密碼(與隨機排列無法區分)來實現所要求的原語,無論已知多少輸入-輸出對,並使用固定的秘密隨機選擇的密鑰進行加密。這是Format Preserving Encryption中的標準建構塊。

一種這樣的分組密碼是:Louis Granboulan 和Thomas Pornin帶有小塊的完美分組密碼(在 FSE 2007 的會議記錄中)。

Emil Stefanov 和 Elaine Shi 的FastPRP: Fast Pseudo-Random Permutations for Small Domains(Cryptology ePrint Report 2012/254)聲稱提高了速度,並回顧了一些早期的工作。

更新:Ricky Demer好心地指出最近的另一篇論文:Ben Morris 和 Phillip Rogaway,有時遞歸洗牌,對數預期時間中的幾乎隨機排列(密碼學 ePrint 報告 2013/560)。

引用自:https://crypto.stackexchange.com/questions/18988