是否有密碼攻擊的術語,您可以在不假設明文上的任何已知結構的情況下驗證解密?
問題https://security.stackexchange.com/questions/1696/if-someone-breaks-encryption-how-do-they-know-theyre-successful和https://security.stackexchange.com/questions/119887/資訊安全 SE 上的 how-to-know-if-a-file-is-decrypted-or-not都詢問某人如何驗證他們是否已成功解密密文。這兩個問題的答案(以及Bruce Schneier 的這篇舊文章)都給出了以下互補的答案:
- 在絕大多數實際使用加密的情況下,明文都有一些已知的結構,並且在實踐中很容易辨識。
- 如果出於某種原因您加密了真正的隨機數據,那麼密文就無法破解,因為無法辨識明文。
但是,這兩個答案對我來說似乎都是錯誤的。(我認為)當今世界上最常見的單一密碼協議之一給出了一個簡單的反例:混合密碼系統的密鑰封裝部分,這是非常常見的。例如,常見的密碼系統使用 RSA 加密 AES 對稱密鑰並公開傳輸加密的密鑰,然後將其解密並隨後用於加密和解密數據本身。
- 在這種情況下,第一階段(使用 RSA 的密鑰封裝)中的“消息”是一個 AES 對稱密鑰,它確實是一個完全隨機的位串。與上述權利要求 1 相反,人們一直在加密完全隨機的明文。
- 對攻擊者來說幸運的是,上面的聲明 2 也是錯誤的。如果您設法分解 RSA 公鑰,然後解密消息,那麼您無需查看即可輕鬆判斷您已獲得正確的明文,更不用說驗證它的結構了。您所要做的就是將私鑰中的兩個數字相乘,並驗證它們的乘積是公鑰。
我的問題是雙重的:
- 我的理解正確嗎?有什麼我遺漏的東西可以使這些答案正確嗎?
- 如果我的理解是正確的,是否存在加密攻擊的術語(例如分解 RSA 公鑰,但與猜測一次性密碼不同),其中存在某種檢查攻擊成功的方法,而無需在明文上假設任何已知結構?
您錯過了將 KEM 用於混合併不會加密隨機垃圾。假設你有一個密文鏈 $ C_1||C_2||\dots|| C_n $ , 在哪裡 $ C_1 = \mathsf{Enc}_K(k) $ , 在哪裡 $ k $ 是一個 AES 密鑰,並且 $ C_2||\dots||C_n $ 是在 AES 密鑰下加密一些明文流的結果 $ k $ 在某種操作模式下。
如果我們可以計算 $ k = \mathsf{Dec}_K(C_1) $ ,我們可以通過解密輕鬆檢查我們是否正確解密 $ C_2||\dots||C_n $ 在上述操作模式下。假設此數據具有任何結構(或本質上將其與隨機垃圾區分開的任何方法),可以將其引導到一種方法來區分 $ \mathsf{Dec}_K(C_1) $ 來自隨機垃圾。
如果有人加密*(*使用分組密碼操作模式)一些隨機數據序列 $ P_3||\dots||P_n $ (操作模式中IV使用一個塊),我們不能再使用上述方法來區分正確的AES密鑰。那麼連結的評論仍然是有問題的(從攻擊者的角度來看)——沒有辦法區分一堆隨機垃圾和隨機垃圾(假設它的分佈相同),所以它基本上是無望的。
這本質上是在說明僅僅因為 $ k $ (希望)在某個域上是均勻隨機的,其餘的密文塊高度依賴於它,可用於開髮用於猜測的“正確性測試” $ k $ . 所以 $ C_1 $ 滿足“隨機垃圾”屬性,但是 $ C_1||\dots||C_n $ (共同)沒有。
你的第二個問題很有趣,但很遺憾我只能對第一個問題發表評論。
要回答第 2 部分,RSA 私鑰確實具有已知結構。他們是 $ e^{-1}(\mod lcm(p-1,q-1)) $ . 自從 $ e $ 是公開的,並且 $ n $ 是公開的並且等於 $ pq $ , 找到兩個素數,其乘積為 $ n $ 是給定 RSA 公鑰的對應私鑰。那是您要驗證的結構,而不是解封裝的對稱密鑰。根據 Mark 的回答,您還可以通過嘗試解密某些密文或使用它驗證 MAC 來驗證對稱密鑰的正確性。