密碼產生器
在瀏覽器裡用平台的密碼學亂數產生器產生強密碼,強度以位元為單位呈現,而不是一根彩色長條。
在你的瀏覽器中執行
如果這組密碼要從螢幕上讀出來再打到別的地方,這個選項就值得開。
這個數字假設密碼是隨機選出來的。好記的密碼實際上比這個數字弱得多,因為真正的攻擊者會先猜單字和常見模式。
長度勝過複雜度:20 個小寫字母的熵,比 8 個混用所有類別的字元還高。
在這個頁面裡產生與計算。沒有任何傳輸、儲存或記錄。
亂數是從哪裡來的
這裡的密碼取自 crypto.getRandomValues,也就是瀏覽器的密碼學安全亂數產生器,絕不使用
Math.random。
這個區別不是學術性的。Math.random 的設計目標是快,而且是可預測的:只要看到夠多輸出,就能
還原出它接下來的值。用它做的密碼產生器會產出看起來隨機、實際上不是的密碼,這比沒有產生器
更糟,因為它讓人有安全感。
字元的選取也採用拒絕取樣,而不是取餘數。用 byte % 62 會把 256 個值不平均地對應到 62 個
字元,讓前八個字元出現的機率高出大約 8%。這個偏差不大、完全可以避免,而且避免它不花任何代價
——所以落在可用範圍外的位元組會被丟棄重抽。
用位元表示的熵,不是彩色長條
強度以熵的位元數呈現,那是一個你可以拿來推理的數字:它等於 長度 × log2(字元集大小),
每多一個位元,猜測的工作量就加倍。
一根寫著「強」的長條什麼都沒告訴你。60 位元大致是「對雜湊做得不好的密碼發動離線攻擊」不再 輕鬆的門檻;80 位元很充裕;超過 128 之後這個數字就不太有意義了,因為系統裡其他環節都沒那麼強。
這個數字假設攻擊者知道產生器與字元集,只有「選了哪些字元」是祕密。那是正確的假設——真實世界的 攻擊都是這樣進行的。
長度勝過複雜度
這是這一頁最有用的一件事,也是大多數密碼規則搞反的那一件。
**20 個小寫字母大約是 94 位元。8 個混用所有類別的字元大約是 52 位元。**又長又單純的那個強得 多,而且在手機上好打得多。
要求「一個大寫、一個數字、一個符號」的規則,多半只是把人推向 Password1!——一個字典單字加上
可預測的裝飾,而那會很早就被猜到。如果表單允許你用長密碼,就用長密碼。
易混淆的字元
I、l、1、O、0、o 在許多字型下難以分辨。排除它們會損失一點熵,但能避免抄寫錯誤,
所以當這組密碼要從螢幕上讀出來、再打到別的地方時(例如 Wi-Fi 密碼、設備設定)就值得;如果它
是直接進密碼管理器的,就不必。
沒有任何上傳
在這個頁面裡產生,也不會存到任何地方。關掉分頁就等於徹底清除了。