特定結構密碼的密碼熵(以位為單位)
我已經閱讀了這篇文章和這篇關於如何最好地以密碼位計算偽準確熵的文章。
對於具有統一性質的密碼,我可以做到這一點,例如 az 範圍的 8 個字母是:
26(a-z)^8(length) = 208,827,064,576
然後到位:
log2 (208,827,064,576) = 37.6035177451 = 38,
所以它的可預測熵S是 38 - 1 = 37 位。
我的問題:
現在,我有一個由以下結構組成的密碼:
A-z, 0-9, a-z, 0-9 .... to ten characters long (5 of each type).
例子:
A9B8C7D6E5
我認為它的熵值是:
(b): 26 * 10 * 26 * 10 * 26 * 10 * 26 * 10 * 26 * 10 = 1,188,137,600,000
我曾嘗試過其他更片語法的變體,例如,
(26 * 10)^5
但這些數字似乎並不相關。無論如何,上面給出了熵位:
log2(1.1881376e+12) = 40.1118390651
所以S是 40。這讓我覺得它只比第一個例子大一點,我認為我的工作是正確的,而且我知道數字字元確實嚴重限制了整個密碼的潛在熵。
- 我的計算和結論(S ~40)是否正確?
- 如果是這樣; 有沒有更有效的方法來計算方程(b)?
謝謝。
我的計算和結論(S~40)是否正確?
是的,但重要的是要說明這些計算背後的前提,而不是將它們歸為腳註。即,密碼中的每個字元都是隨機均勻選擇的,彼此獨立。我們經常看到人們在密碼顯然不是隨機選擇的情況下談論密碼“熵”。在這種情況下,您的計算不會告訴您有關密碼安全性的任何資訊。
還要記住,絕大多數人不會隨機選擇密碼。這些數字適用於現實生活中的特殊情況。
如果是這樣; 有沒有更有效的方法來計算方程(b)?
是的,通過使用對數定律,您可以通過添加小數而不是乘以大數來計算它:
$$ \log(n \times m) = \log(n) + \log(m) $$ 這就是為什麼熵通常用比特表示——等機率選項數量的以 2 為底的對數——因為它只是讓數學變得更容易。在這種情況下:
- 從一組 26 個字元中統一隨機選擇一個字元是 $ \log_2(26) \approx 4.7 $ 位。
- 從一組 10 個字元中均勻隨機選擇一個字元是 $ \log_2(10) \approx 3.3 $ 位。
- 一系列獨立隨機選擇的熵是它們各自熵的總和。
因此,隨機生成的八個字母密碼的熵約為 $ 8 \times 4.7 = 37.6 $ 位,根據您的後一種模式隨機生成的一個大約 $ 5 \times 4.7 + 5 \times 3.3 = 5 \times 8 = 40 $ 一點點的熵。
解決此評論:
@CodesInChaos 您的評論似乎暗示某些字元集的順序在計算熵時似乎並不重要。在面對這個問題的潛在解決方案時,我對自己做出這個假設持謹慎態度。
如果訂單是預先確定的,那沒關係,因為這樣就無法選擇訂單,因此沒有不確定性。另一種看待這個問題的方式是,在看起來像
ABCDE12345
和的一組密碼之間存在一個雙射函式A1B2C3D4E5
,因此從一組中均勻隨機選擇的元素必須與從另一組中選擇相同的熵。(熵是統一情況下備選方案數量的以 2 為底的對數,兩種情況下備選方案的總數相同。)