什麼時候需要隨機數據成為一種假設?
假設一個加密方案使用一個隨機字元串來加密和解密,它是公開可用的,例如 IV 或 nonce。在我知道的所有情況下,都沒有“假設”存在說 IV:例如,生成 128 位 IV 很容易,並且這種隨機 IV 的存在與未經證實的假設。
但是現在假設一個加密方案使用大量可公開訪問的隨機數據執行,比如大約 $ 2^{256} $ 位。那麼這個密碼的安全證明是否必須“假設”這樣一個數據庫的存在?換句話說,如果密碼的安全證明依賴於公共數據庫的存在, $ 2^{256} $ 位,這是否會被視為“假設”,並被視為“未經證實的假設”(如離散對數問題的難度)?
在我知道的所有情況下,都沒有“假設”存在說 IV:例如,生成 128 位 IV 很容易,並且這種隨機 IV 的存在與未經證實的假設。
通常,如果需要(偽)隨機性,那麼對於分組密碼模式(例如 CBC)來說,當然假定它實際上是隨機的。這是一個先決條件,應該在定義中說明。
但是現在假設一個加密方案使用大量可公開訪問的隨機數據執行,比如大約 $ 2^{256} $ 位。
這通常不是它的工作原理。儘管 IV 可以在加密後公開,但 CBC 模式等模式假設在這種加密發生之前,IV 對對手來說是不可預測的。
那麼這個密碼的安全證明是否必須“假設”這樣一個數據庫的存在?
不適用於密碼算法。密碼與數據庫無關。A協議或應用程序特定方案絕對應該考慮到這一點,以確保系統安全。
換句話說,如果密碼的安全證明依賴於公共數據庫的存在, $ 2^{256} $ 位,這是否會被視為“假設”,並被視為“未經證實的假設”(如離散對數問題的難度)?
不,甚至沒有。
首先,這樣的數據庫在密碼學中被稱為表,即使它非常大。
在密碼使用這樣一個表的情況下,它應該證明或顯示該表的算法使用與已知硬度假設的等價性。畢竟,你不能只是假設任何問題都很難。
您可以假設/使其成為數據庫由隨機位組成的先決條件。畢竟,我們當然可以創建(偽)隨機位。這是否有用或不強烈取決於。
當然,儲存 $ 2^{256} $ 無論如何,表中的位都是胡說八道(那是 $ 1.447 \cdot 10^{49} $ 千字節!)。
請注意,許多模式不需要隨機 IV。許多——例如 CTR、GCM 和 ChaCha20 只需要一個隨機數。對於那些你只需要保持同步(消息)計數器。如果您想從共享表中提取 IV,那麼無論如何您都需要同步偏移量。
對於 CBC 模式,您可以類似地加密計數器以創建不可預測的 IV,最好使用單獨的密鑰。
所以你可能一開始就可以不用桌子。