具有高熵的密鑰流與在流密碼中是否具有密碼安全性之間的關係
嗨,我正在嘗試為我的自製流密碼建構一個密鑰流生成器。密鑰流輸出具有接近最大熵值和很大的周期性。這個生成器需要什麼才能免受各種攻擊?
什麼是高熵意味著安全明智?我現在對此感到困惑。
感謝您花時間。
熵是物理過程或知識狀態的屬性,而不是諸如流密碼之類的確定性函式的屬性,也不是諸如特定密碼之類的值的屬性。
如果對手不知道流密碼(一種確定性數學函式),則認為它是安全的。 $ k $ -bit key 是隨機均勻選擇的,只能做有限的計算量,但是已經看到了流密碼的一些輸出序列,不能更好地猜測下一位的機率 $ 1/2 + n/2^k $ , 在哪裡 $ n $ 是他們可以在其計算限制內評估流密碼的次數。
對手的知識狀態具有最小熵 $ k $ 在這種情況下位:密鑰是其中之一 $ 2^k $ 可能性,並且每種可能性都有相等的機率 $ 1/2^k $ 據對手所知。在不知道任何破解流密碼的密碼分析技術的情況下,對手的最佳策略是正確猜測密鑰 $ 1/2^k $ 正確的機會,計算流密碼,檢查它是否產生觀察到的輸出,如果是,猜測它產生的下一位;如果密鑰錯了,對手對下一位的猜測並不比拋硬幣好。
這個策略聽起來很愚蠢。但是對隨機數生成器(如頑固分子)的統計測試使用比一般情況下對手的最佳策略更愚蠢的策略:他們假設一些生成過程與統一的簡單偏差,例如 1 位和 0 位的不同頻率,並且通常對假設執行頻率統計檢驗。這些測試更愚蠢,因為與對流密碼的最佳通用攻擊不同,它們的編寫甚至沒有通用知識,即輸出是由具有未知密鑰的流密碼產生的,更聰明的對手可以使用任何候選密鑰進行評估。
有時密碼分析者會發現更好的攻擊。例如,在 sci.crypt 上最初發布 RC4 的幾天內,Bob Jenkins 在 1994 年 9 月 16 日的一篇文章中報告了 message-id
359qjg$55v$1@mhadg.production.compuserve.com
,這是一種使用以下計算以顯著更好的機率預測下一位的技術:可能在 1994 年的筆記型電腦上執行此操作,從而打破了 RC4,在任何有能力做出決定的人認為這對 TLS 來說是個壞主意之前,RC4 將繼續在實踐中使用了 20 年。但是很少有一個認真提出的流密碼被徹底破壞,以至於像頑固分子這樣的隨機數生成器的通用統計測試可以做出更好的攻擊。在密碼學工程中,處理每一個 $ \ell $ - 在攻擊者不知道的密鑰下安全流密碼的比特輸出,就好像攻擊者對其的了解最多具有先驗知識一樣 $ \min(\ell, k) $ 獨立的最小熵位。這種語言的濫用是合理的,因為在實踐中,一個真正的計算有界對手對流密碼輸出的最佳猜測基本上與它真的是一樣的 $ \min(\ell, k) $ .
我們通常選擇 $ k $ 以便 $ n/2^k $ 對於任何現實價值都可以忽略不計 $ n $ —*例如,*如果我們選擇 $ k = 100 $ ,那麼我們可能會挫敗任何計算能量預算不足以使日內瓦湖沸騰的對手。標準密碼學在安全方面犯了錯誤 $ k \geq 128 $ . 明智的密碼學還通過挑選來避免多目標攻擊和潛在的未來量子密碼分析 $ k \geq 256 $ .
從最後開始,高熵(不可預測性)對於密鑰流生成器可能意味著兩件事。
首先,您可以測量從程式碼中生成的比特流的熵。如果最大,則為 1 位/位、8 位/字節或 100%,具體取決於您的測量比例。我認為您允許流是 ASCII 而不是二進制。這些熵值意味著您的流是完全隨機且無偏的。我對cryptool不熟悉,但我希望它不使用基本的香農熵公式,因為如果測試樣本中存在任何形式的相關性,則該公式實際上不起作用。我只發現壓縮估計對於未知數據樣本是可靠的。偏差/相關允許預測破壞 RC4 密碼。不知道你是如何確定週期性的。這可能非常困難,並且通過檢查並不總是很明顯。並且憑經驗測量週期性也可能非常困難。
如果你有足夠大的(二進制)流數據樣本,你可以使用像dieharder這樣的東西來檢查數據的熵質量。甚至ent對於最大 2GB 的文件也是合理的。
其次,生成器的種子熵。如果您的生成器是從 32 位種子開始的,那麼隨機輸出是沒有用的。這意味著最多只有 2^32 個可能的序列。使用不良播種/算法Finney樣狀態 (RC4) 可能會縮短輸出週期的長度。因此,來自 32 位種子的最大周期可能僅為 2^16。因此建議生成器的種子至少應為 128 /256 位熵。如果你不能直接輸入這個並且使用像“我的生日”這樣的種子,那麼你至少應該使用像 Argon2 或 bcrypt 這樣的密鑰派生算法來在嘗試暴力破解密碼時引入很長時間的延遲。
確定密碼的熵也非常困難。困難遠遠超出了熵的簡單代數計算。社會和心理因素以及您使用了哪些字元或多少個字母都會起作用。這就是社會工程攻擊可以成功的地方。