密碼產生器

弱0 位元
離線破解時間: instantly

    使用 crypto.getRandomValues 在您的瀏覽器中產生。不會傳送、儲存,也不會寫入網址,因此分享連結不會外洩。

    您輸入的內容不會被儲存、記錄或分享。

    在瀏覽器中產生強隨機密碼,並顯示實際的熵值位元數,而非模糊的強度指示。所有內容都不會被傳送或儲存。

    使用方式

    1. 選擇長度與要包含的字元集。
    2. 密碼會立即產生,按「產生」可取得新的一批。
    3. 可單獨複製或複製整份清單。

    長度比複雜度更有效

    熵等於長度乘以字元集大小以 2 為底的對數,這個公式的形狀本身就說明了一切。密碼每多一個字元,搜尋空間就乘上字元集的大小;而多加一整類字元,只會乘一次。16 個字元的純小寫密碼約有 75 位元,使用四種字元的 12 個字元密碼約有 79 位元。多加四個小寫字母,比加入符號更有價值。

    這就是「至少一個大寫、一個數字、一個符號」這類組成規則逐漸失寵的原因。理論上它們只多了幾個位元,實務上卻把人推向同樣幾種容易預測的替換方式:開頭大寫,結尾加數字和驚嘆號。攻擊者會明確地模擬這些模式,所以這些規則讓密碼感覺更安全,實際上卻更容易被猜到。NIST 的 SP 800-63B 指引正是基於這個理由,同時取消了組成規則與強制定期更換,改為建議增加長度,並比對已知外洩的密碼。

    熵衡量的是產生過程,而不是字串

    這是多數強度檢測器搞錯的地方。熵是密碼「如何被選出」的特性,而不是產出字元的特性。從 72 個字元中均勻隨機選出 12 個字元的產生器,不論選出哪 12 個,都有 74 位元,包括剛好拼成一個英文單字的那一組,它和其他組合一樣強。

    反過來也成立,而且更重要。人自己想出來的密碼,熵只有他選擇過程所具備的那麼多,遠低於公式所暗示的數值,因為人們只會從整個空間中極小的一角挑選。只看最終字串的檢測器看不到這一點:它給 Tr0ub4dor&3 高分,攻擊者的字典卻很快就能找到它。

    這裡顯示的數值之所以誠實,是因為產生過程是已知的:從無偏的來源、在你設定的字元集中均勻隨機選取。它不是對字串的猜測,而是對抽取過程的算術。這也表示,一旦你手動修改結果,這個數值就不再成立。

    密碼片語

    當密碼必須用遊戲手把輸入,或透過電話唸給別人時,由隨機單字組成的密碼片語在相同強度下更容易使用。關鍵在於「隨機」:用骰子或產生器從清單中挑選,而不是自己組句。

    標準的 Diceware 清單有 7,776 個詞,所以每個詞約貢獻 12.9 位元。四個詞約 52 位元,單獨使用已經不夠。六個詞約 77 位元,對於必須記住的東西,例如密碼管理器的主密碼或磁碟加密金鑰,是合理的目標。至於保護其他一切的密碼,則用七到八個詞。

    自己想出來的片語完全達不到這個強度。歌詞、名言與合乎文法的句子,在破解字典中都占了大量篇幅,而文法本身就大幅縮小了搜尋空間。

    真正保護帳號的是什麼

    強度是帳號安全中產生器能幫上忙的部分,但通常不是出問題的部分。

    出問題的是重複使用。外洩的帳密會在幾小時內被拿到其他所有服務上嘗試,所以多個網站共用同一組密碼,就等於由最弱的那個網站決定所有網站的安全性;而重複使用的密碼熵再高也沒用,因為攻擊者手上已經有明文。每個網站使用不同密碼是價值最高的單一習慣,而要實際做到,就需要密碼管理器;它還能識破人眼分辨不出的釣魚網頁。

    其次是雙重驗證,理想上應使用通行金鑰或硬體金鑰,而不是可能遭 SIM 卡挾持攔截的簡訊。也值得清楚認識自己努力的極限:如果服務本身儲存密碼的方式很糟,或以明文外洩,你選什麼密碼都沒有差別。這是支持「每站不同密碼加上雙重驗證」的理由,而不是支持「更長密碼」的理由。

    密碼實際上是怎麼被攻破的

    線上猜測,也就是把密碼一個個輸入登入表單,是大多數人想像中的攻擊方式,卻也是效果最差的一種,因為速率限制和帳號鎖定會把嘗試次數壓到每個帳號只有寥寥數次。真正嚴重的事情都發生在離線階段:當雜湊資料庫被竊走之後,攻擊者唯一的限制就只剩下自己的硬體。

    離線破解並不是照字母順序硬跑。它先從歷來外洩事件整理出的字典檔開始,那是數億組人們真正用過的密碼,然後對每一組套用規則:首字母改大寫、結尾加上年份、把 a 換成 @、尾端補一個驚嘆號。人們為了讓密碼「感覺更強」而做的那些變形,正好就是這些規則涵蓋的範圍。

    憑證填充是成本最低的攻擊,連破解都不必。從某次外洩取得的電子郵件與密碼組合,會被拿去對其他每一個服務重播一遍,而成功率高到足以形成一門生意,因為大多數人都在重複使用密碼。這正是為什麼每個網站都用不同的密碼,能在你使用的某個網站管理不善時仍然保護你。

    密碼管理器與 passkey 的實務

    密碼管理器是唯一可行的方式,讓你能為每個網站保有一組獨立且高熵的密碼,而它的第二個好處較少被提起:它不會在一個只是「看起來對」的網域上自動填入。做得夠像的釣魚頁面騙得過人,卻騙不過管理器,因為網址對不上。

    Passkey 更進一步,直接拿掉了共享秘密。金鑰對在裝置上產生,私鑰永遠不離開裝置,網站只保存公鑰,因此網站的資料庫裡沒有任何值得竊取的東西,也沒有可釣的目標,因為簽章與來源網域綁定。目前瀏覽器、作業系統與主要服務的支援都已相當普及。

    轉換的過程是漸進而混亂的。多數帳號在未來幾年仍會保留密碼作為備援,帳號救援流程在兩種模式下都是弱點,而跨生態系的 passkey 同步也還不一致。在有提供的地方啟用 passkey,其餘地方繼續使用強而獨立的密碼,這是務實的做法。

    為團隊或產品制定政策

    NIST 的 SP 800-63B 是現代多數指引所依循的參考文件,而它的建議讓許多人感到意外:不要求字元組成規則、不強制定期更換、最短長度至少八個字元並允許長得多的密碼,以及比對已知外洩密碼清單進行篩檢。

    理由來自行為面。組成規則會把所有人推向同一套可預測的替換;而強制輪替則產生 Password1、Password2、Password3,每一次更動都比上一次更弱,而且被寫在便條紙上。密碼失效在懷疑帳號遭入侵時仍然說得通,但那和照著日曆走是兩回事。

    有三個實作細節比政策文字本身更重要。允許長密碼與所有字元,包括空白和 emoji,因為設定最大長度通常代表密碼的儲存方式有問題。不要默默截斷,bcrypt 會忽略超過 72 位元組的部分。還有,拿新密碼去比對外洩資料庫,Have I Been Pwned 的 range API 就能做到,而且密碼不會以可用的形式離開用戶端。

    攻擊者真正瞄準的是帳號救援

    任何帳號的強度,都等同於回到它最脆弱的那條路徑。如果重設連結寄到一個以好記日期當密碼保護的信箱,那二十個字元的密碼也毫無意義,所以撐起其他一切的那個電子郵件帳號,值得你投入願意維護的最強密碼與最強第二因素。

    安全問題不過是答案公開的密碼。在無法避免使用時,就把它們當成額外的密碼看待:為每一題產生一串隨機字串,存進密碼管理器。

    備援碼是大家會略過、之後又後悔的部分。啟用雙因素驗證時就把它們產生出來,列印下來,或存放在不依賴那台裝有驗證器的裝置的地方,而如果服務允許,再註冊第二個因素。沒有人事先規劃的失敗情境並不是攻擊者,而是手機遺失,而唯一的第二因素正好就在那支手機裡。

    強度計看得到什麼、看不到什麼

    這裡顯示的熵值是誠實的,因為過程是已知的:從你設定的那個字元集中做均勻隨機抽取。這是關於一次抽樣的算術,而不是對一串字串的猜測,而且只要結果被手動編輯過,它就不再成立。

    那些為你自己輸入的密碼評分的強度計,要估計的是困難得多的東西。做得好的,例如 zxcvbn,會搜尋字典檔、鍵盤排列模式、日期和常見的字元替換,再回報用這些手法多快就能找到它,這個數字遠比天真的強度計去數字元種類有用得多。

    這也是為什麼天真的強度計會給 P@ssw0rd1 很高的分數,而字典檔在幾毫秒內就能找到它。如果你在做註冊表單,一個理解模式的強度計加上外洩比對,能給使用者對應真實風險的回饋;而一條只看長度和符號的彩色長條,基本上只是在教他們多加一個驚嘆號。

    常見問題

    亂數來源是什麼?
    來自瀏覽器的密碼學安全亂數來源 crypto.getRandomValues。本工具刻意不使用 Math.random:它是以時鐘狀態初始化的快速偽亂數產生器,只要觀察到足夠的輸出就能預測。
    熵值代表什麼?
    代表真正隨機的位元數,計算方式為長度乘以字元集大小的以2為底對數。每多一個位元,猜測所需的工作量就加倍。相較於只檢查有沒有符號的強度條,這才是誠實的強度衡量。
    需要多少熵值才夠?
    低於約 45 位元對有心的攻擊者而言偏弱。約 70 位元可抵抗針對快速雜湊的離線破解。超過 100 位元則是可預見的硬體都無法暴力破解的範圍。此處的預設設定遠超過 100 位元。
    破解時間是怎麼算的?
    假設以每秒 1000 億次的速度對快速雜湊進行離線攻擊,並計算搜尋一半金鑰空間所需的時間。這是實際的最壞情況;針對線上登入的猜測會慢上好幾個數量級。
    這些密碼會被傳送或記錄嗎?
    不會。密碼在您的瀏覽器中產生,不會傳送、儲存,也不會寫入網址,因此分享連結不會外洩。不過建議使用密碼管理工具保存,而不是留在瀏覽器分頁中。
    為什麼要排除易混淆的字元?
    因為 0 與 O、1 與 l 在唸出來或從紙本輸入時難以分辨。排除後熵值會略為下降,因此啟用時位元數也會同步更新。

    最後更新:

    回報問題

    請提供操作步驟、預期結果及實際結果。請移除機密與個人資料。

    相關工具