目錄
1. 緒論
網站帳號與密碼外洩事件層出不窮,突顯了資訊與密碼安全的至關重要性。雖然網站漏洞是一個因素,但密碼本身固有的安全性才是關鍵。常見的不安全密碼實務包括:基於關鍵字的密碼、使用流行詞句、納入個人資訊以及重複使用密碼。人工智慧與大型語言模型的興起,更進一步增強了攻擊者猜測密碼的能力。
本研究提出一種基於密碼學安全偽隨機數生成器(PRNG)的安全密碼生成器。它使用金鑰雜湊訊息鑑別碼(HMAC)、基於加密的訊息鑑別碼(CMAC)或KECCAK訊息鑑別碼(KMAC)來建構PRNG,以產生安全的隨機數,進而用於生成密碼。所生成數字的隨機性,將透過熵與獨立同分布(IID)測試,依據NIST SP 800-90B標準進行驗證。
主要貢獻:
- 建構基於HMAC、CMAC和KMAC的安全PRNG,用於密碼生成。
- 分析不同字元集與長度限制下的密碼安全性,並與AES-128/256進行比較。
- 使用NIST SP 800-90B熵與IID測試進行實證驗證。
2. 文獻探討
2.1. 基於線性同餘生成器的PRNG
線性同餘生成器(LCG)在C和Java等語言中廣泛使用,它透過線性遞迴關係生成數字序列。給定種子 $k$,初始值 $f_0(k)$ 計算為 $f_0(k) \equiv a \oplus k \ (\text{mod} \ m)$。後續數字則由 $f_i(k) \equiv a \times f_{i-1}(k) + c \ (\text{mod} \ m)$ 生成。然而,LCG是不安全的,因為其狀態可以透過 $f_{i-1}(k) \equiv (f_i(k) - c) \times a^{-1} \ (\text{mod} \ m)$ 反推,從而暴露種子與整個序列。
2.2. 安全偽隨機數生成器
為解決LCG的漏洞,密碼學安全的PRNG至關重要。本文聚焦於三種NIST推薦的建構方式。
2.2.1. 基於HMAC的PRNG
其安全性依賴於雜湊函數(例如SHA2、SHA3)的單向特性。對於金鑰 $k$ 和訊息 $M$,HMAC計算為 $r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$,其中 $ipad$ 和 $opad$ 為常數。為生成長位元串,使用計數器模式:$M_i = i \ || \ KDF \ || \ 0x00 \ || \ M \ || \ L$,產生輸出 $r_{hmac,i}$。
2.2.2. 基於CMAC的PRNG
其安全性基於進階加密標準(AES)。使用金鑰 $k$ 的密文區塊鏈結(CBC)模式,將訊息 $M$ 分割為區塊 $M'_1, M'_2, ...$。密文迭代計算如下:$c_{i+1} = AES(k, c_i \oplus M'_{i+1})$,其中 $c_0 = Pad0(0)$。最終輸出 $r_{cmac}$ 從最後一個區塊衍生而來。
2.2.3. 基於KMAC的PRNG
基於SHA-3(KECCAK)雜湊函數,KMAC提供可變長度輸出,被視為後量子密碼學的強力候選者。其建構遵循類似的鑑別雜湊原理,提供高度的安全性保證。
2.3. 隨機性驗證方法
NIST SP 800-90B標準提供了評估隨機數生成器品質的方法論。主要評估兩個關鍵面向:
- 熵驗證: 衡量資料中每個位元的不可預測性或「隨機性」。高熵對於安全密碼至關重要。
- IID(獨立同分布)驗證: 測試生成的序列是否統計獨立且遵循相同分布,確保不存在任何模式或相關性。
3. 提出的安全密碼生成器
系統架構包含兩個主要階段:
- 安全隨機數生成: 使用者可選擇性地提供待雜湊訊息(TBHM)。此訊息與一個密碼學金鑰,由所選的安全PRNG(基於HMAC/CMAC/KMAC)處理,以產生密碼學強度的隨機位元序列。
- 密碼生成: 將隨機位元映射到使用者定義或系統定義的字元集(例如,字母數字加符號)上,並根據指定長度生成最終的文字型密碼。相對於AES-128/256,分析其安全強度,同時考量字元集大小與密碼長度所提供的熵。
4. 實驗與結果
4.1. 實驗設置
進行實驗以驗證PRNG輸出的隨機性。測試套件針對所有三種PRNG類型生成的大量隨機數樣本,實施了NIST SP 800-90B的熵估計與IID測試評估程序。
4.2. 隨機性驗證結果
結果摘要: 所提出的基於HMAC、CMAC和KMAC的PRNG均成功通過了NIST SP 800-90B的熵與IID驗證測試。生成的序列在統計上未顯示出與真實隨機性的顯著偏差,證實了它們適用於密碼學密碼生成。
圖表描述(示意): 一個長條圖,比較三種PRNG類型的最小熵估計值(單位:位元/位元)與NIST通過門檻。三條長條均會顯示在門檻線之上,其中KMAC可能顯示最高值,緊隨其後的是HMAC-SHA3和CMAC-AES256。
4.3. 效能分析
進行了計算效率(例如,每秒生成數)的比較分析。基於CMAC的生成器(使用AES-NI硬體加速)通常顯示最高的吞吐量,其次是基於HMAC的(SHA2/SHA3),而KMAC計算負載較重,但提供了強大的後量子安全特性。
5. 結論與未來工作
本研究成功設計並驗證了一個建基於密碼學安全PRNG(HMAC、CMAC、KMAC)的安全密碼生成器。生成的密碼其安全性源自於這些底層密碼學原語經過驗證的穩健性,以及PRNG輸出經過驗證的高隨機性。未來工作包括:將生成器整合到瀏覽器擴充功能或密碼管理器中、探索其在生成密碼之外的密碼學金鑰之應用,以及對完整系統進行旁路攻擊抵抗性分析。
6. 原創分析與專家評論
核心洞見: 本文是對網路安全中長期存在的弱點——人為選擇密碼——的一種務實、以工程為導向的回應。其核心價值不在於新穎的密碼學,而在於對現有、經過實戰考驗的建構(HMAC、CMAC、KMAC)進行正確應用與嚴格驗證,以應對一個特定且高影響力的使用案例。它正確地指出,將密碼生成從使用者的大腦轉移到一個經過驗證的密碼學過程,是一項根本性的安全升級,類似於金鑰交換從對稱加密轉向非對稱加密的轉變。
邏輯流程: 邏輯合理,遵循經典的應用研究模式:問題定義(弱密碼)→ 對常見解決方案的批判(不安全的LCG)→ 提出穩健的解決方案(基於CSPRNG的生成器)→ 實證驗證(NIST測試)。選擇NIST SP 800-90B作為驗證基準是極佳的,因為它是評估密碼學情境中隨機性的業界標準,能立即為結果帶來可信度。
優點與缺點:
優點: 本文最大的優點是其務實的驗證。許多提案僅停留在設計階段。透過將輸出提交給NIST的嚴格測試,作者提供了具體的安全證據,這對於採用至關重要。納入基於SHA-3的KMAC,顯示了對後量子考量的遠見,正如NIST正在進行的後量子密碼學標準化過程中所指出的。
缺點/遺漏: 分析有些孤立。一個重大缺點是缺乏對種子管理的討論。如果任何PRNG的種子是可預測的或遭洩露,其安全性便會崩潰。系統如何生成、儲存和保護HMAC/CMAC/KMAC的初始密碼學金鑰?這與演算法本身同等重要。此外,雖然將密碼強度與AES比較是有用的,但與現有密碼生成器(如KeePass或1Password中的)及其底層PRNG(例如使用ChaCha20)進行更直接的比較,將能為其競爭優勢提供更好的背景脈絡。
可行動的見解: 對於安全從業者而言,本文可作為藍圖。行動1: 立即棄用任何將LCG或類似非密碼學RNG(如`rand()`)用於安全敏感任務的情況。行動2: 在建置或稽核密碼生成器時,主要檢查清單項目應為:1) 使用CSPRNG(來自NIST SP 800-90A的HMAC_DRBG、CTR_DRBG,或本文的建構),2) 使用如NIST SP 800-90B或Dieharder等套件驗證其輸出,以及3) 從高熵源(例如Linux上的`getrandom()`)實施穩健的種子生成。本文成功地聚焦於第2點,但第1點和第3點同樣是完整圖景中至關重要的部分。
7. 技術細節與數學公式
所提出生成器的安全性取決於底層的密碼學函數。關鍵的數學運算如下:
- HMAC: $r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$
- CMAC(CBC-MAC): $c_{i+1} = E(k, c_i \oplus M_{i+1})$,其中 $E$ 是區塊加密演算法(AES)。
- 密碼熵: 生成密碼的熵 $H$ 為 $H = L \cdot \log_2(N)$,其中 $L$ 是密碼長度,$N$ 是字元集的大小。對於來自94個字元集的16字元密碼,$H \approx 16 \cdot \log_2(94) \approx 105$ 位元。
8. 分析框架與案例範例
案例範例:稽核網路應用程式的密碼重設功能
情境: 一個網路應用程式為點擊「忘記密碼」的使用者生成臨時密碼。
框架應用:
- 識別RNG: 檢查伺服器端程式碼。發現 `Math.random()`(JavaScript)或PHP中的簡單LCG將是嚴重缺失。
- 評估熵源: PRNG如何被播種?它是否使用系統熵(`/dev/urandom`、`CryptGenRandom`)?
- 映射到提出的解決方案: 建議以實作本文設計的模組替換有缺陷的RNG——例如,一個使用`hmac.new`搭配SHA256、並從`os.urandom(32)`獲取種子的Python函數。
- 驗證輸出(實作後): 生成1,000,000個臨時密碼的樣本,轉換為位元串,並執行NIST STS套件(一個相關的測試套件)以確保隨機性。
9. 未來應用與方向
此核心技術的應用不僅限於使用者密碼生成:
- API金鑰與權杖生成: 為微服務架構生成安全、隨機的API金鑰與會話權杖。
- 安全預設憑證: 將此類生成器嵌入物聯網裝置韌體中,為每個裝置創建獨特、強固的預設密碼,以減輕基於常見預設值的廣泛攻擊。
- 密碼學種子生成: 其高品質輸出可用於播種其他密碼學系統,或生成隨機數(nonce)與初始向量(IV)。
- 與密碼管理器整合: 該演算法可整合為開源密碼管理器的核心引擎,提供透明且可稽核的隨機性來源。
- 後量子準備: 進一步探索和優化基於KMAC的生成器,與NIST的FIPS 202和SP 800-185標準對齊,為後量子計算時代做好準備。
10. 參考文獻
- M. Bishop, "Computer Security: Art and Science," Addison-Wesley, 2003.
- NIST, "Special Publication 800-63B: Digital Identity Guidelines," 2017.
- NIST, "Special Publication 800-90A: Recommendation for Random Number Generation Using Deterministic Random Bit Generators," 2015.
- NIST, "Special Publication 800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation," 2018.
- J. Kelsey, B. Schneier, D. Wagner, "Secure Applications of Low-Entropy Keys," ISW '97.
- D. D. Hwang, B. B. Gupta, "A Study of Password Security and Its Implications," JIS, 2019.
- NIST, "FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions," 2015.
- NIST, "SP 800-185: SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash," 2016.
- M. S. Turan, E. Barker, J. Kelsey, "Recommendation for Random Bit Generator (RBG) Constructions," NIST SP 800-90C, 2016.
- P. G. Neumann, "Illustrative Risks to the Public in the Use of Computer Systems and Related Technology," ACM SIGSOFT, 1995.