Entropy

測量僅密文攻擊的熵

  • November 14, 2011

當暴力破解密碼(例如對 DES 的常見攻擊)時,您只有密文,您需要一種方法來評估解密的明文是否是正確的。我相信 EFF DES 機器通過檢查字元是否可列印來做到這一點。當然,這只適用於 ASCII 文件,不適用於圖像之類的東西。

我想測量熵(觀察到的 0 階字節級別),看看它是否高於可歸因於隨機性的門檻值。

  1. 這是一個好方法嗎?
  2. 還有另一種眾所周知的方法嗎?
  3. 我在哪裡可以找到指示給定大小為 X 的隨機生成消息的表格,它的熵有 p 機率為 < ?(例如,在卡方檢驗中使用這些類型的表)

作為對 DW 的回應

我有 5 個密文,全部 1 KB,沒有關於它們的資訊。 我能夠通過字典攻擊解密一個;它是純文字 ASCII。我想其他人也是。如果是這種情況,很容易自動區分有效解密和無效解密(檢查所有字元是否可列印,而不是 < 0x20 或 > 0x80)。當然,其他的可能不是ASCII文件,但在我嘗試之前,我無法知道。

但是,我一般對這種方法感興趣。例如,在查看未知密碼系統的樣本輸出時,這將是評估是否存在任何明顯統計問題的好方法。或者,在對二進制應用程序進行逆向工程、查看數據並嘗試評估它是二進制數據還是加密時。除了應用程序之外,我還發現這個問題在數學上很有趣。

好吧,根據您之前的問題,我假設您正在編寫一個實用程序來暴力解密受密碼保護的文件(使用某種加密實用程序加密),並且您正在尋找一種方法來確定您的試用解密是否合理.

通常,當攻擊者試圖解密某些東西時,他對它是什麼有一些了解(他為什麼要投入精力),即使這個猜測沒有給他一個完整的明文塊,他也只是關於它是什麼的部分資訊(無論是 IP 數據包還是 Word 文件)都會幫助他辨識。

Thomas 指出,通常的假設是您確實有一個完整的明文塊。這可能是您在設計密碼時所做的假設(實際上,您假設攻擊者擁有更多),但並非所有攻擊者(例如,您自己)都如此。

您的建議(對字節頻率執行卡方測試以查看它是否與隨機生成的字節一致(想法是使用錯誤的密鑰解密數據最終會得到隨機的明文)不是一個壞想法;它是否是正確的想法在很大程度上取決於它是否會真正拾取明文(不需要如此高的敏感度以至於您會被錯誤點擊淹沒)。這是一個真正的問題;我懷疑(比如說) ZIP 文件具有相當均勻的字節分佈;卡方檢驗很難辨識這些)。

因此,我的建議是依靠一系列測試,每個測試都旨在獲取特定的文件格式(以及一個通用測試,可以辨識您沒有預料到的文件格式)。

這些測試的一些想法可能是:

  • 檢查字節的 MSbits 是否基本相同。這將擷取文本格式的任何內容(是的,卡方測試也會擷取它,但您需要解密更多數據才能執行該測試)
  • 檢查開頭是否與特定文件格式一致(例如,檢查出現在 ZIP 文件頭或 JPEG 文件頭中的幻數)。

您的基於卡方的測試是一個不錯的通用測試,它可以很好地選擇大多數未高度壓縮的文件格式。如果我這樣做,我會選擇一個更簡單但相關的特徵(例如“是否存在出現超過 N 次的字節值”);我不知道哪個在實踐中會更好。

通常的假設是攻擊者知道一個完整的明文塊;這就是 EFF DES 破解機使用的。那台機器準確地知道8個連續的明文字節和相應的密文塊;當它找到匹配的鍵時它會停止。由於有 2 56個可能的 DES 密鑰和 2 64 個可能的 8 字節塊,因此只有一個匹配密鑰的可能性很高(即,當 EFF 機器停止在一個密鑰上時,它就是正確的密鑰)。

這不是一個不合理的假設。例如,請參閱對類似問題的回复(關於 security.SE)以獲取更多詳細資訊(是的,我在自我推銷)。

至於熵:熵是對某些數據可能是什麼的度量。談論“給定消息的熵”是沒有意義的:熵是生成消息的過程的屬性,而不是任何消息本身的屬性。

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