Aes

暴露明文的大小會帶來哪些安全風險?

  • August 18, 2019

對於這個問題,我的重點完全是對稱分組密碼(尤其對 CBC 模式下的 AES256 感興趣)。

我已經閱讀了很多關於填充明文的各種方法的討論,以便加密算法的輸入長度是塊大小的倍數。

這裡真正的問題不是填充到合適的大小(這本身就是微不足道的),而是在解密後撤消這種填充。

撤消填充的一種非常簡單的方案是將(未填充的)明文的長度儲存在標題部分中,未加密。然後,在密文被解密後,原始結果被截斷為這個保存的長度。

由於這個簡單的解決方案從未在關於填充的討論中提及(我查閱了幾本教科書),我不得不假設它存在一些非常嚴重的問題,但這些問題從未被闡明,而且對我來說並不明顯。這些是什麼?

暴露明文的大小沒有安全風險。明文的大小始終被視為公共數據。它沒有完成,因為它的好處有限。

使用 CBC 之類的模式,您無法加密小數塊。您必須將整數個塊傳遞給加密函式。所以你需要某種形式的填充。密文是整數個塊。如果密文本身沒有對消息進行明確編碼,則需要單獨傳遞大小,至少是最後一個塊的大小(或等效的填充大小)。實際上,這意味著您至少需要一個額外的字節來指示大小。如果這樣做,則填充不需要是明確的,因此如果明文恰好是整數個塊,則可以允許它為空。與無歧義填充相比,如果明文是整數個塊,則此方法導緻密文加大小減少一個塊減去一個字節,否則為一個字節。所以就密文大小而言,

就密文和解碼複雜性而言,單獨傳遞大小會使事情變得更複雜一些。密文不再是黑匣子:填充大小需要與它一起發送。ciphertext-plus-size 可以是一個黑盒子,但處理起來有點困難:最後一個偽塊比其他偽塊長一個字節。

該方案確實具有安全優勢。由於接收方不需要對填充進行解碼,因此如果操作正確,它可以消除直接填充預言攻擊。然而,當 CBC 流行時,人們對此知之甚少:人們通常遵循通常的智慧來驗證一切,從而揭示有關最後一個塊的內容的資訊。今天,嚴肅的協議設計者很清楚填充預言攻擊的危險,但解決方案是根本不使用填充。

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