為什麼從偽隨機函式生成偽隨機排列很重要?
大多數關於分組密碼構造的論文,尤其是那些討論構造任意長度或小域的分組密碼的論文,這些技術都是基於從 PRF 建構 PRP 設計的。基於 Luby-Rackoff 等的那些。
為什麼輸入消息首先由偽隨機函式處理,然後是偽隨機排列?為什麼我們不能直接從輸入消息構造 PRP?
如果您將 PRF 直接應用於消息以獲取密文,則無法保證您可以實際解密消息。
假設 PRF 映射 $ n $ 位輸入到一些 $ m $ 位輸出。
PRF的心智模型如下。你有一個黑盒子裡的侏儒。當你從輸入空間給他一個字元串時,他擲硬幣 $ m $ 次並輸出這些翻轉連接在一起的結果。然後他把這個記錄在他的筆記本上,這樣如果你通過同樣的 $ n $ -bit 再次輸入給他,他可以給你同樣的輸出。
如果你仔細考慮這個模型,你會發現實際上沒有什麼可以阻止兩個輸入映射到同一個輸出。你只需要足夠幸運才能發生碰撞。由於生日悖論,這種情況發生的頻率比您預期的要多,並且通常會發生很多碰撞。
因此,如果我們嘗試直接使用 PRF 加密我們的消息,則無法保證我們能夠反轉它!
PRP 是一種 PRF,它具有額外的限制,即每個輸入值都映射到精確的一個輸出值,並且每個輸出值都精確地映射到一個輸入。使用 PRP,我們保證有一個可逆的函式,這正是我們建構分組密碼所需要的。
在 PRP 心智模型中,gnome 有一個列表,其中包含所有可能的輸出字元串長度 $ m $ . 每次向他傳遞一個他以前從未見過的輸入時,他都會從輸出字元串列表中隨機選擇一個項目。然後,他從列表中刪除該項目(因此不能重複使用)並在他的筆記本中寫入輸入字元串以及他將其映射到的輸出字元串。如果他再次看到相同的輸入,他可以給出他記錄在筆記本中的輸出。
我們可以看到,這種結構比 PRF 設置複雜得多。Luby-Rackoff 結構非常簡潔,因為它為我們提供了一種將安全 PRF 轉換為安全 PRP 的好方法。從 PRG 到 PRF 也有類似的結果,稱為 Goldreich-Goldwasser-Micali 構造。
最終結果是,如果您可以建構一個安全的偽隨機數生成器,您也可以建構一個安全的分組密碼。這是一個簡潔的結果,這就是密碼學文獻中經常提到它的原因。