隨機密碼產生器
🔒 在這個頁面裡產生,不會送到任何地方
選長度、選要用哪些字元,然後把結果帶走。每一個字元都來自瀏覽器內建的加密亂數產生器,整個過程沒有伺服器參與,所以也沒有任何東西可以被記錄下來。
破解時間以「離線暴力破解、每秒 10 兆次猜測」估算——這是相當悲觀的假設,登入頁面的猜測速度遠低於此。
🔒 密碼由你的瀏覽器內建的加密亂數產生器(crypto.getRandomValues)在這個頁面裡產生。不會送到任何伺服器,也不會被儲存——關掉分頁就沒了。
密碼要多長才夠?
真正有用的設定只有一個:長度。每多一個字元,攻擊者要搜尋的範圍就乘上一次字元池的大小;把已有的字元換來換去,效果遠不如直接加一個字。四種字元全開時可選的字元共 85 個,換算下來每個字元大約帶來 6.4 位元的熵:
| 長度 | 熵 | 暴力破解所需時間 |
|---|---|---|
| 8 | 51 位元 | 約 20 分鐘 |
| 12 | 77 位元 | 約 2,000 年 |
| 15 | 96 位元 | 約 10 億年 |
| 16 | 103 位元 | 約 1,000 億年 |
| 20 | 128 位元 | 比宇宙存在的時間還久 |
| 32 | 205 位元 | 已經沒有討論的意義 |
表中的時間是以「每秒 1012 次猜測的離線破解」估算——也就是攻擊者已經把網站的密碼資料庫偷走,在自己的機器上慢慢跑。這個假設相當嚴苛:一個正常運作的登入頁面,一分鐘只允許試幾次,不是一秒一兆次。
所以實務上的結論是:8 碼已經沒有防護力,12 碼是你會在意的帳號的下限,16 碼之後數字本身就不再是問題了。超過 20 碼並不會擋住任何真實存在的東西。Email 帳號和密碼管理器的主密碼請用網站允許的最長長度,因為那兩個是通往其他所有帳號的鑰匙。
亂數是從哪裡來的
這個工具使用 crypto.getRandomValues——瀏覽器提供的、來自作業系統的加密等級亂數來源。它不是Math.random:後者是速度優先的非加密 PRNG,只要看到幾個輸出就能還原它的內部狀態,接著推算出前後的所有結果。用Math.random產生的密碼看起來和真的一模一樣,但它不是。如果瀏覽器沒有提供安全的亂數來源,這個頁面會直接拒絕產生,而不是默默改用次級方案。
還有一個比較少被提到的陷阱:把一個 32 位元的隨機數換算成「84 個字元裡的第幾個」,最直覺的寫法是取餘數,而這個寫法是有偏差的——因為 232 不是 84 的倍數,前面幾個字元會永遠比其他字元多出現一點點。單看一個字元差異微小,但它是這個產生器可被測量、可被寫成加權字典的系統性特徵。這裡的作法是把範圍尾端不平均的部分丟掉重抽,偏差就完全消失。
為什麼符號只有那幾個
引號、反斜線、反引號、角括號、直線與空白都被刻意排除。這些正是「從你複製的地方到最後存進去的地方」之間最容易出事的字元:shell 會吃掉它們、CSV 匯出時會被當成分隔、寫得不好的表單會直接擋下,還有相當數量的網站會在遇到它們時默默把密碼截斷——你以為設了 20 碼,實際上存進去的只有前 6 碼。留下來的 23 個符號每個字元帶來的熵仍然高於數字和字母,而且不會害你把自己鎖在門外。
易混淆字元
勾選「排除易混淆的字元」會拿掉大寫 I、小寫 l、數字 1、大寫 O 和數字 0。什麼時候該勾:密碼需要由人看著螢幕、再手動打到另一個地方的時候——例如在電視上輸入 Wi-Fi 密碼、在電話裡唸給同事、或是印出來交給別人。其他情況不用勾,它會小幅降低熵,而如果密碼從頭到尾只會被複製貼上,這個代價換不到任何東西。
產生之後該怎麼處理
隨機密碼的前提是你永遠不需要記住它,也就是說它應該直接進密碼管理器——瀏覽器內建的就夠用,專門的更好。產生、貼進管理器、忘掉它,流程就這樣。這也是「每個網站用不同密碼」唯一實際可行的方式。
不要用 email 寄給自己、不要記在備忘錄、不要用聊天軟體傳。真的需要交給別人時,用會過期的一次性分享連結,或是當面講。至於什麼時候該換:有外洩跡象才換。很多公司仍在執行的「每 90 天強制更換」已經被NIST SP 800-63B拿掉了,因為實際結果是大家開始用 Summer2024!、Summer2025! 這種可預測的循環,反而更好猜。
常見問題
在網站上產生密碼安全嗎?
會這樣懷疑是對的,而且你不該只聽我們說。這個頁面是靜態的:你看到結果的時候,產生密碼的 JavaScript 早就下載完了。把網路關掉,再按一次「重新產生」,它照樣能用——因為它根本沒有對象可以回報。任何一個宣稱「在瀏覽器裡執行」的工具,都可以用這個方法驗證。
如果你要最保險的答案:用密碼管理器內建的產生器。那是你本來就把密碼交付給它的軟體,信任鏈比任何網頁都短。
你們會不會記錄產生出來的密碼?
不會,而且更重要的是——沒有任何機制讓我們做得到。密碼是在你的瀏覽器裡產生、直接寫進你正在看的這個頁面。按下按鈕時不會發出任何請求,也不會寫進 localStorage,重新整理就消失了。
為什麼我要註冊的網站不接受這組密碼?
幾乎都是長度上限或符號限制。先試 16 碼、把符號關掉;如果這樣可以,代表那個網站對可用的符號有沒寫出來的規定。反過來說,一個把密碼限制在 12 碼以內、或乾脆禁止符號的網站,其實正在透露它是怎麼儲存密碼的。
那「四個隨機單字」的通行短語呢?
對於少數必須用手打的密碼——裝置的登入密碼、密碼管理器的主密碼——通行短語是很好的選擇,因為在同等強度下好記得多。但其餘幾百個存在管理器裡、永遠不會手動輸入的帳號,隨機字串更短也更簡單。這個工具產生的是字串;通行短語需要一份夠好的字典(diceware)才能安全地產生。
「破解所需時間」是真的嗎?
那是算術,不是實測:搜尋空間的一半除以假設的猜測速率。假設值被寫在畫面上是刻意的——一個不說明假設的強度指示器,就只是一條有顏色的長條。而且真實的攻擊通常比暴力破解便宜得多,多半是拿別的網站外洩的密碼直接來試,所以「有沒有重複使用」比「有多長」更要緊。