Encryption

加密前的壓縮如何洩漏有關輸入的資訊?

  • August 22, 2014

顯然,目前的最佳實踐建議您在加密之前不要壓縮。

例如在此部落格條目 (*) 中:

http://sockpuppet.org/blog/2013/07/22/applied-practical-cryptography/

這個已經寫完了:

開發人員不應該在加密之前壓縮明文。

或者在crypto.se上的這個問題中:

是否需要在加密之前壓縮數據以減少明文冗餘?

有幾個人回答說,在加密之前壓縮實際上是有害的。

我真正不明白的是,顯然解釋是壓縮算法使用了有關明文輸入大小的洩漏資訊!?

但是以哪種方式在加密之前不使用壓縮也**不會洩漏有關輸入長度的資訊?

壓縮算法會洩漏哪些附加資訊,而這些資訊不會因不進行壓縮而洩漏?

如果對未壓縮加密的明文使用填充,那麼在加密壓縮數據(或要壓縮的數據)之前是否也可以使用填充?

另外:與在加密之前不壓縮所造成的攻擊相比,在加密之前使用壓縮所造成的攻擊是否真的是一個問題?(後者是二十多年來一直建議在加密前壓縮的原因)。

問題不在於壓縮和加密,而在於正在使用的協議,以及在加密之前壓縮(或不壓縮)的數據類型。

最嚴重的洩漏發生在那些被設計為未經加密壓縮或未經壓縮加密的協議上。

我擁有的最好的例子是在加密之前使用可變比特率壓縮的 VOIP 系統。由於單詞甚至音節之間的間隙被高度壓縮,並且單詞和音節本身根據其內容以不同的速率壓縮,因此可以使用流量模式分析來準確檢測口語單詞和片語。公開研究僅在過去十年內開始,但 NSA 設計的加密語音協議使用恆定比特率壓縮和 i/o 時鐘,這意味著該技術要麼是已知的,要麼他們預計會被利用。

此處對該主題進行了出色的介紹,以及 2008 年的更詳細的初步報告

當協議設計得當,考慮到壓縮和加密時,獲取資訊就會變得更加困難。例如,使用 AES-GCM 對整個消息空間進行加密的 SMS 消息,首先壓縮文本,從而允許在單個消息中包含可能超過 160 個字元。某些 SMS 必須用於 nonce/auth 標籤,因此它可以容納的消息越多越好。這當然是我所說的附加加密,而不是 SMS 協議的一部分。多個連續的 SMS 消息會顯示有關消息大小的資訊(大於限制),如果操作正確,壓縮可以防止這種情況發生。

在加密之前將任何壓縮的明文填充到某個給定數字的倍數(比如 128 字節)會降低某些攻擊的效率,尤其是在大多數明文都很小(如文本消息)的情況下。用於填充數據的方法也很重要,因為存在利用各種協議中使用的填充的攻擊。

閱讀有關CRIME 和 BREACH 攻擊的資訊。它們是加密前的壓縮可能洩漏有關輸入資訊的經典範例。壓縮數據的長度會洩露有關數據本身內容的資訊。

另請參閱https://security.stackexchange.com/q/19911/971>和<https://security.stackexchange.com/q/20406/971>和<https://security.stackexchange.com/q/39925/971對 IT Security.SE 上的這些攻擊的詳細討論。

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