亂數密碼產生器在做什麼?強度又怎麼看
自己想的密碼(生日、寵物名、123456)容易被「字典攻擊」秒破。隨機產生器避開人類的記憶習慣,用真亂數產出無規律字串,把破解時間從「幾秒」拉到「宇宙年齡」等級。
本工具用瀏覽器原生的 crypto.getRandomValues() 產生亂數,是 W3C 標準的密碼學等級隨機性,比 JavaScript 的 Math.random() (可預測、不適合安全用途)強得多。密碼完全在瀏覽器內產生,不送到任何伺服器。
把這件事交給機器,是因為人類做不到隨機。放著讓我們自己想,產出來的多半是一個單字、字首大寫、結尾加一個數字和一個驚嘆號,而攻擊者很清楚這個形狀。他們不會從頭照順序試每一種組合,而是先跑外洩密碼清單與常見規律,所以把 a 換成 @ 沒有用,破解工具試這種替換已經試了幾十年。
密碼強度怎麼判斷?
學界用「Entropy(資訊熵)」量化,單位 bit,值越高越難暴力破解:
- < 40 bits:弱(幾秒到幾分鐘可破)。常見字典詞、短密碼
- 40-60 bits:一般(線上服務尚可、重要帳號不足)
- 60-90 bits:強(重要帳號 OK)
- > 90 bits:極強(金融、企業 root 帳號標準)
計算公式:log2(字元種類數 ^ 密碼長度)。本工具的符號集是 26 個,四類全開時字元種類是 88 種,16 字元約 103 bits,每秒猜 1 兆次,全部試完也要四千億年左右。預設勾著的「排除相似字」會拿掉 0、O、o、1、l、I 六個,剩 82 種,16 字元約 102 bits。
兩個數字在同一個等級,所以不必為了幾 bits 去挑字元集:長度比複雜度有用得多,20 字元純小寫(約 94 bits)就比 8 字元四類全開(約 52 bits)難破。
哪種帳號用多長、開哪幾類字元
- 電子信箱:長度 20、四類全開。信箱可以重設其他所有帳號的密碼,值得用你最強的一組,再加上兩步驟驗證。
- 網銀、證券下單、支付:長度 16 到 20,英數加符號。台灣不少銀行與券商的密碼欄位有長度上限、或只收特定幾個符號,以該行註冊表單當下的規則為準,用它肯收的最長長度產一組。
- 密碼管理器的主密碼:不要用隨機字串,改用五到六個隨機單字組成的 passphrase,上方類型切到「英文單字」就能產一組。這是少數你必須背下來、天天手打的密碼。
- Wi-Fi:長度 20 以上,只勾大小寫與數字、關掉符號、勾排除相似字。符號在電視、遊戲主機、掃地機器人上非常難打,而 20 個英數字已經約 119 bits,勾排除相似字也還有約 116 bits。
- 遊戲帳號:長度 16、英數即可。主機手把打符號很痛苦,部分啟動器也還在擋符號,用長度把強度買回來。
- 論壇、購物站、一次性註冊:維持預設的 16 全開就好。這類站最常外洩,重點是這組密碼沒有用在別處,而不是它有多長。
- 要唸出來或要用手打的:一定勾「排除相似字」,不要讓對方猜大寫 O 還是數字 0。
實戰教學:產一組密碼,然後好好把它存起來
- 拉長度滑桿:一般帳號 16 起跳,重要帳號拉到 20。
- 四個字元類別維持全開。只有在你已經確定該網站不收符號時,才取消勾選符號。
- 看一下強度那一行,目標是「強」或「極強」,也就是 60 bits 以上。
- 按「複製」,貼進網站的密碼欄,同時在密碼管理器開一筆新紀錄貼進去。先把管理器那筆存檔再送出註冊表單,萬一註冊失敗才不會連密碼一起弄丟。
- 人已經在安全設定頁了,順手把兩步驟驗證一起打開。
密碼管理器是大家最容易跳過、卻讓整套做法成立的那一步:每個帳號都用不同的隨機密碼,只有在別的東西幫你記住的前提下才可行。用哪一家都好,包括瀏覽器或手機內建的那個。
實戰教學:產一組 Wi-Fi 密碼
- 長度拉到 24、取消勾選符號,留下大小寫與數字並勾「排除相似字」。WPA2 與 WPA3 的個人金鑰收 8 到 63 個可列印字元,24 還在範圍內很多。
- 按「複製」,貼進路由器管理頁的無線安全設定。
- 套用之前先把它存進密碼管理器、記下是哪一個網路名稱,因為一套用你自己就會先被踢下線。
- 每台裝置重新連一次。印表機和遊戲主機就是符號要關掉的原因。
- 要給客人用的話,在訪客網路另外產一組,做成 Wi-Fi 的QR Code讓對方相機掃一下就連上,不用把密碼唸出來。
怎麼貼進欄位,貼完怎麼清剪貼簿
最好的做法是根本不要動到剪貼簿:讓密碼管理器的擴充功能或系統的自動填入幫你填,密碼就不會留在其他 App 讀得到的地方。真的需要複製時:
- iPhone、iPad:開了接續互通的話,剪貼簿會同步到你的 Mac,貼完隨手複製一段無關的文字蓋掉它。
- Android:Gboard 會保留剪貼簿記錄,沒釘選的項目大約一小時後移除;想早點刪掉,點鍵盤工具列的剪貼簿圖示手動刪。
- Windows:有開剪貼簿記錄的話,Win+V 會列出你複製過的所有東西,裡面有「全部清除」。
- Mac:剪貼簿只留一筆,複製別的東西就會蓋掉;通用剪貼簿會把它分享給同一個 Apple 帳號的鄰近裝置。
- 所有裝置共通:不要用 LINE、Messenger、email、記事本或工單把密碼傳給別人或傳給自己的另一台裝置。要嘛用密碼管理器的同步與分享功能,要嘛當面輸入。
網站不肯收你這組好密碼的時候
NIST 的 SP 800-63B 要求服務至少接受 64 個字元、接受所有可列印 ASCII 字元(含空白)、不要規定必須含哪幾類字元,而且要允許貼上。沒照做的網站失敗的方式都很好認:
- 長度上限 12、16 或 20:改成它允許的長度重產一組。危險的是靜默截斷,表單收下 30 個字元、資料庫只存 20 個。剛設好的密碼登不進去,就試試看它的前 16 或前 20 個字元。
- 只接受特定符號:把符號那一格取消勾選,改用多四個字元的長度換回來,結果比在受限符號集裡硬湊更強。
- 不接受空白:passphrase 被擋通常就是這個原因,把單字之間改成連字號。
- 禁止貼上:改用密碼管理器擴充功能的自動填入,那條路不經過剪貼簿。真的不行就產一組你打得準的短一點的,也不要回頭用舊密碼。
- 大小寫不分:少見而且不會寫在說明裡。如果大小寫打錯也能登入,就把那個帳號當成低安全性的來管,靠兩步驟驗證補。
- 安全提示問題:用產生器產一組字串當答案、存進密碼管理器,不要填真實資料。母親的姓氏、國小校名、第一台車這些東西在網路上查得到。
限制與隱私
沒有人幫你留底。密碼是本機產生的,不傳輸、不儲存,關掉分頁就找不回來,所以請先存進密碼管理器再關頁面。
Entropy 是上限,不是保證。一組 102 bits 的密碼同時用在三個網站,價值等於其中最弱的那個;而且再高的 entropy 也擋不住你把它打進釣魚頁面。不重複使用、加上第二道驗證,效果都比長度從 20 加到 30 更實在。
取餘數的微小偏差。隨機字元模式的每個字元是拿一個 32 位元亂數對字元集大小取餘數挑出來的。2 的 32 次方不是 82 或 88 的整數倍,所以有幾個字元出現的機率會非常微幅地高一點,差距大約在億分之一的等級,實務上沒有影響。英文單字模式改用拒絕取樣,落在多出來那一截的亂數直接丟掉重抽,每個單字的機率完全相同。
長度上限 64。這個工具的滑桿最長 64 個字元,再長對一般用途也沒有意義;真正需要更長金鑰的場景(例如 API secret),用該平台自己產生的那組。
常見問題
跟瀏覽器內建的密碼建議比,差在哪?
Chrome / Safari / Firefox 內建的密碼建議也是用 crypto random,安全性相同。差別是這裡可以調整字元類型與長度,給有特殊規則的網站用(例如某銀行只允許特定符號)。
密碼長度多少夠?
16 字元起跳。一般線上服務 12 也行,金融 / 工作帳號建議 20+。長度比複雜度更重要——20 字元純小寫(log2(26^20) ≈ 94 bits)比 8 字元四類全開(≈ 52 bits)更難破。
passphrase(多單字密碼)好嗎?
好,適合要背、要親手打的那幾組,例如電腦登入與密碼管理器的主密碼。上方類型切到「英文單字(passphrase)」,工具會從 EFF 公布的 7,776 個英文單字表隨機挑字,每個字約 12.9 bits:4 個字約 52 bits、6 個字約 78 bits、8 個字約 103 bits。字表只有英文版,因為不少網站的密碼欄位只收英數字與符號。交給密碼管理器自動填入的帳號,用隨機字元比較短也比較強。
產出來的密碼會被記錄或上傳嗎?
不會。密碼是瀏覽器用 crypto.getRandomValues() 在你的裝置上產生的,沒有經過任何網路傳輸,也沒有被儲存或記錄。分析只記錄「有人產了一組密碼」以及長度設定,還有複製鈕被按了幾次,密碼本身永遠不在裡面。反過來說,這也代表沒有人幫你留底,關掉分頁就找不回來,請先存進密碼管理器再關頁面。
這組密碼真的夠亂嗎?跟 Math.random 差在哪?
crypto.getRandomValues() 是瀏覽器提供給密碼學用途的亂數來源,種子來自作業系統,外人無法從已經看過的輸出推回下一組;Math.random() 只是速度快的偽亂數,狀態被看穿之後後面的輸出是可以預測的,不適合拿來產密碼。本工具用的是前者。
密碼要多久換一次?
NIST 的數位身分指南建議不要強迫定期更換,因為被逼著換的人會選更糟的密碼,或只是把結尾的數字加一。該換的時機是有證據的時候:服務公告外洩、你把密碼給過別人、或是在可能被側錄的裝置上打過。隨機產生的字串不會出現在外洩密碼清單裡,自己想的密碼則有機會。
「排除相似字」要不要勾?
要手動輸入或唸給別人聽的密碼就勾,例如 Wi-Fi 密碼、要在電視或遊戲主機上打的帳號。勾了之後 0、O、o 與 1、l、I 會被拿掉,少了六個字元,16 位長度的 entropy 大約從 103 bits 降到 102 bits,實際上沒有差別。只會用密碼管理器自動填入、永遠不用人眼辨認的密碼,不勾也無妨。
資料來源
- NIST,Special Publication 800-63B, Digital Identity Guidelines(密碼長度與組成規則、允許貼上、不要強迫定期更換、比對外洩密碼清單)。
- MDN,Crypto.getRandomValues()(本頁用的瀏覽器亂數 API,以及它跟
Math.random()的差別)。 - Electronic Frontier Foundation,EFF's New Wordlists for Random Passphrases(2016;英文單字模式用的是其中的 EFF Large Wordlist,7,776 字,依 EFF 網站的 CC BY 4.0 授權使用,內容未修改)。
- Wi-Fi 金鑰長度來自 WPA2 與 WPA3 個人模式的規格,預先共享金鑰為 8 到 63 個可列印字元。各網站的密碼規則以該服務註冊表單當下的規定為準,會不預告調整。
相關工具
- 雜湊計算
計算文字與檔案的 SHA-1、SHA-256、SHA-384、SHA-512 雜湊值,走瀏覽器原…
- UUID 產生器
產生 UUID v4(隨機)與 UUID v7(含時間戳排序)通用唯一識別碼,支援批量產生與一鍵複製。
- JWT Decode 解碼
JWT 解碼工具:貼上 JSON Web Token 解出 header 與 payload,過…
- 身分證產生器與驗證
台灣身分證產生器與驗證,也支援居留證號(ARC 統一證號):隨機產生測試用合法號碼、驗證並解析縣…
- 台灣測試資料產生器
一鍵產出台灣假姓名、手機、地址、Email 與合法統一編號,一批最多 200 筆。
- Base64 編碼解碼
文字 ↔ Base64 雙向編碼解碼,完整支援 UTF-8 中文與特殊字元。
隱私:密碼在你的瀏覽器裡用 crypto.getRandomValues() 產生,不會送到伺服器、不會被儲存也不會被記錄。分析只記錄產生了一組密碼與長度設定,以及複製鈕被按的次數,密碼本身永遠不包含在內。
