Symmetric

對於解密到相同輸入的兩個密碼,猜測對稱密鑰的計算成本是多少?

  • February 20, 2018

消息m用兩個對稱密鑰加密,產生兩個密碼c

c1 = 加密(m,key1)

c2 = 加密(m,key2)

為解密到相同消息的兩個密碼猜測對稱密鑰的計算成本是多少?

我堅持使用對稱的、未經身份驗證的密碼;除非另有說明,否則我認為它是一個黑匣子。

通過熵論證,為了使問題始終可解,我們需要 $ m $ 略大於密鑰大小,如果 $ m $ 是已知的,或略大於兩倍的密鑰大小,如果 $ m $ 是未知的(我假設);否則,很可能有多種解決方案,我們無法找到正確的解決方案。


事情取決於如果 $ m $ 是否給定,以及密碼是確定性的(例如,分組密碼,或 ECB 模式中的密碼)還是隨機的(例如,流密碼或 CTR 模式中的分組密碼)。

如果 $ m $ 給出並且密碼是確定性的,我們可以列舉密鑰 $ K $ 之中 $ 2^k $ (說增量),加密 $ m $ 和 $ K $ ,並得出結論 $ K $ 既不是想要的 $ K_1 $ 也不 $ K_2 $ 當密文都不匹配時 $ c_1 $ 不是 $ c_2 $ (也就是說,大多數時候)。我們探索的 $ K $ 將包括兩者 $ K_1 $ 和 $ K_2 $ 有機率 $ 1/2 $ 探索之後 $ 2^{k-1/2} $ 鍵(而不是 $ 2^{k-1} $ 一鍵)。找到兩個密鑰的預期加密次數是 $ 2^{k+1}/3 $ (而不是 $ 2^{k-1} $ ),增加 $ 1/3 $ . 預期的工作會稍微增加一些(因為額外的比較)。

每個請求:加密次數為 $ \max(K_1,K_2)+1 $ . 鍵表現為兩個統一且獨立的離散變數 $ [0,2^k[ $ . 作為 $ k $ 增長,預期加密次數與 $ 2^k $ 因此收斂(快速)到兩個連續變數中的最大值的平均值 $ [0,1[ $ . 因此,找到兩個密鑰的預期加密次數的一階近似是 $$ 2^k\int_{x=0}^1\int_{y=0}^1\max(x,y)\ \mathrm dx\ \mathrm dy=2^k\int_{x=0}^1\left(\left(\int_{y=0}^x x\ \mathrm dy\right)+\left(\int_{y=x}^1 y\ \mathrm dy\right)\right)\mathrm dx\=2^k\int_{x=0}^1\left(x^2+1/2-x^2/2\right)\mathrm dx=2^k(1/6+1/2)=2^{k+1}/3 $$


如果 $ m $ 給出並且密碼是不確定的,我們可以列舉密鑰 $ K $ 如上,破譯 $ c_1 $ 和 $ c_2 $ 用這個鍵,比較 $ m $ . 如上所述,我們探索的 $ K $ 將包括兩者 $ K_1 $ 和 $ K_2 $ 有機率 $ 1/2 $ 探索之後 $ 2^{k-1/2} $ 鍵。但是,在我們找到其中一個密鑰之前,我們需要對每個密鑰進行兩次解密 $ K $ . 預期的解密次數是 $ 2^k $ , 是一把鑰匙的兩倍。取決於密碼的內部結構(例如,對於 AES,輪次子密鑰的推導可以在兩個密鑰都不可用的階段在兩個解密之間共享)。


如果 $ m $ 是未知的,我們可以使用中間相遇攻擊:我們破譯 $ c_1 $ 使用所有(或大部分) $ K $ ,建立一個可能的字典 $ m $ ; 然後我們破譯 $ c_2 $ 列舉 $ K $ , 直到我們找到結果 $ m $ 在字典裡。預期的解密次數是 $ 2^{k+1/2} $ , 三倍於一把鑰匙並且已知 $ m $ . 需要大量記憶體,但有一些變通方法,代價是只需要多做一些工作;參見 Paul C. van Oorschot 和 Michael J. Wiener 的Parallel Collision Search with Cryptanalytic Applications密碼學雜誌,1999 年 1 月,第 12 卷,第 1 期;第一作者的網站提供免費的稍早版本


如果我們“打開”密碼的黑匣子,事情就會發生很大的變化。特別是,對於允許動態加密/解密的密碼,我們不需要完全加密/解密一個大的 $ m $ 在全。對於某些密碼(例如 3DES),可能有捷徑。

如果密碼是安全的,則成本是相同的。

否則請考慮一下,如果我知道您對某人的問題加密了“是”或“否”的答案,我可以使用隨機密鑰加密“是”和“否”,這將幫助我找到您的密鑰。

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