通過密碼字典攻擊破解 AES 加密?
破解受密碼保護的 AES-256 加密文件有多容易?
我知道,即使使用量子計算,嘗試暴力破解 AES-256 加密密鑰也是不可行的。但是,如果該加密密鑰是從密碼片語中生成的呢?那麼破解加密有多容易?
我在密碼學方面一點經驗都沒有,但試著做一些簡單的估計:根據牛津詞典,大約有 17 萬個英語單詞在使用。當然,其中只有一小部分是常用密碼,但讓我們使用這個數字。
如果我們嘗試暴力破解密碼,我想我們會從 1 字長的密碼片語開始,然後是 2 字長的密碼,依此類推。假設單詞不重複,這將給出可能性總數:
$ N(L) = \sum_{i=1}^L \frac{170000!}{i!} $
其中 L 是我們想要嘗試破解的最大密碼長度(字數)。
為了得到周圍的一些排列 $ 2^{256} $ ,那麼我們需要一個至少 18 個單詞的密碼,因為 $ N(15) = 2.85\times10^{78} = 2^{260} $ .
那麼假設是否正確,如果被攻擊者知道“密碼”確實是由英文密鑰組成的密碼片語,那麼密碼片語需要至少 15 個字長才能使其不成為網路中較弱的環節AES加密方案?
假設單詞不重複,這將給出可能性總數:
$ N(L) = \sum_{i=1}^L {170000 \choose i} $
否:這是總組數 $ L $ 單詞,但是單詞必須按順序排列,所以值實際上是 $ N(L) = \sum_{i=1}^L \frac{170000!}{i!} $ .
此外,沒有理由不重複單詞:這只是讓密碼更容易猜到。所以數量 $ L $ -word 密碼實際上是 $ 170000^{L} $ . 密碼的數量 $ 1 $ 至 $ L $ 話是 $$ N(L) = \sum_{i=1}^L 170000^i $$
攻擊者實際上很可能知道密碼片語中的單詞數量,但這並不會改變太多。
做計算, $ N(14) < 2^{256} < N(15) $ .
那麼假設是否正確,如果被攻擊者知道“密碼”確實是一個由英文密鑰組成的密碼,那麼密碼至少需要18 15 個字長才能使它不是較弱的連結AES加密方案?
仍然沒有,因為測試密碼的成本高於測試密鑰的成本。要測試密碼片語,攻擊者必須首先從密碼片語中獲取密鑰,然後測試密鑰。從密碼中導出密鑰故意很慢:它使用密鑰拉伸功能。
與散列計算相比,密鑰拉伸速度有多慢取決於密鑰拉伸算法的選擇、參數化方式以及攻擊者擁有的硬體。對於這種規模的蠻力,硬體設計的成本可以忽略不計,成本以功耗為主導。對於 PBKDF2 等傳統的迭代操作密鑰拉伸功能,用於密鑰拉伸的矽功率並不明顯高於 AES。通常選擇一個慢速因子,使得一次執行花費十分之幾秒,而 AES 部分則需要十億分之一秒,這意味著大約 $ 2^{26} $ . 借助現代的鍵拉伸功能,該功能也很難記憶,因此該比率更高,因為您還必須為 RAM 供電。我要使用 $ 2^{30} $ 作為比例。
這意味著為了讓 AES 比密碼更弱,我們需要 $ N(L) \ge 2^{256}/2^{30} = 2^{226} $ ,這是實現的 $ L \ge 13 $ .
但是……這個數字沒有意義!密碼破解絕對沒有必要比 AES 破解慢,因為 AES 破解已經非常不可能了。如果密碼破解是不可能的,但比 AES“不太不可能”,它仍然是不可能的。
比特幣網路使用了大約 0.4% 的世界總發電量(來源:≈ 100 TWh/年,略高於 25000 TWh/年)併計算出≈ $ 2^{93} $ 雜湊/年。假設您在每 Wh 中獲得相同數量的基本操作以進行密碼破解,成本因數差異為 $ 2^{30} $ 我在上面估計,這意味著密碼破解的上限是 $ 2^{63} $ 每年。
因此,如果您希望您的密鑰在一千年內不受 NSA 級別的對手的攻擊,您需要 $ N(L) \ge 1000 \cdot 2^{63} \approx 2^{73} $ ,這是實現的 $ L \ge 5 $ .
在這種對抗蠻力的力量水平上,蠻力就不是問題了。或者更確切地說,超級電腦中的“蠻力”不是問題。令人擔憂的蠻力是用鈍器施加的。
實際實際實際情況:真正有動機的攻擊者會通過網路釣魚找到密碼,或者對於非常細心的使用者和強大的攻擊者,通過植入攝像頭或植入惡意軟體來找到密碼。(或它們的組合。)