Cryptanalysis

暴力破解CRC-32

  • October 17, 2013

我正在研究一個使用 IDEA 的密碼系統。設計者犯了一個錯誤,即在標頭中包含未加密密碼的 CRC-32B 雜湊,以便系統可以快速拒絕錯誤密碼。當然,這會引發明顯的攻擊,即暴力破解潛在密碼的 CRC32,直到找到正確的密碼。這就是我想要做的。

問題:

  1. 最好的方法是簡單地對密碼空間進行詳盡的搜尋嗎?在我看來,由於 CRC32(x) 以明顯的方式與 x 相關(例如,XOR 被保留),因此可以進行建構,讓我們積極地將搜尋引導到正確的方向。我對 CRC32 知之甚少,但在我看來,這樣的事情是可能的。

當然,僅僅找到一個具有相同CRC32的字元串是不夠的。它必須是使用的真實密碼,否則 IDEA 解密會亂碼。所以這可能會給這種方法潑一些水。但是,無論如何,我想了解更多。你說什麼? 2. 如果做不到這一點,我將需要快速程式碼來暴力破解 CRC32B。最快的程式碼是什麼?我的計劃是通過 CRC32 暴力破解候選者,然後嘗試通過 IDEA 解密並測量熵以過濾掉仍然與 CRC 匹配的所有誤報(40 億分之一)。

假設未知位串b的**n位 CRC是已知的,則可以從位串的其餘部分(以及 CRC 的定義)建設性地重建b的任何連續**n位。實際上,在所描述的情況下,這大大加快了密碼搜尋的速度。可以從密碼的開頭計算出密碼的最後 32 位(可能是 4 個字元)。如果密碼被限制為

$$ 20h..7Fh $$,這將進一步刪除 $ 49/50 $ 的候選人。 在實踐中發現的許多 CRC(包括 32 位 CRC CCITT)在某種意義上不是“保持異或” $ CRC(x \oplus y) = CRC(x) \oplus CRC(y) $ .

然而它始終認為 $ CRC(x \oplus y \oplus z) = CRC(x) \oplus CRC(y) \oplus CRC(z) $ 對於任何 $ x $ , $ y $ , $ z $ 長度相同(包括與 $ z $ 全零);這(和一點線性代數)足以組織計算。在一天結束時,與 $ n=32 $ ,可以通過對預先計算的表中找到的值進行異或來計算最後 4 個字節(每個前面的字節一個表,每個表 $ 256·32 $ 位)。

IDEA 的密鑰大小為 128 位。即使 32 位 CRC 完全洩漏了 32 個密鑰位,這仍然會留下 96 位或 790 億、十億、十億個密鑰的有效密鑰大小——這仍然太大而無法暴力破解。

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