Keys

為什麼大多數經過身份驗證的加密原語都希望使用不可預測且均勻隨機的密鑰才能確保安全?

  • March 9, 2022

我注意到,用於經過身份驗證的加密原語(如 AES)的密鑰必須是不可預測的並且是均勻隨機的,以確保安全。PRNG 的 IV 值和種子也必須是不可預測的和隨機的。

我的問題是:這些不可預測的隨機值與包含整個英文單詞的可預測值有何不同,例如(如verysecretkey123456)?

我假設從算法的角度來看這無關緊要(只要密鑰長度正確),但是攻擊者可以更容易地猜出可預測的密鑰/密碼,因為他們首先嘗試弱密鑰/密碼。我對嗎?

並且均勻隨機只有在多次生成密鑰時才有意義?如果是這樣,那麼當我們使用非均勻隨機密鑰時會發生什麼?

TL;DR 因為它們就是這樣設計的。您可以使用 KDF 派生最多包含輸入密鑰材料中存在的隨機性的密鑰。

我注意到,用於經過身份驗證的加密原語(如 AES)的密鑰必須是不可預測的並且是均勻隨機的,以確保安全。

好吧,它們需要 128 位才能像 AES 承諾的那樣具有 ~128 位的安全性。原則上,您還可以生成 112 位隨機密鑰,然後使用 16 個零值位來生成 128 位密鑰。大多數 API 只接受字節 - 即 8 位的倍數,因此對於 16 字節密鑰,這將是 14 個隨機字節和 2 個零字節。 原則上,AES不需要分佈良好的密鑰

我已經刪除了在邊頻道聊天中指出的這部分答案,事實並非如此。也就是說,對密鑰計劃的已知相關密鑰攻擊不會直接起作用,因為它們假設特定攻擊需要對提供的密鑰進行特定更改。但是,如果沒有進一步的分析,我們不能說結果是安全的;更多資訊可以在這裡找到。

PRNG 的 IV 值和種子也必須是不可預測的和隨機的。

不必要。每種操作模式的 IV 要求都不同。例如,CBC 需要不可預測的 IV(通常轉化為隨機IV)。CFB 需要一個與塊大小相同的隨機數。CTR 模式可以使用任何大小的隨機數,只要計數器塊不重複。GCM 模式通常使用 12 字節的 nonce。隨機數 - 使用一次的數字 - 可以是隨機的,但它們也可以是一個序列號,例如。

我的問題是:這些不可預測的隨機值與包含整個英文單詞的可預測值有何不同,例如(如verysecretkey123456)?

它們通常由種子良好的安全隨機數生成器(CSPRNG 或 DRBG)生成。或者它們來自其他資訊。例如,它們可以使用密鑰協商創建,通常後跟基於密鑰的密鑰派生函式 (KBKDF)。

確實也可以使用 PBKDF 從密碼生成密鑰。這些功能還需要鹽和工作因子(可能還有其他參數)來降低攻擊者猜測密碼的風險。除非存在其他對策,否則該方案可能仍然不安全,因為密碼通常很容易猜到。

“verysecretkey123456”通常不被視為密鑰,它會被視為密碼或密碼。它是一個字元串而不是二進制的事實足以說明這一點。

我假設從算法的角度來看沒關係(只要密鑰長度正確),

正確,儘管 AES 需要一個位字元串作為密鑰,所以要使用它,您首先必須對密碼或密碼進行編碼。請注意,例如 DES 密鑰在編碼密鑰中具有奇偶校驗位,因此並非所有密鑰都只採用隨機位。比 DES 更現代的密碼(包括 AES)通常被設計為採用完全隨機化的密鑰。

但是攻擊者可以更容易地猜出可預測的密鑰/密碼,因為他們首先嘗試弱密鑰/密碼。我對嗎?

是的,當他們嘗試特定單詞時,這通常被稱為*字典攻擊。*當然,他們可能會單獨測試非常小的密鑰,並且可以通過其他技巧來增強字典攻擊。

並且均勻隨機只有在多次生成密鑰時才有意義?如果是這樣,那麼當我們使用非均勻隨機密鑰時會發生什麼?

不,正如另一個答案中提到的,關於生成過程的統一隨機討論,而不是結果本身。如果你有非均勻隨機的密鑰,那麼攻擊者就有可能猜到它們——至少比密鑰是均勻隨機的更有可能。

根據 Kerckhoff 原則,我們通常假設攻擊者知道密鑰或密碼是如何生成的,因此他們可以據此猜測分佈。

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