目錄
1. 緒論
本研究旨在解決密碼外洩與個人資料暴露風險的持續性問題。雖然網站安全性是一個因素,但密碼本身的固有強度至關重要。常見的弱點包括基於關鍵字、流行短語、使用者資訊的密碼,以及密碼重複使用。人工智慧與大型語言模型的興起,進一步增強了攻擊者猜測密碼的能力。
為此,本文提出一個建構在安全偽隨機數產生器(PRNG)之上的安全密碼產生器。核心PRNG使用如HMAC、CMAC或KMAC等密碼學原語來建構,以產生高品質的隨機數,進而用於建立密碼。系統允許選擇性輸入使用者訊息(待雜湊訊息,TBHM)作為種子。主要貢獻如下:
- 建構基於HMAC、CMAC和KMAC的安全PRNG。
- 分析在不同字元集與長度下所產生密碼的安全性,並將其強度與AES-128和AES-256進行比較。
- 使用NIST SP 800-90B標準,著重於熵值與獨立同分布(IID)測試,對隨機性進行實證驗證。
2. 文獻探討
2.1. 基於線性同餘產生器的偽隨機數產生器
常見的程式語言(C、Java)使用線性同餘產生器(LCG)。給定一個種子 $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)$。此方法不安全,因為其狀態可被逆推:$f_{i-1}(k) \equiv (f_i(k) - c) \times a^{-1} \ (\text{mod} \ m)$,從而暴露種子與整個序列。
2.2. 安全的偽隨機數產生器
安全的PRNG基於NIST SP 800-108 Rev. 1中概述的密碼學原語。
2.2.1. 基於HMAC
其安全性依賴於雜湊函數(例如SHA2、SHA3)的單向特性。對於金鑰 $k$ 和訊息 $M$,HMAC計算方式為:$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$。為了產生長度為 $L$ 的隨機位元流,使用計數器模式:$M_i = i \ || \ \text{KDF} \ || \ 0x00 \ || \ M \ || \ L$,產生輸出 $r_{hmac,i}$。
2.2.2. 基於CMAC
其安全性依賴於CBC模式下的AES區塊加密法。訊息 $M$ 被分割成區塊 $M'_1, M'_2, ...$。迭代過程為:$c_{i+1} = AES(k, c_i \oplus M'_{i+1})$,其中 $c_0 = Pad0(0)$。最終輸出 $r_{cmac}$ 來自經過特定填充(Pad1)後的最後一個密文區塊。
2.2.3. 基於KMAC
利用KECCAK海綿函數(SHA-3的基礎),提供一個靈活且穩健的MAC函數,適合產生確定性的隨機位元。
2.3. 隨機性驗證方法
本文採用NIST SP 800-90B框架,這是驗證熵源的事實標準。它包含兩個關鍵的驗證套件:
- 熵值評估: 估計所產生位元流中的最小熵值,以指示其不可預測性。
- IID(獨立同分布)測試: 一套統計測試(例如卡方檢定、Kolmogorov-Smirnov檢定),用於判斷輸出位元是否統計獨立且遵循相同分布。
3. 提出的安全密碼產生器
所提出的系統架構簡單而強大:
- 輸入/種子: 接受一個可選的使用者提供的TBHM。若提供,則對其進行處理;否則,使用系統產生的安全種子。
- 安全PRNG核心: 將TBHM/種子輸入三種密碼學PRNG建構方式之一(基於HMAC、CMAC或KMAC),以產生密碼學上強健的偽隨機位元序列。
- 密碼建構: 將隨機位元映射到使用者定義或系統定義的字元集(例如字母數字+符號),以產生所需長度的密碼。
安全性分析: 本文主張,所產生密碼的安全性直接取決於PRNG輸出的熵值與字元集的大小。其進行了比較分析,結果顯示,假設PRNG輸出是真正隨機的,則透過此方法從94個字元的集合中產生的16字元密碼,其暴力破解抵抗力可媲美甚至超過AES-128或AES-256金鑰。
4. 實驗結果與分析
實驗驗證是本文的一大優勢。
- 熵值驗證: 所有三種PRNG類型(HMAC-SHA256、CMAC-AES256、KMAC256)產生的隨機序列均通過了NIST SP 800-90B的熵值評估,顯示出接近理想值(每輸出位元1位元)的高最小熵值。
- IID驗證: 這些序列也通過了IID測試套件,確認了位元在統計上是獨立且同分布的,沒有可偵測的模式或偏差。
- 效能: 雖然不是主要焦點,但本文提及了計算效率。HMAC-SHA256和KMAC256顯示出相當的速度,而CMAC-AES256由於區塊加密操作而稍慢,但所有方法都在密碼產生的實用範圍內。
圖表描述(隱含): 長條圖能有效比較三種PRNG方法的最小熵估計值(單位:位元/位元)與理想值1.0。所有長條都將非常接近1.0。第二張圖表可以顯示關鍵IID測試(例如卡方檢定、Kolmogorov-Smirnov檢定)的p值,所有值都遠高於典型的顯著性閾值(例如0.01),表示通過測試。
5. 結論與未來工作
本研究成功展示了一個基於密碼學PRNG的安全密碼產生框架。所提出的方法能產生具有足夠隨機性的密碼,並通過NIST標準的嚴格驗證。未來的工作方向包括:
- 將產生器整合到瀏覽器擴充功能或密碼管理器中。
- 探索以後量子密碼學演算法(例如基於晶格、雜湊)作為PRNG的基礎,以確保長期安全性。
- 在標準密碼學模型下發展形式化的安全性證明。
6. 原創分析與專家見解
核心見解: 本文並非發明新的密碼學原語;而是關於對現有、經過驗證的原語(HMAC、CMAC、KMAC)進行有紀律的應用與驗證,以解決密碼產生這個平凡但關鍵的問題。其真正價值在於彌合理論密碼學與實務安全衛生之間的差距,使用黃金標準的NIST測試套件嚴格證明其輸出符合目的。
邏輯流程: 論證是合理的:1) 標準LCG在密碼學上已被破解。2) 基於密碼學MAC建構的安全PRNG被證明是穩健的。3) 因此,從此類PRNG衍生的密碼繼承了該穩健性。4) 此主張不僅透過理論,更通過嚴格的實證測試(NIST SP 800-90B)得到驗證。這種端到端的驗證是許多「安全密碼產生器」工具所缺乏的。
優點與缺點:
優點: 方法論的嚴謹性值得讚揚。使用NIST SP 800-90B進行驗證,立即提升了其可信度,類似於密碼學演算法透過CAVP(密碼學演算法驗證計畫)進行驗證的方式。與AES金鑰強度的比較,是對安全團隊而言實用且易於理解的度量標準。
缺點: 本文在受控、理想化的環境中進行。它假設初始種子/TBHM具有足夠的熵值——這在真實系統中是一個關鍵且往往是薄弱的環節。「可選的」使用者輸入是一把雙面刃;一個脆弱、可預測的使用者短語(例如「mypassword」)可能會破壞整個密碼學建構,此風險未被充分量化。此外,正如NIST在2023年的回顧文章「後量子密碼學:十年歷程」中所指出的,該領域正朝著抗量子演算法發展。本文的建構雖然對抗古典電腦是安全的,但依賴於SHA2/AES,其長期的抗量子能力尚不確定。
可行動的見解: 對於安全架構師而言,本文提供了一個藍圖。切勿自行設計PRNG。 使用已建立的密碼學建構作為基礎元件。更重要的是,驗證、驗證、再驗證。 將持續的熵值驗證(如NIST測試)整合到你的關鍵隨機數產生系統中,這是像Linux基金會的CCC(共同準則認證)等組織所強調的實務。對於產品開發,立即的收穫是將系統中任何基於LCG的密碼產生,替換為基於KMAC或HMAC-SHA256的產生器,並使用安全來源的種子。前瞻性的步驟是開始使用基於SHA-3/KECCAK的設計(如KMAC)進行原型開發,並關注NIST後量子密碼學標準的演進,以便最終整合。
7. 技術細節與數學公式
核心的數學運算定義於文獻探討(第2節)中。關鍵公式包括:
- LCG(不安全):$f_i(k) \equiv a \times f_{i-1}(k) + c \ (\text{mod} \ m)$
- HMAC:$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$
- PRNG中HMAC的計數器模式:$M_i = i \ || \ \text{KDF} \ || \ 0x00 \ || \ M \ || \ L$
- CMAC(CBC-MAC)迭代:$c_{i+1} = AES(k, c_i \oplus M'_{i+1})$
密碼產生將一個隨機整數 $R$(來自PRNG輸出)映射到一個字元索引:$\text{index} = R \ \text{mod} \ |S|$,其中 $|S|$ 是字元集的大小。
8. 分析框架與案例範例
案例範例:評估舊有系統的密碼產生器
情境: 一個舊有的網路應用程式使用修改過的LCG來產生臨時使用者密碼。需要進行安全稽核。
框架應用:
- 識別PRNG類型: 檢查原始碼。發現:
seed = (a * seed + c) % m;確認其為LCG變體。 - 評估密碼學安全性: LCG是確定性且可逆的。攻擊者取得幾個連續的密碼後,即可解出種子並預測所有未來的密碼,這違反了NIST SP 800-63B關於驗證器隨機性的指南。
- 使用本文方法提出補救措施:
- 種子來源: 將系統時間種子替換為CSPRNG(例如Linux上的
/dev/urandom,Windows上的CryptGenRandom)。 - 核心產生器: 根據本文設計,實作一個基於HMAC-SHA256的PRNG。
- 驗證: 從新產生器產生大量樣本(1,000,000位元),並在部署前執行NIST STS(統計測試套件)或SP 800-90B中的熵值估計器,以驗證隨機性。
- 種子來源: 將系統時間種子替換為CSPRNG(例如Linux上的
此框架將評估從「它看起來隨機嗎?」轉變為「它是否通過標準化的密碼學驗證?」
9. 未來應用與發展方向
這些原則可延伸至使用者密碼之外:
- API金鑰與權杖產生: 在微服務架構中自動產生密碼學隨機的API金鑰與工作階段權杖。
- 安全預設配置: 將此類產生器嵌入物聯網裝置或軟體安裝程式中,以建立獨特、強固的預設管理員密碼,減緩廣泛的預設憑證攻擊。
- 後量子演進: 基於KMAC的建構本質上基於SHA-3(KECCAK),被認為具有抗量子性。此產生器可以成為「密碼學靈活」系統的基礎。未來的工作應整合基於NIST標準化後量子演算法(如CRYSTALS-Kyber或基於雜湊的簽章)的PRNG,因為密碼學社群正為量子計算時代做準備。
- 與密碼管理器及SSO整合: 此產生器可以成為開源密碼管理器或單一登入(SSO)系統的核心元件,提供一個可透明稽核的密碼隨機性來源。
10. 參考文獻
- M. Bishop, “Computer Security: Art and Science”, Addison-Wesley, 2019.
- NIST, “Special Publication 800-63B: Digital Identity Guidelines”, 2020.
- NIST, “Special Publication 800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation”, 2018.
- NIST, “Special Publication 800-108 Rev. 1: Recommendation for Key Derivation Using Pseudorandom Functions”, 2022.
- NIST, “FIPS 202: SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions”, 2015.
- J. Kelsey, B. Schneier, D. Wagner, “Secure Applications of Low-Entropy Keys”, Information Security Workshop, 1997.
- M. Dworkin, “Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication”, NIST SP 800-38B, 2005.
- NIST, “Status Report on the Third Round of the NIST Post-Quantum Cryptography Standardization Process”, 2022. [線上]. 可取得:https://csrc.nist.gov/projects/post-quantum-cryptography
- Linux Foundation, “Common Criteria Certification and Open Source”, 2023. [線上]. 可取得:https://www.linuxfoundation.org/