Key-Size

XXX 位加密之間是否存在實際的安全差異?

  • April 2, 2013

我知道我正踏入危險的水域問這個問題——我對密碼學數學的理解非常缺乏。另一方面,它讓我非常欽佩你們中的許多人能夠做到的事情。

根據我對加密函式的理解,密碼通常用於創建 xxx 位密鑰。這可能是 128 位、256 位… 2048 位(又名 xxx 位加密)等。然後,此密鑰用於通過選擇的任何算法(AES 等)加密數據。據我了解(我可能是錯的),您可以通過提供正確的密鑰來解碼資訊,或者通過提供產生正確密鑰的正確密碼來解碼資訊。

鑑於通常像 8 位字母數字區分大小寫的密碼會提供 30 位的熵,我的假設是,在幾乎所有情況下,密碼的熵都比加密密鑰少得多,因此是蠻力攻擊的邏輯目標。由於這個與加密密鑰長度無關的弱點是攻擊的目標,​​在保證數據安全方面,採用更長的位加密方案是否有任何實際優勢?

注意事項

  • 作為密碼學的新手,我可能弄錯了術語。隨時糾正我,但不要拘泥於對我所說的內容的嚴格解釋,更多的是問題的“主題”。
  • 如果我對加密過程的工作方式有任何錯誤,請告訴我。
  • 這個問題的目標是通過人工互動進行加密/解密,而不是說 SSL 證書。假設存在並使用了密碼。
  • 我會嘗試按照你給出的任何數學計算,但你可能會失去我!

非常感謝加密貨幣。這裡的第一個問題,對不起,如果我錯過了什麼。

編輯:作為一個明顯的後續行動,在提供了兩個答案之後,我的想法基本上走在了正確的軌道上——選擇更長的鍵空間算法有什麼好處?再次基本理解是,它會以計算密鑰的計算強度為代價提供“更多”安全性。為什麼我們擔心 1024 位和 2048 位加密?無論如何,它們基本上都不是牢不可破的嗎?

密鑰大小表示嘗試每個可能的密鑰所需的最大嘗試次數。如果您的密鑰大小是 4 位,那麼您將花費不超過 $ 2^4 $ 或 16 次嘗試才能找到正確的密鑰(這稱為強制算法)。密鑰大小代表算法的最大理論強度,但並不直接代表實際強度。實際強度由您必須進行的蠻力嘗試次數表示。而這個數字可以通過巧妙的攻擊來減少。

(一般來說,要求 $ 2^{80} $ 嘗試接近暴力被認為不切實際的邊緣。)

不同的算法有不同的密鑰使用方式,可以減少耗盡密鑰空間所需的攻擊次數,有效地“降低算法的強度”。例如,DES 硬體實現採用 64 位密鑰,但其中 8 位被丟棄,只剩下 $ 2^{56} $ 可能的鍵。DES 還具有反轉屬性,這意味著如果您解密這樣的消息: $ m=DESdecrypt(k,c) $ , 如果您隨後反轉密鑰中的所有位,以便 $ k’ = !k $ , 然後 $ m’ = !m $ . 換句話說,它是對剩餘密鑰空間的一半的免費測試,將蠻力攻擊的成本提高到 $ 2^{55} $ . 其他弱點導致對 DES 的攻擊得到改進,因此暴力破解它的成本大約在某個地方 $ 2^{48} $ 嘗試。強度明顯低於 $ 2^{64} $ 它開始時的一些關鍵材料。

作為 DES 弱點的證明,Deep Crack 旨在在一天內測試其所有密鑰空間。

DES 為我們提供了另一個例子。為了延長其生命週期,3DES 是使用 DES 的三個背靠背實現創建的,具有三個不同的密鑰。雖然實際的鍵空間是 $ 2^{56*3} $ = $ 2^{168} $ , 中途相遇攻擊將其實力降低到 $ 2^{112} $ . 這對於蠻力攻擊仍然足夠強大,因此 3DES 仍然是安全的。它唯一的缺點是速度——3DES 比 AES-128 或其他現代密碼慢得多。

一般來說,雖然蠻力範圍仍然高於 $ 2^{100} $ ,算法仍然可能是安全的。

