把檔案進行壓縮是否本身就是一種加密?RednaxelaFX2017-02-17 09:15:24

理論上說對資料進行無失真壓縮與對資料進行加密有相似之處,兩者都會使得最終資料的熵密度(entropy density)提高。這個意義上說廣義看來壓縮也可以看作一種加密吧。

但狹義看,把(無損)壓縮與加密區分開來看的話,它們最大的區別是,壓縮是使用更短的資料來記錄跟原始資料同等量的資訊,所以雖然熵密度增加了,熵總量並沒有改變;加密的目標則是從外界引入額外的熵使得最終資料顯得更加隨機,即便加密後的資料跟原始資料一樣長,熵還是增加了因而熵密度也增加了。

更新: @夏洋 的回答提醒得對,熵增是加密的手段而不是目的,所以上面那段話讀起來請分辨清楚我在說的是結果的特徵而不是目的。

回到題主舉例的場景:

如果我在下載一個壓縮檔案,它是否還像直接下載的未壓縮用Http下載的檔案一樣透明?

假定別人不知道這個壓縮檔案的壓縮演算法是啥的話,那麼它會比“未壓縮用Http下載的檔案”要更不透明一些。看起來就像是加密了一樣。

但好的加密的準則之一就是不要假定別人不知道演算法,而是(如果有金鑰的話)要保護好金鑰。

如果題主所說的壓縮檔案是常見格式(因而隱含它是使用常見壓縮演算法)來壓縮的,那麼其實別人讀到這個檔案的指明壓縮格式/演算法的標記開始,這個檔案就跟沒有壓縮一樣“透明”了——因為別人如果能截獲到資料的話,也可以使用同樣的解壓演算法去獲取裡面的內容。

把檔案進行壓縮是否本身就是一種加密?夏洋2017-02-17 10:04:26

當然不是了,重點在於目的不同。

這裡有三個相關但是根本目的不同的行為:編碼(encoding),壓縮(compression),加密(encryption)。題主混淆的其實不是壓縮和加密,而是編碼和加密:

加密

的根本目的不是提高熵密度(雖然效果上通常會),而是防止未授權的訪問,重點在於『授權』這個行為,其它結果都是副產品。

壓縮

的根本目的是減小資訊體積,提高熵密度。

編碼

的目的是把資訊進行某種變換,以達到某種目的,比如使得它能被裝進目標載體裡。

比如我寫了一封中文信,那麼歪果仁就看不懂了,但他隨便找個中國人就能看懂。在這裡我『用中文』只是把我腦子裡的想法進行的一種編碼,目的並不在於『只允許我授權了的人解讀』。如果是後者,那麼我用密碼加密,除非我把密碼告訴你,否則(在不考慮演算法漏洞的情況下)你找誰都沒用,這才是加密。

把檔案進行壓縮是否本身就是一種加密?知乎使用者2017-02-18 04:57:27

壓縮並不是一種現代密碼學意義上“好”的加密方法

對於現代密碼學來說, 加密應該是找到一種“

單向陷門函式

”。

首先, 這個單向陷門函式應該是一個

單向函式

。 也就是說, 如果你知道x, 那麼很容易就可以計算出f(x), 但是如果你知道f(x), 卻不那麼容易反推回x。

其次, 這個單向陷門函式需要一個

陷門

。 就是, 雖然讓我直接從f(x)反推x比較困難, 但是如果我們知道了某些資訊y, 就可以比較容易地從f(x)反推得到x。 這裡y就相當於金鑰。準確一點說, 解密秘鑰。

這樣加密的好處是, 加密使用的函式f是可以公開的, 只要你自己儲存好y, 那麼別人想透過f(x)反推回x就比較困難。 這樣就保證了安全性。

對於通常意義上的壓縮來說, 雖然也是透過某種演算法f, 從x計算得到f(x)。 但是首先這個f不是單向函式, 更沒有什麼“陷門”。 所以說壓縮演算法是不能當做現代密碼學意義上的加密來用的。

剛才我說了“通常意義上的壓縮”, 是因為有例外情況的。 比如rar, 是支援使用AES加密的。 但這個過程是兩步走, 先壓縮, 再加密, 就不能算是單純的壓縮了。

我看之前有答主說, 你不能直接讀出壓縮的檔案, 所以認為壓縮屬於加密。 這是不對的。 密碼學上有一個原則叫

柯克霍夫原則.

通俗來說就是, 好的加密演算法應該保證, 即使對方知道你加密的演算法細節, 但只要他不知道你的金鑰, 仍然應該使對方無法解密。

而在壓縮的演算法中, 只要對方知道了你壓縮/解壓的演算法, 很容易就可以破解你壓縮後的資訊。 所以這不能說是一個現代密碼學意義上“好”的加密演算法。

把檔案進行壓縮是否本身就是一種加密?gvht2017-02-20 08:18:10

自從我壓縮過後,百度雲裡的小影片就沒被和諧過(滑稽)

把檔案進行壓縮是否本身就是一種加密?馮東2017-10-11 11:33:24

當我們接收到一個 message 的時候,實際上還隱含接收到一個 frame message ID。比如說一個雙語者接收到一條中文(或者英文)的訊息,他會識別出 frame message ID 是中文(還是英文),然後用相應的 frame message decoder 去解釋這個資訊(成為人腦中的 meta-language)。

而對於一個只會說中文的人,他也許能識別出一條 message 的 frame message ID 是英文,但是沒有辦法對其進行 decoding。

但是在通常情況下,我們不能以接收者是否能學會某個 decoder 作為資訊的指向性。就像如果中美開戰了,美國一樣有會中文的人,中國一樣有會英文的人。美國二戰那種「風語者」無非是借人類幾千年發展的老本,說實話到了全球化時代也越來越難重現了。更不可能 scale up 到計算機系統中。

而一個好的加密演算法裡,frame message decoder 是可以分離為演算法和金鑰的。即使知道了 frame message ID,也知道了 frame message decoder 的演算法,沒有金鑰還是不能 decoding。

壓縮是什麼呢?只是 decoder 比明文更復雜一些,但是這個 decoder 並不能拆分。知道了 frame message ID,接收者就一定可以解密(在使用 well-known 壓縮演算法的時候)。