Passwords

如何計算對使用的字元類型有限制的固定長度隨機密碼的熵

  • July 11, 2020

如果我們有一定數量的可用字元,但對完全隨機的固定長度密碼中的潛在字元沒有其他限制,我們可以通過以下方式輕鬆計算熵:

$ \log_2(c^{n}) $

或者

$ \log_2(c)*n $

和 $ c $ 是可能的字元數,並且 $ n $ 是密碼的長度。

但是,當對隨機密碼的內容進行限制時,這顯然會降低熵。


例如,如果您有 $ 94 $ 可用字元,其中 $ 10 $ 是數字, $ 26 $ 是小寫字母, $ 26 $ 是大寫字母,並且 $ 32 $ 是特殊字元。

如果沒有其他限制,這給了我們

$ \log_2(94^{10}) = 65.5 $

意思是 $ 65.5 $ 一點點的熵。


現在,如果我們有 $ 94 $ 可用字元並設置以下限制:

  • 1 個字元必須是大寫字母 ( $ 26 $ 選項)
  • 1 個字元必須是小寫字元 ( $ 26 $ 選項)
  • 1 個字元必須是數字 ( $ 10 $ 選項)
  • 1 個字元必須是特殊字元 ( $ 32 $ 選項)

考慮到這些限制,您如何計算真正隨機的固定長度密碼的熵?

看起來您使用的公式是 $ \log_2(\textrm{number of possible passwords}) $ .

您沒有明確提及長度,因此我假設為 10。

因此,有了這些限制,讓我們計算可能的密碼數量。

沒有任何限制,可能的密碼總數為 $ 94^{10} $ .

讓我們計算無效密碼的數量。 $ (94-26)^{10} $ 不包含大寫字母。 $ (94-26)^{10} $ 不包含小寫字母。 $ (94-32)^{10} $ 不包含特殊字元。 $ (94-10)^{10} $ 不包含數字。

這些有重疊。例如, $ (94-52)^{10} $ 既不包含大寫也不包含小寫字母。

無效密碼數 = $ (94-26)^{10} + (94-26)^{10} + (94-32)^{10} + (94-10)^{10} - \left((94-52)^{10} + (94-58)^{10} + (94-36)^{10} +(94-58)^{10} + (94-36)^{10} + (94-42)^{10}\right) + \left(26^{10} + 26^{10} + 32^{10} + 10^{10}\right) $

這產生 $ 64.81 $ 位。


完整性檢查:

無視秩序,限制給予 $ 26 \cdot 26 \cdot 10 \cdot 32 \cdot 94^{6} $ 可能的密碼數量。那是一個大寫,一個小寫,一個數字,一個特殊字元,剩下的6個可以是任何東西。採取 $ \log_2 $ 這產量 $ 57.05 $ 位。

這是一個下限。這 $ 65.5 $ 您在問題中提到的提供了一個上限。答案在預期的範圍內。

使用 $ \log_2(\textrm{number of possible passwords}) $ 在一個 $ n $ 字元密碼和一個 $ c $ 包含提到的受限字元的字元字母表,並假設 $ n\geq 4, $ 以便滿足我們的限制 $$ \log_2\left[ 26 \binom{n}{1} 26 \binom{n-1}{1} 10 \binom{n-2}{1} 32 \binom{n-3}{1} c^{n-4}\right]= $$ 或者 $$ \log_2\left[ n(n-1)(n-2)(n-3) 26^2\cdot 10 \cdot 32 \cdot c^{n-4}\right] $$ 由於選擇方式的數量 $ k $ 職位出 $ n $ 地方是 $ \binom nk. $

**編輯:**對於您的參數,這大約是 69.350,並且與另一個答案中的界限一致。

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