RSA 和其他非對稱算法以不同的方式使用數學,因此密鑰大小也必須被理解為不同。他們的優勢在於解決難題的難度,例如分解兩個大素數的乘積。不同的分解算法有不同的效率,而分解算法定義了蠻力。20年前,一個 $ 2^{512} $ 位密鑰足夠強大,可以在蠻力攻擊中倖存下來。今天,一個 $ 2^{1024} $ 位 RSA 密鑰接近可以分解的邊緣。並且 RSA 只受數學家的擺佈,在因式分解算法效率方面沒有更多進步。如果某個才華橫溢的數學家要找到分解的通用解決方案,那麼 RSA 將被徹底破壞。(人們一直在努力,因為這條道路通向永恆的榮耀——字面意思。我們今天仍在討論埃拉托色尼篩法,他在 2000 多年前去世了。)

正如您正確觀察到的那樣,密碼強度在許多實現中是一個弱點,因為只有大約 $ 2^{19} $ 英語中的單詞(而且人們並不是很有創造力),但這並不是唯一的弱點。定時攻擊可以逐位揭示關鍵資訊的詳細資訊。協議錯誤可以讓攻擊者偽裝成舊設備,並強制選擇舊的或損壞的加密形式,或者根本不加密。Chris Paget 在 DEFCON 18 上展示了這一點,他對普通手機加密進行了出色的中間人攻擊。

您會在密碼學中聽到的一句話是“攻擊永遠不會變得更糟”。一旦一個楔子被驅動到一個算法中,它就可以永遠被其他攻擊者利用,並且多個楔子通常可以堆疊在一起,使算法無法抵抗攻擊。它們都有助於降低算法的強度。

根據我對加密函式的理解,密碼通常用於創建 xxx 位密鑰……鑑於通常像 8 位字母數字區分大小寫的密碼將提供 30 位熵,我的假設是幾乎所有在這種情況下,密碼的熵比加密密鑰的熵要少得多,因此是暴力攻擊的邏輯目標。

首先,許多(如果不是大多數)密鑰應該由加密安全的隨機數源生成。這將生成一個具有最大熵的密鑰:128 位或 256 位,具體取決於密鑰的大小。這遠遠超出了蠻力的範圍。

如果您確實需要從密碼生成密鑰,則有類似的算法PBKDF2試圖增加暴力破解密鑰的成本。它們有一個可配置的工作因子,當它增加時,將密碼猜測轉化為密鑰所需的計算能力會成倍增加。您仍然應該避免使用非常弱的密碼,但如果配置工作因素使得每次暴力嘗試需要大約一秒鐘的時間來計算(使用今天的硬體),那麼平均需要 17 年才能破解一個 8 個字元的字母數字密鑰。

這顯然仍遠低於暴力破解 128 位隨機生成密鑰所需的時間,因此使用強密碼仍然是絕對強制性的。考慮到當今的硬體,考慮到每個密碼猜測需要大約一秒鐘的時間來生成密鑰的工作因素,由標準美國鍵盤上的任何字形組成的 10 位密碼之類的東西將需要超過 8000 億年的時間才能破解。

為什麼我們擔心 1024 位和 2048 位加密?

給定特定大小的密鑰的強度取決於該密鑰的生成方式。對於 128 位和 256 位密鑰,我們幾乎不可避免地要談論對稱加密。對於這些類型的算法,密鑰是隨機生成的。

非對稱(公鑰/私鑰)加密是另一種野獸。對於像 RSA 這樣的算法,密鑰不僅僅是一個非常大的隨機數:它是一個非常大的半素數。簡而言之,您的私鑰通常由兩個大素數組成,而公鑰是 1024 位或 2048 位半素數,由這兩個素數相乘得到。破解密鑰的難度在於攻擊者需要花費多少精力來分解公鑰以發現構成私鑰的兩個素數——我們認為這是一項非常困難的任務。

基於我們認為這個問題有多難,我們目前認為分解 1024 位半素數的努力大致相當於暴力破解 128 位密鑰空間。對於 2048 位半素數和 256 位鍵空間也是如此。還有其他非對稱密碼系統依賴於其他“難”的數學問題,它們的密鑰長度同樣基於我們認為這些問題的難易程度。

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