題 壓縮然後加密,反之亦然?


我正在編寫一個VPN系統來加密(AES256)它的網絡流量(為什麼當有1,000,001個其他人已經在那裡寫我自己的?好吧,我的是一個特殊的任務,其他人都不適合)。

基本上我想讓你的想法超越你,以確保我按照正確的順序這樣做。

目前,數據包在發送之前只是加密,但我想為它們添加一定程度的壓縮,以便稍微優化數據傳輸。不重壓縮 - 我不想一直最大化CPU,但我想確保壓縮盡可能高效。

所以,我的想法是,我應該壓縮數據包 之前 加密為未加密的數據包會比加密數據包壓縮得更好嗎?或者相反?

我可能會使用zlib進行壓縮。

閱讀更多 在超級用戶博客上


86
2018-03-15 09:37


起源


寫作“編程”?那將更適合Stack Overflow。 - Suma
如果我問的是它的編程,是的,但我不是。這是一般壓縮,然後加密或加密然後壓縮問題,如果你想要的話,這可以適用於只使用普通文件。編程方面只是我提出問題的背景。 - Majenko
也可以看看: stackoverflow.com/questions/4676095  stackoverflow.com/questions/4399812 - BlueRaja - Danny Pflughoeft
可能是一個最適合的問題 security.stackexchange.com - Jeff Ferland
他們知道有壓縮嗎? - Majenko


答案:


如果加密正確完成 那麼結果基本上是隨機數據。大多數壓縮方案都是通過查找數據中的模式來實現的,這些模式可以用某種方式計算出來,並且由於加密現在沒有;數據是完全不可壓縮的。

加密前壓縮。


172
2018-03-15 10:41



更重要的是:壓縮增加了熵。添加熵有利於您的加密(更難打破已知明文攻擊)。 - Olli
此外,加密成本資源,加密較小的文件將佔用較少的資源。所以在加密之前壓縮。 - GAThrawn
@Olli - 不一定是壓縮方案添加已知文本。在最壞的情況下,想像一下,如果它在數據的前面放置一個已知的512byte標頭,並且您使用的是塊模式加密。 - Martin Beckett
我不確定為什麼@Olli的評論會被提升,因為它是不正確的;不僅是顯著的 減 重要的是,對於任何半正式加密應該是 根本不重要。也就是說,加密的強度應該與消息的熵完全無關。 - BlueRaja - Danny Pflughoeft
如果你完全壓縮,它只能在加密消息之前完成,但請記住,這可能會洩漏有關原始消息的“可壓縮性”的信息,所以你要考慮是否對此方有任何後果渠道。考慮一個固定大小的文件,它是全0或消息。在任何合理的壓縮方案下,all 0文件將導致較小的有效載荷。但是在這個特定的用例中不太可能是一個問題。 - Edward KMETT


加密前壓縮。對於源數據中的微小變化,壓縮數據可能會有很大差異,因此很難執行差分密碼分析。

另外,正如Mr.Alpha指出的那樣,如果先加密,結果很難壓縮。


21
2018-03-15 13:01



嗯,這是正確的,但是在發布前2小時發布了... 熵 - Konerak


即使它取決於具體的用例,我會建議Encrypt-then-Compress。否則,攻擊者可能會從加密塊的數量中洩漏信息。

我們假設用戶向服務器發送消息,並且攻擊者可以在發送之前將文本附加到用戶消息(例如,通過javascript)。用戶想要向服務器發送一些敏感數據,攻擊者想要獲取這些數據。因此,他可以嘗試將不同的消息附加到用戶發送到服務器的數據中。然後,用戶壓縮他的消息和來自攻擊者的附加文本。 我們假設DEFLATE LZ77壓縮,因此該函數用指向第一次出現的指針替換相同的信息。因此,如果攻擊者可以重現孔明文,則壓縮函數會將純文本的大小縮小為原始大小和指針。並且在加密之後,攻擊者可以計算密碼塊的數量,因此他可以看到,如果他的附加數據與用戶發送到服務器的數據相同。即使這種情況聽起來有點構建,在TLS中也是一個嚴重的安全問題。這個想法被稱為CRIME的攻擊用於洩漏TLS連接中的cookie以竊取會話。

資源: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf


3
2018-01-14 21:32





我的觀點是,當您壓縮消息時,將其投影到較低的維度,因此有較少的位,這意味著壓縮的消息(假設無損壓縮)在較少的位中具有相同的信息(您擺脫的那些是多餘的! )因此,每位有更多的信息,因此每位的熵更多,但是與未壓縮消息之前的總熵相同。現在,隨機性是另一個問題,這就是壓縮模式可能會引發一個問題。


2
2017-10-09 04:11





壓縮應在加密之前完成。用戶不想花時間等待數據傳輸,但他/她需要立即完成而不浪費任何時間。


1
2018-03-16 08:39





前面已經指出過加密前的壓縮。壓縮尋找它可以壓縮的結構。加密對數據進行加密,以避免檢測到結構。通過先壓縮,您更有可能擁有更小的文件,從而減少傳輸的有效負載。無論是否進行壓縮,加密都將發揮作用,並且如前所述,再次對壓縮文件執行差分密碼分析可能更加困難。


1
2018-06-19 19:54



這似乎是已接受和第二個答案的重複。每個答案都應該為這個問題提供一個實質性的新解決方案。 - fixer1234


壓縮減少了信息熵。最大壓縮使熵最小化。對於完美加密的數據(噪聲),最大和最小熵是相同的。


0
2018-03-16 00:19



等等,你不倒退嗎?我認為隨著冗餘減少,熵增加了。因此壓縮應該增加熵。 - Zan Lynx
Nop,更少的熵=更多的模式。隨機性具有最多的熵。 - AbiusX
但它是 信息 熵所以它是關於意義的。隨機性並不意味著什麼,所以它不適用。英語句子可以改變字母並且仍然意味著相同的東西,因此它具有低熵。如果單個位發生變化,則壓縮的英語句子可能無法讀取。或者我認為。 - Zan Lynx
熵不是關於感知和閱讀或理解的能力,而是關於模式。壓縮文件充滿了模式。 - AbiusX
@AbiusX:對。模式。模式越少,熵越多。這意味著用單個副本替換所有重複模式的壓縮會增加熵。 - Zan Lynx