文件大小是否會顯著影響暴力破解時間?
假設您有兩個使用 AES-256 加密的文件。兩個文件之一是 5MB,另一個超過 1GB。他們的密碼相當強:>12 個字元、字母、數字、大小寫字元。如果您嘗試暴力破解它們,在較小的文件上嘗試相同數量的密碼會比在較大的文件上花費更短的時間嗎?
例如(在這裡只是編數字),在小密碼上嘗試 100.000.000.000 個密碼是否需要 1000 年,而在較大密碼上嘗試相同數量的密碼可能需要 10.000 年?
這不是現實生活中的場景。這只是為了我正在寫的一個故事,其中密碼學只扮演邊緣角色。只要原則上暴力破解較小的文件比暴力破解較大的文件花費更短的時間這一想法是有意義的,並且從長遠來看,差異變得不可忽視,那麼準確性就不是必需的。
AES 是一種分組密碼,通常通過將大的明文數據分成固定大小的塊(在 AES 的情況下為 128 位)並單獨處理這些塊來對大的明文數據進行操作。類似地,解密可能會在單個密文塊上進行,並且(故意)很容易恢復部分明文,而無需解密所有內容。如果明文很容易辨識(例如,您知道它以“親愛的 Moriarty 教授”或“分類:絕密”開頭,或者僅包含可列印的 ASCII 字元),那麼如果有 $ 2^{256} $ 可能的密鑰 只要我們知道文本都是可列印的 ASCII 碼,只需解密三個左右的已知起始塊(大約 50 個字元)或 16 個左右的塊,就可以確定正確的密鑰。
就您的故事而言,要檢查的塊要少得多,因為可能的鍵要少得多。很可能單個文本塊就足以辨識密鑰。
換句話說,文件大小與耗盡 100,000,000,000 個密鑰的時間無關,因為解密過程可以僅應用於密文的第一個塊而不是整個文件。
正如這些其他 答案中所述,解密時間基本上與標準加密方法的文件大小無關。
然而,解密時間可能與文件大小成正比,使用某些(非標準)形式的雙重加密,因此需要完全解密外層才能開始內層的解密。
這種雙重加密可能如下:
- 繪製隨機秘密 256 位密鑰 $ K $ .
- 使用密鑰加密文件 $ K $ 根據AES -256- CTR,產生中間密文 $ I $ .
- 雜湊 $ I $ 使用 SHA-256,產生 $ H $ .
- 計算鹽 $ S\gets K\oplus H $ .
- 將密碼拉伸成 256 位派生密鑰 $ D $ 加鹽 $ S $ 每個PBKDF2 -HMAC-SHA-256 和 10000 輪(如果不推薦的話,這是一種常見的做法)。
- 加密 $ I $ 帶鑰匙 $ D $ 根據 AES-256-CTR,產生密文 $ C $ .
- 將加密文件形成為 $ S $ 其次是 $ C $ .
標準的基於密碼的加密通常包括生成隨機鹽 $ S $ ,然後執行步驟5/6/7;所以我們只是在擴展實踐。一個稱職的密碼破解者或國家級參與者將能夠攻擊,如果密碼只是公平的,使用 GPU、FPGA 或 ASIC 來加速密碼搜尋,因為它使用了 PBKDF2(使用Argon2代替將是最先進的) -art,並使密碼搜尋更加頻繁)
找到密碼和破譯的最佳方法是:
解析加密文件以獲取前綴 $ S $ 其餘的 $ C $ .
對於每個要測試的密碼(主要是:從最可能到最不可能):
- 執行步驟 5,產生一些 $ D $ .
- 解密 $ C $ 帶鑰匙 $ D $ 根據 AES-256-CTR,產生一些 $ I $ .
- 雜湊 $ I $ 使用 SHA-256,產生一些 $ H $ (如第 3 步)。
- 計算一些 $ K\gets S\oplus H $ (反轉步驟 4)。
- 解密開頭 $ I $ 如果密碼正確則產生文件的開頭,否則產生無意義的垃圾。
- 測試文件的開頭是否合理(對於大多數實際文件來說,這可能很快並且幾乎可以肯定:任何未壓縮的、壓縮的影片、zip 存檔、JPEG 圖像);如果是這樣,破譯其餘的。
關鍵是有必要解密整個 $ C $ 進入整個 $ I $ , 並對其進行雜湊處理,以測試是否找到了正確的密碼。當文件很大時,這將主導密碼搜尋的成本,以至於使步驟 5 的密鑰延伸成為解密成本的可忽略不計的一部分。