密碼熵是如何計算的
log2 公式、所有三個 EFF 清單的工作範例、離合詩的成本以及為什麼網站強度計不同意此頁面。
熵衡量的是過程,不是密碼
單一密碼沒有熵。 「正確的馬電池主食」這個短語本身並不強或弱——重要的是它是如何存在的。如果一台機器從 7,776 列表中統一抽取四個單詞,那麼它是大約 3.7 百萬個同樣可能的結果之一。如果有人因為在動畫片中看到它而選擇它,那麼它就是少數之一,並且沒有任何算術可以改變這一點。
因此,該站點上的每個圖都描述了生成器及其設置,假設攻擊者知道這些設置並減少到猜測隨機抽獎。這一假設是保守的。清單、字數、長度範圍、分隔符號和大小寫規則都在此頁面上發布,因此將它們視為秘密會誇大此處的每個數字。
公式
對於從 N 個同樣可能的可能性中統一做出的選擇,熵是 log2(N) 位元。每個獨立的選擇都會增加自己的位,因此 k 個獨立的選擇來自同一個 N 池,給出:
位元 = k × log2(N)
這就是密碼短語的整個計算過程。對數基 2 是將“多少種可能性”轉換為“多少位”,而位很方便,因為每個額外的位都會使攻擊者面臨的工作量增加一倍。七十位的難度是六十九位的兩倍,比六十位的難度約為一千倍。
同樣的公式適用於隨機字元密碼,其中 N 是字元集的大小,k 是長度:從一組 80 中提取的二十個字元給出 20 × log2(80),大約為 126 位元。
三個清單的工作範例
EFF 長列表包含 7,776 個字。 log2(7,776) 約為 12.925,因此每個字大約包含 12.9 位元。六個字給出 6 × 12.925,大約 77.5 位元-此頁面上的預設值,以及 EFF 自己對該清單的建議。七個字代表 90.5,八個字代表 103.4。
兩個短列表都包含 1,296 個字。 log2(1,296) 大約是 10.34,所以六個字大約給出 62 位,七個字大約給出 72.4,八個字大約給出 82.7。這就是為什麼短列表需要一兩個額外的單字來匹配長列表。
長列表中的五個單字大約是 64.6 bits — 幾乎與短列表中的六個單字完全相同。達到給定強度的兩個途徑實際上是可以互換的;選擇您認為更容易輸入的單字。
長度範圍對圖形有何影響
最小和最大單字長度在繪製任何單字之前過濾列表,因此公式中的 N 是過濾器中倖存下來的單字數,而不是檔案的大小。當您變更範圍並顯示剩餘計數時,頁面會重新計算此值,因此熵值始終與實際使用的池有關。
這對於合理範圍來說是一個很小的影響,而對於極端範圍來說是一個很大的影響。將長列表限制為恰好四個字母的單詞,留下了幾百個候選者,將每個單字從大約 12.9 位減少到大約 8 — 這將六字密碼短語從大約 77 位變成大約 48。該頁面將顯示這一點,此時它會告訴您擴大範圍或添加單字。
分隔符號和大小寫選項添加了什麼
固定分隔符號不會添加任何內容。如果每個間隙都是連字符,那麼知道設定的攻擊者也會在每個間隙中添加連字符;他們別無選擇去猜測。
隨機分隔符號選項不同。每個間隙獨立佔用五個字元之一,因此每個間隙增加 log2(5),大約 2.32 bits。六字密碼短語有五個間隙,大約是 11.6 額外位元 - 一個真正的增益,頁面會計算它。
同樣的邏輯也適用於案例。小寫、大寫、大寫、交替都是固定規則,不加任何內容。隨機情況會為每個字翻轉一枚獨立的硬幣,因此每個字恰好加上一位:六字密碼短語上的六位。這也算了。
值得注意的是這些是多麼溫和。隨機大小寫和隨機分隔符號一起將大約 17 bits 添加到六字密碼短語中,而第七個單字則單獨添加大約 13 並且更容易記住。添加文字幾乎總是更好的槓桿。
離合詩要花多少錢
使用離合詩,每個單字不再從整個池中提取 - 它是從以您指定的字母開頭的單字中提取的。因此,該公式變成了總和而不是乘積:總計是第一個字母的池的 log2,加上第二個字母的池的 log2,依此類推。
字母的分佈非常不均勻。在EFF長列表中,僅限於5到9個字母的單詞,以s開頭的池比以j開頭的池大幾倍,並且比以x開頭的池大得多。因此,六個字母的離合詩給出的數字低於不受約束的每個單字值的六倍,而低於多少完全取決於您選擇的字母。
該頁面對您輸入的確切字母進行求和,這是給出誠實數字的唯一方法。如果您的一個字母在當前列表和長度範圍內沒有後面的單詞,它會顯示哪個字母而不是靜靜地失敗。
離合詩也不是秘密。假設攻擊者知道你的狗的名字的首字母拼寫,因為這是一種容易被猜到的事情。
誠實地將點滴轉化為時間
本頁的時間估計假設對被盜密碼資料庫進行每秒一兆次猜測的離線攻擊,並且在正確的可能性出現之前必須嘗試一半的可能性。無論何時出現時間,都會說明這些假設,因為沒有它們的時間估計是沒有意義的。
一兆次猜測是一個刻意苛刻的數字。它位於專用硬體攻擊快速、選擇不當的雜湊函數的正確區域。正確使用現代密碼雜湊的網站的攻擊速度要慢數百萬倍,並且任何線上登入表單的速度還要慢數十億倍,因為每次嘗試都是伺服器可以限制速率的網路請求。
這就是為什麼本頁的數字故意悲觀。如果估計顯示搜尋所需的時間比任何人都長得多,那麼針對運作良好的服務的實際數字還要更長。
為什麼網站的強度計顯示不同的內容
大多數強度計都會對它們前面的字元進行評分,因為這就是它們所擁有的一切:它們永遠不會看到密碼是如何產生的。它們獎勵混合字元類別,懲罰重複,並且經常與常見密碼的字典進行匹配。反對人類發明的密碼,這是合理的啟發式方法,也是表單可以做的唯一事情。
由於完全錯誤的原因,它對產生的密碼短語的評分很差。六個小寫字典單字之間有空格,對於字元計數啟發式來說,它們看起來正是它所要警告的事情——儘管這些單字是隨機繪製的,而且結果比儀表所鼓掌的幾乎任何東西都強。
當儀表和此頁面對此處產生的密碼不一致時,頁面描述過程,而儀表描述外觀。兩者都不是說謊;他們測量的是不同的事物,而只有其中一個人知道這些字的出處。
你產生的東西會發生什麼
ToolAcre 在您的瀏覽器中本機產生密碼。對於高度敏感的環境,請在使用任何基於 Web 的密碼產生器之前驗證您的瀏覽器、裝置和作業系統是否可信。
- 每個密碼短語和密碼都是由瀏覽器自己的加密隨機數產生器在瀏覽器標籤中產生的。頁面載入後,不涉及任何伺服器。
- 這裡產生的任何內容都不會發送到 ToolAcre。該產品的內容安全策略將頁面限制為其自己的來源,因此瀏覽器本身會阻止任何將資料發送到其他地方的嘗試。
- 本機儲存、會話儲存、cookie、瀏覽器內資料庫、網址列或瀏覽器控制台中不會寫入任何內容。重新載入會丟棄它;關閉選項卡將丟棄它。
- 沒有帳戶,沒有登錄,沒有分析腳本,也沒有廣告腳本。唯一下載的檔案是靜態單字列表。
- 沒有保留任何歷史記錄。再次產生替換該值,先前的值不可恢復。
問題
多少位就夠了?
對於密碼管理器背後的普通帳戶,以上有關 70 bits 的任何內容都超出了現實的猜測。對於保護其他所有內容(管理器本身、您的裝置、電子郵件)的少數密碼短語,目標更高,圍繞 90 bits 或更多,這是長列表中的七到八個單字。
為什麼添加單字比添加符號更有幫助?
長列表中的一個字將可能性的數量乘以 7,776,大約是 12.9 bits。附加在固定位置的符號會將其乘以一,因為攻擊者知道它在那裡。只有實際上是隨機的選擇才算在內。
頁面統計圖中的隨機case選項嗎?
是的,每個字一位,因為每個字都是獨立的硬幣翻轉。固定大小寫規則被視為零,因為知道該規則的攻擊者可以自己應用它。
為什麼在時間估計中使用了一半的密鑰空間?
因為平均而言,詳盡的搜尋會在中途找到答案。使用完整的密鑰空間會將時間誇大兩倍,這在這些尺度上是一個舍入誤差,但仍然是錯誤的捨入方式。
考慮到計算機的速度越來越快,77 bits 是否足夠?
每增加一點,猜測成本就會加倍,因此算術對防守者非常有利。 77 位元密碼的實際風險不是原始運算 - 它們是網路釣魚、裝置上的惡意軟體、跨網站重複使用以及不小心儲存密碼的服務。這些都是值得關注的事情。
限制
- 熵是猜測難度的上限,而不是帳戶實際如何受到損害的預測。大多數帳戶的遺失是由於網路釣魚、重複使用和資料庫被破壞,而不是猜測。
- 這些數字假設隨機源是聲音。該頁面使用瀏覽器的加密產生器,沒有它就拒絕運行,但它無法從頁面內部審核該生成器。
- 時間估計完全取決於假設的猜測率。這裡使用的速率是故意規定的,對於任何特定的攻擊者來說,在任何一個方向上都可能是錯誤的。
- 計算假設每個單字都是獨立且統一繪製的。如果這不是真的,那就誇大了強度,這就是為什麼生成器會用替換來繪製而不是刪除它已經使用過的單字。
- 沒有任何熵值可以解釋密碼被重複使用、在不安全的地方寫入或在受感染的機器上輸入。