目錄
1. 緒論
網站帳號與密碼外洩事件層出不窮,突顯了資訊與密碼安全至關重要。雖然網站漏洞是因素之一,但密碼本身固有的安全性才是關鍵。常見的不安全密碼實務包括:基於關鍵字的密碼、使用流行詞句、納入個人資訊以及重複使用密碼。人工智慧與大型語言模型的興起,更進一步增強了攻擊者猜測密碼的能力。
本研究提出一種基於密碼學安全偽隨機數生成器的安全密碼產生器。它使用金鑰雜湊訊息鑑別碼、基於區塊加密的MAC或KECCAK MAC來建構PRNG,以產生安全的隨機數,進而用於生成密碼。所產生的隨機性將透過熵測試與獨立同分佈測試,依據NIST SP 800-90B標準進行驗證。
2. 文獻探討
2.1. 基於線性同餘生成器的PRNG
線性同餘生成器常用於C和Java等語言,透過遞迴關係產生序列:$f_i(k) \equiv a \times f_{i-1}(k) + c \ (\text{mod} \ m)$,並以$k$作為種子。它們是不安全的,因為其狀態可以被反推:$f_{i-1}(k) \equiv (f_i(k) - c) \times a^{-1} \ (\text{mod} \ m)$,從而暴露種子與整個序列。
2.2. 安全的偽隨機數生成器
密碼學PRNG的設計目標是即使部分輸出已知,也無法預測。
2.2.1. 基於HMAC的PRNG
其安全性依賴於雜湊函數的單向特性。對於金鑰$k$與訊息$M$,HMAC的計算方式為:$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$。為了產生更長的輸出,會使用計數器模式來生成多個區塊。
2.2.2. 基於CMAC的PRNG
其安全性基於進階加密標準。它運作於密文區塊鏈結模式。處理完填充訊息後的最終密文區塊即作為MAC/輸出:$r_{cmac}(k, Split(M))$。
2.2.3. 基於KMAC的PRNG
基於SHA-3雜湊函數,KMAC提供可變長度輸出,被視為後量子密碼學的強力候選方案。
2.3. 隨機性驗證方法
NIST SP 800-90B提供了評估熵源的方法。熵估計量化了不可預測性。IID測試則檢查資料是否為獨立同分佈,這是許多統計測試的關鍵假設。通過這些測試即驗證了隨機源的品質。
3. 提出的安全密碼產生器
系統架構包含:1) 使用者可選擇性提供待雜湊訊息。2) 一個密碼學PRNG使用TBHM來產生高熵位元流。3) 此位元流被映射到使用者定義的字元集上,以產生最終密碼。安全性分析是透過比較密碼的搜尋空間與AES-128和AES-256的金鑰強度來進行。
4. 實驗與結果
4.1. 實驗設置
實作了三種PRNG類型。生成大量隨機位元序列以供測試。
4.2. 隨機性驗證結果
關鍵結果:所有三種提出的PRNG建構均成功通過了NIST SP 800-90B的熵驗證與IID測試。這從實證上證明了所生成的數字具備足夠的隨機性與統計品質,可用於密碼學密碼生成。
4.3. 效能分析
評估了計算效率。雖然所有方法都可行,但KMAC和HMAC在不同平台上可能表現出不同的效能特性,而基於AES的CMAC在具有AES加速功能的硬體上通常更快。
5. 結論與未來工作
本文提出了一個基於密碼學PRNG的安全密碼產生器框架。生成的隨機性使用NIST標準進行了驗證,確認其適用性。未來工作包括將產生器整合到瀏覽器擴充功能或密碼管理器中、探索其在生成密碼以外的密碼學金鑰之應用,以及測試其抵禦新興基於AI的猜測攻擊之韌性。
6. 原創分析與專家評論
核心洞見:本文並非發明新的加密演算法;它是一個務實、符合標準的工程解決方案,旨在解決一個普遍存在的人為問題:弱密碼的創建。其核心價值在於正確應用已確立的密碼學原語作為NIST推薦的PRNG,並嚴格驗證輸出——這一步驟在「DIY」密碼產生器中常被忽略。在AI能夠模擬個人資料模式的時代,將密碼隨機性的來源從人腦轉移到經過驗證的密碼學演算法,是一項不容妥協的安全升級。
邏輯流程:邏輯清晰合理,遵循經典的應用密碼學範本:1) 識別弱點。2) 選擇適當、經過審查的密碼學工具。3) 建構系統。4) 驗證核心元件。此方法反映了安全系統設計的最佳實務。
優點與缺點:
優點:嚴謹的NIST驗證是本文最強項,提供了實證可信度。使用KMAC符合後量子準備。可選的使用者輸入是一個巧妙的設計,允許在需要時確定性地重新生成密碼,同時在PRNG穩健的前提下不損害安全性。
缺點:本文的主要限制是其作為概念驗證的範圍。它缺乏對現實世界實作的分析,例如旁路攻擊、PRNG的安全金鑰管理,以及與現有密碼政策的整合挑戰。此外,雖然它將密碼強度與AES進行比較,但並未深入分析字元集映射過程中的熵損失,這對於短密碼是一個關鍵細節。
可行動的見解:對於安全從業者而言,結論很明確:停止讓使用者或簡單的隨機函數選擇密碼。在「忘記密碼」重設或初始使用者設定時,實作像這樣一個後端密碼產生器。PRNG的具體選擇可以因地制宜:在常見伺服器上使用CMAC-AES以追求速度,為長期的量子顧慮則使用KMAC。關鍵在於,任何採用都必須以管理任何密碼學金鑰同樣的嚴謹度來管理PRNG的種子/金鑰。這項工作應被整合到像OWASP的驗證指南中,作為安全密碼生成的推薦模式。
7. 技術細節與數學公式
安全性取決於PRNG的公式。對於HMAC:
$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$
其中$h$是像SHA-256的雜湊函數,$ipad/opad$是常數,$k$是金鑰。對於密碼生成,將計數器$i$納入$M_i$中以生成多個區塊:$M_i = i || \text{Label} || 0x00 || \text{Context} || L$。然後將輸出位元轉換為整數索引,從大小為$N$的字元集$C$中選擇字元:$\text{index} = \text{random_bits} \mod N$。
8. 分析框架與案例範例
情境:一個網路服務需要為新使用者帳戶生成一個12字元的強密碼。
框架應用:
1. 定義參數: 字元集$C$ = 94個可列印ASCII字元。長度$L=12$。PRNG選擇:HMAC-SHA256。
2. 生成隨機性: 收集熵作為種子$k$。使用TBHM = "serviceX_user123"。以計數器模式執行基於HMAC的PRNG,產生約79位元的熵。
3. 映射至密碼: 使用79位元流生成12個索引,每個索引從$C$中選擇一個字元。
4. 驗證檢查: 生成的密碼熵約為78.5位元,相當於約80位元的對稱金鑰,遠比任何人類選擇的密碼更強。
無程式碼工作流程: 此過程可以封裝在伺服器端的API呼叫中,將密碼學完全抽象化,不讓終端使用者接觸。
9. 未來應用與方向
1. 密碼管理器核心引擎: 將此產生器整合為開源與商業密碼管理器中的預設密碼創建引擎。
2. 後量子轉型: 基於KMAC的生成是抵禦量子攻擊的密碼與權杖生成現成解決方案。
3. 物聯網與嵌入式安全: 輕量化的CMAC-AES版本可在資源受限的環境中生成唯一的裝置密碼與API金鑰。
4. 區塊鏈與Web3: 使用可驗證的隨機源為加密貨幣錢包生成安全的隨機助記詞種子。
5. 標準化: 將此方法論提議給標準組織,以納入下一代驗證協定中。
10. 參考文獻
- M. Bishop, "Computer Security: Art and Science", Addison-Wesley, 2018.
- NIST, "Special Publication 800-63B: Digital Identity Guidelines", 2017.
- M. L. Mazurek et al., "Measuring Password Guessability for an Entire University", IEEE S&P, 2013.
- B. Ur et al., "How Does Your Password Measure Up? The Effect of Strength Meters on Password Creation", USENIX Security, 2012.
- NIST, "Special Publication 800-108: Recommendation for Key Derivation Using Pseudorandom Functions", Rev. 1, 2022.
- 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, 1997.
- FIPS PUB 202, "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions", 2015.
- B. Hitaj et al., "PassGAN: A Deep Learning Approach for Password Guessing", NeurIPS Workshop, 2017.
- D. J. Bernstein et al., "The Security Impact of a New Cryptographic Random Number Generator", 2020.