大量密碼工作流程會為每個帳號產生一個全新的獨立密碼,反覆擲取經密碼學驗證的隨機字串——而最安全的做法是一次產生一個密碼,先複製並儲存後再進行下一次點擊,這樣資料永遠不會離開您的裝置。「大量」一詞描述的是工作流程,而非伺服器端的批次處理:每次點擊「產生」都會產生一條獨立的高熵字串,由您選擇的字元池建構而成,且絕不會透過網路傳輸。強度以熵的位元數衡量,每個字元大約貢獻 log2(poolSize) 位元到總熵值。當大寫、小寫、數字與符號全部啟用時,字元池為 86 個字元,每個字元約增加 6.4 位元,因此 16 字元密碼約有 103 位元熵——輕鬆超越 標準密碼安全性指引 視為可抵禦離線暴力攻擊的 100 位元門檻。本指南將逐步說明工作流程、熵的計算,以及確保每個產生的密碼保密的純本機設計。

使用本機工具時「大量」產生的樣貌
網路上大多數「大量密碼產生器」頁面承諾單次點擊就能吐出數百或數千組密碼,並提供可下載的檔案。這確實是一種有效的工作流程——但這也意味著您必須信任伺服器來產生即將貼到真實帳號中的憑證,然後還要信任該伺服器之後會刪除所有紀錄。密碼產生器 採取不同做法:每次點擊只產生一組密碼,完全在您的瀏覽器中執行,結果絕不會傳送到任何地方。若要建立一批密碼,您點擊「產生」、複製結果、貼到密碼管理工具中、為該項目命名,然後再次點擊。沒有上傳步驟、沒有伺服器紀錄,關閉分頁時也沒有任何需要清理的東西。
這改變了這個工具的適用對象。如果您需要一千組用於單次入活動的一次性代碼,伺服器端的批次匯出工具是正確選擇。如果您需要一組少量但強度高且長久使用的主密碼——或幾十組您實際擁有帳號的獨立憑證——反覆使用本機工具能為每組密碼帶來更高的熵值,且完全沒有網路曝險。隨機性來自您自己裝置的 crypto.getRandomValues,結果會留在您的分頁中直到您複製為止。隱私的故事不是「信任廠商」;而是「廠商永遠看不到機密」。
如何產生多組高強度密碼
設定好參數後,完整工作流程每組密碼只需幾秒鐘。為每組需要的新憑證依序執行下列步驟。
- 在瀏覽器中開啟密碼產生器。不需登入、不需擴充功能、不需下載——只要開啟頁面即可。
- 先使用滑桿或數字框設定長度。實用的預設值為 16 字元;長度越長強度越高,因為熵值會隨長度線性增加。主密碼以及日後可能需要手動輸入的帳號復原碼,請使用 20 字元以上。
- 切換要納入的字元類型:大寫(A–Z)、小寫(a–z)、數字(0–9)以及符號(!@#$…)。同時啟用這四種可得到最大的字元池——共 86 個相異字元——並讓每個字元位置的熵值最大化。
- 決定是否要排除容易混淆的字元。關閉 0、O、1 與 l 會犧牲一點點熵值,但能讓密碼在閱讀與抄寫時大幅降低出錯機率。如果您只使用複製貼上,則可保持開啟。
- 查看強度與熵值估計。工具會以位元數回報熵值;重要帳號請以 100 位元以上為目標,低於 60 位元視為偏弱。
- 點擊「產生」,從 CSPRNG 擲出全新密碼。工具使用拒絕抽樣,確保字元池中每個字元被選中的機率完全相等,並保證至少出現一個所選類型的字元,接著以 Fisher–Yates 洗牌打散結果,使保證出現的字元不會固定在可預測的位置。
- 點擊「複製」,然後將密碼貼到您的密碼管理工具中並為項目命名。關閉或重新整理分頁時,密碼會從記憶體中消失;唯一留存下來的複本就是您儲存的那一份。
- 為每一組額外的密碼需求重複步驟 6 開始的流程。每次點擊都是獨立的——各次擲取之間沒有共用種子,因此密碼之間不會互相關聯,看過其中一組的攻擊者也無法推算其他組。
用數字看熵值:長度與字元多樣性的比較
密碼強度中最大的槓桿是長度,而非字元多樣性。下表顯示啟用越多字元集時,字元池如何變化;每個字元的熵值成長緩慢(例如僅在小寫中加入大寫時約增加 1.0 位元),而長度每增加一個字元則會讓總搜尋空間乘以整個字元池大小。
| 字元池大小 | 納入的字元 |
|---|---|
| 10 | 僅數字(0–9) |
| 26 | 僅小寫字母(a–z) |
| 52 | 小寫 + 大寫 |
| 62 | 小寫 + 大寫 + 數字 |
| 86 | 小寫 + 大寫 + 數字 + 符號 |
NIST SP 800-63B 與 OWASP 的現代指引之所以偏好長密碼或 passphrase,而非強制的複雜度規則,正是基於這個原因。一組僅由小寫字母組成的 20 字元字串,熵值略低於 100 位元門檻(約 94 位元),而塞滿符號的 8 字元字串反而達不到。當您批次產生密碼時,請固定長度(例如 16 或 20 字元),將字元多樣性視為次要的微調手段——有助於進一步提高熵值,但永遠無法取代長度。如需深入了解為何均勻選取與無偏誤的 PRNG 和標題的熵值數字同樣重要,請參閱 什麼讓隨機字串安全。
為何 CSPRNG 勝過 Math.random
網路上大多數業餘的「隨機密碼」程式碼片段會呼叫 JavaScript 的 Math.random。它速度快、方便,但不具密碼學安全性。其輸出由內部 PRNG 狀態產生,該狀態可從少量的先前輸出值反推,這代表任何看過同一工作階段少數輸出的人,都能預測接下來的輸出。因此,基於 Math.random 建立的密碼,其實際隨機性遠低於長度所暗示的水準,即使長度看起來相當可觀。
密碼產生器改用平台的 CSPRNG——瀏覽器內建的 crypto.getRandomValues,MDN 將其描述為可讓您取得「密碼學強度高的隨機值」。在此之上還有兩層防護來確保強度。第一,拒絕抽樣確保字元池中的每個字元以完全相等的機率被選中,消除了將 32 位元隨機數直接對應到較小字母表時會產生的模偏差。第二,在保證至少出現一個所選類型字元後,執行 Fisher–Yates 洗牌,確保那些保證出現的字元不會落在攻擊者可利用的固定位置。這些細節加總起來,才讓回報的熵值數字真正反映搜尋空間,而非行銷話術。
如何妥善儲存多組獨立密碼又不遺漏
為每個網站產生全新密碼的意義,一旦您開始重複使用,或更糟地——將它寫在便條紙上,就會化為烏有。NIST SP 800-63B 與 OWASP 驗證 Cheat Sheet 都建議為每個帳號使用一組長、隨機且獨特的密碼,存放在密碼管理工具中而非記在腦中。管理工具消除了工作流程中唯一的實際摩擦:您不需要記住一串 20 字元的隨機字元,因為管理工具會代為填入,您也不需要在每次登入時手動輸入。
兩個習慣能讓大量密碼工作流程得以持續運作。第一,優先使用密碼管理工具內建的產生器(若有的話),因為它能在單一步驟中將新密碼儲存到正確的項目。當您需要一組可攜、跨裝置的字串時(例如主密碼、Wi-Fi 預先共用金鑰、未來可能需要在借用裝置上手動輸入的復原碼),則使用獨立的密碼產生器,因為結果永遠不會離開您的分頁。第二,將每組產生的密碼視為一次性使用:立即貼到目標帳號中、存入您的管理工具,不要再存到其他地方。由於產生過程在本機完成且密碼絕不傳送,唯一可能洩漏的地方就是您產生密碼的那台裝置,這就是為什麼即使使用純本機工具,全磁碟密碼與鎖定螢幕政策仍然重要。
排除容易混淆字元的時機
「排除容易混淆字元」的開關會從字元池中移除 0、O、1 與 l。這是可用性上的取捨,而非安全性上的提升。它只會讓每個字元損失零點幾個位元——字元池從 86 降到 82——但所產生的字串在朗讀、手機輸入或從列印的備份表抄寫時都會大幅更容易辨識。當密碼未來可能需要手動輸入時,請啟用此選項:復原碼、與訪客分享的 Wi-Fi 金鑰、密碼管理工具本身的主密碼,或任何您預期會在沒有安裝管理工具的裝置上登入的帳號。對於一般只使用貼上的網站登入,請關閉此選項以換取更高的熵值。
如果您在權衡各種選項,SHA-512 加鹽密碼雜湊:輸出值的意義 有詳細說明。