
密碼強度與熵:隨機選擇的數學及 NIST 密碼要求
「必須混合大小寫、數字和符號」仍是常見的密碼規則。不過,2025 年 7 月定稿的 NIST SP 800-63B-4 要求驗證方不要強制這類組合規則,也不要在沒有外洩等證據時要求定期更改密碼。
要理解原因,先要分清兩件事:均勻隨機選擇有多大的搜尋空間,以及服務實際如何驗證、儲存和保護密碼。本文沿用 Shannon 的資訊量概念,並按 NIST 原文區分要求的適用範圍。
日文原文發布: 2026-04-23
熵公式的前提是均勻而獨立的選擇
Shannon 在 1948 年的資訊理論論文建立了資訊量的數學框架。若每個位置都從 N 個候選字元中均勻、獨立選取,長度為 L 的隨機字串有 N 的 L 次方種可能:
熵(bits) = log₂(N^L)
= L × log₂(N)人選擇的密碼通常不符合均勻分佈,不能把同一公式直接當作實際強度。下表只描述指定候選集合的均勻生成模型:
如表格未能完整顯示,可左右捲動。
| 候選集合 | N | log₂(N) | 8 字元的 bits |
|---|---|---|---|
| 數字 | 10 | 3.32 | 26.6 |
| 小寫字母 | 26 | 4.70 | 37.6 |
| 小寫及數字 | 36 | 5.17 | 41.4 |
| 大小寫及數字 | 62 | 5.95 | 47.6 |
| 大小寫、數字及 32 個符號 | 94 | 6.55 | 52.4 |
62 種增加至 94 種,每個既有位置約增加 0.60 bit;26 種增加至 52 種則增加 1 bit。加長一個字元會增加 log₂(N) bit,而擴大集合的效果會乘以原有長度,因此哪種改動增加較多,要按原有 N 和 L 計算。
94 是不含空格的可列印 ASCII 集合大小,未必等於 NanToo 生成器實際使用的符號集合。計算工具的結果時,應按其候選數及排除選項處理。
搜尋空間不能直接換成破解年數
網上攻擊的嘗試速度受服務的速率限制、額外認證、鎖定及監察影響。NIST 要求有效限制失敗嘗試,並沒有為所有服務指定同一個每秒速率。
離線攻擊則取決於外洩資料的儲存格式、salt、密碼雜湊方式、運算成本、記憶體、平行度,以及攻擊者的硬件和預算。不能把普通 SHA-256 測速或加密貨幣 ASIC 的速度直接套用到密碼驗證。
bits 適合比較同一均勻生成模型的候選總數,並不保證某個帳戶的安全,也不是固定破解時間或安全與危險的分界。
儲存端:salt、密碼雜湊及成本參數
驗證方應使用接收密碼、salt 及成本參數的合適密碼雜湊方式,避免明文或單次高速雜湊儲存。NIST 要求這種儲存方式令取得雜湊檔案的攻擊者,每次猜測都付出較高成本。
RFC 9106 定義用於密碼雜湊的記憶體密集函數 Argon2,並要求兼容實作支援 Argon2id。記憶體量、迭代次數和平行度是不同參數,須按部署環境及威脅模型選擇。
名稱正確仍不足夠:參數、實作、salt 的唯一性、遷移安排,以及額外秘密金鑰的分開保管都會影響結果。儲存端較強,也不代表短密碼或重用密碼便安全。
NIST SP 800-63B-4:必須與建議要分清
以下整理美國國家標準與技術研究院(NIST)2025 年最終版對中央驗證密碼的驗證方所列的主要要求,並非完整條文清單。
不得強制的規則
- 沒有外洩等證據時,要求定期更改密碼。
- 強制混合大小寫、數字或符號。
- 選擇密碼時要求使用保安問題等知識型認證。
必須遵守的事項(SHALL)
- 單一因素認證的密碼至少 15 個字元;即使只用作多重因素認證的一部分,也至少需要 8 個字元。
- 以包含常用、可預測或已外洩密碼的拒絕清單(blocklist)比對。
- 容許密碼管理器及自動填寫。
- 有效限制失敗認證嘗試,並以合適的加鹽密碼雜湊方式儲存。
- 若接受 Unicode,計算長度時必須把每個 Unicode 碼位算作一個字元。
建議事項(SHOULD)
容許的最大長度至少達 64 個字元;接受可列印 ASCII、空格及 Unicode;容許貼上。若接受 Unicode,在雜湊前做 NFC 正規化也是建議事項,與按碼位計數的必須要求不同。
拒絕清單比對的是完整密碼,不是要求只因含有某個詞語或部分字串就拒絕。裝置本機解鎖 PIN 等啟用秘密(activation secret)由另一節處理。
驗證方的接受、儲存和限速要求,不能直接等同於字串生成器的長度選項。NIST 是美國的技術指引,本文不把它當作所有香港服務的法律責任。
Diceware 密碼短語也要隨機選詞
Diceware 以骰子或等效的均勻亂數,在固定詞表中選詞:
- 擲六面骰子五次,得到 7,776 種結果之一。
- 按結果在詞表中選出對應詞語。
- 每次獨立重複,直到取得所需詞數。
在上述前提下,每個詞約有 log₂(7776) = 12.9 bit,六個詞約 77.5 bit。自己挑選喜歡的詞或自然句子,不符合均勻獨立的前提,不能使用同一數值。
服務是否接受空格及較長密碼,仍須另外確認。NanToo 密碼生成器從字元集合產生字串,不提供 Diceware 詞表或詞語式密碼短語。
使用密碼管理器時也要檢查復原安排
每個服務使用不同隨機密碼,較難全部記住。選用管理器時,要了解其保管、同步、分享、復原及裝置遺失時的處理方式。
- 不同服務不要重用同一密碼,並使用服務接受的足夠長度。
- 管理器本身的登入憑證及復原程序,須按產品要求安排。
- 另行管理多重認證、復原碼及可信任裝置,評估與密碼庫不同的失效途徑。
使用生成器的複製功能時,結果也會進入裝置剪貼簿。關閉或清除網頁畫面,不代表剪貼簿內容一併被清除。
多重因素認證不一定具備抗網絡釣魚能力
多重因素認證使用兩種或以上不同類型的因素,例如知識、持有物或生物特徵。除了密碼配合持有因素,也可用生物特徵解鎖持有的密碼學認證器,並不一定需要中央驗證的密碼。
- 手動輸入的 TOTP 或其他 OTP 可被假網站即時轉送,因此在 NIST 定義下不具抗網絡釣魚能力。
- WebAuthn 等密碼學認證,須在實作符合相關要求時才可視為具抗網絡釣魚能力。
- 同步、裝置綁定、金鑰能否匯出及復原方式,都會影響可達到的保證級別。
啟用多重因素認證,不會自動處理密碼重用、裝置遭入侵、工作階段被竊或復原途徑被接管。應按服務實際提供的認證方式和復原條件分別評估。
實用檢查清單
- 先查服務的長度及字元要求;單一因素認證以至少 15 個字元為參考。
- 每項服務使用不同密碼,存放於可信任的管理方式。
- 分別檢查生成器的亂數來源、候選映射、候選集合及長度。
- 服務有提供時,分清一般多重認證與具抗網絡釣魚能力的選項。
- 不要把真實密碼送往來源不明的檢查網站;服務端應比對外洩及常用密碼清單。
- 有外洩證據或可疑使用時更改密碼,不以無理由定期更改為前提。
- 不要只數字元種類,也要評估長度、儲存、限速及復原途徑。
重點整理
- 長度 × log₂(候選數) 適用於均勻獨立生成的搜尋空間。
- 同一公式不能直接描述人選密碼的強度或固定破解時間。
- NIST 的單一因素最低 15 字元、多重認證部分最低 8 字元是必須;最大長度至少容許 64 字元是建議。
- 驗證端以拒絕清單、限速及加鹽密碼雜湊配合,而非強制字元混合和無理由定期更改。
- OTP 與具抗網絡釣魚能力的認證並非同一性質。
- 生成、儲存、認證及復原需要各自檢查。
參考資料及來源
編輯說明
本文使用 AI 協助編輯,並在發布前由編輯核對。內容仍可能包含事實、理解或時效上的錯誤;作出重要決定前,請查閱所列的一手資料或官方文件。

