Key-Generation

如何隨機均勻地選擇可變長度密碼?

  • May 26, 2016

給定最小和最大長度時,如何隨機均勻地選擇密碼?

似乎如果我先選擇一個隨機長度,然後選擇隨機字元,當您考慮可能的固定長度的不同字元串的數量時,此過程將優先選擇較短長度的字元串。

在實踐中,選擇一個具有最大允許長度的隨機密碼就足夠了。

假設你的字母表有 $ n $ 不同的可用字元,密碼的總長度可達 $ k $ 是

$$ t(k) = n + n^2 + n^3 + \dotsb + n^k = \sum_{j=1}^k n^j = \frac{n^{k+1}-1}{n-1}, $$因此所有密碼中長度小於 $ k $ 是$$ \frac{t(k-1)}{t(k)} = \frac{n^k-1}{n^{k+1}-1} \approx \frac 1n. $$ 例如,假設您的密碼由可列印的 ASCII 字元組成( $ n = 95 $ ),所有短於最大長度的密碼僅佔大約 $ 1/95 \approx 1.05% $ 總密碼空間。

(無論如何,如果這些“密碼”是要由人類記住的,那麼使用通過從合適的字典中選擇隨機常用詞來選擇密碼片語通常會更有效。請參閱diceware以獲得流行的範例實現。取決於使用字典的大小,每個這樣的詞可以編碼大約 10 到 13 位的隨機性,而兩個隨機可列印的 ASCII 字元編碼略多於 13 位,但一個有意義的詞要人類比一對隨機字元更容易記住。當然,這樣的密碼最終會比等效熵的隨機字元序列長幾倍,但這只是一個嚴重的問題,如果你遇到某種硬的最大長度限制,在這種情況下存在這樣的限制才是真正的問題。)

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