選擇語言

基於偽隨機數產生器(PRNG)的安全密碼產生器

本文提出一種使用HMAC、CMAC或KMAC為基礎之PRNG的安全密碼產生器,並透過NIST SP 800-90B熵值與IID測試進行驗證。
computationalcoin.com | PDF Size: 0.5 MB
評分: 4.5/5
您的評分
您已經為此文檔評過分
PDF文檔封面 - 基於偽隨機數產生器(PRNG)的安全密碼產生器

目錄

1. 緒論

近年來,網站帳號與文字密碼外洩事件持續發生,凸顯了資訊與密碼安全的極端重要性。除了網站本身的漏洞外,密碼本身的安全性至關重要。常見的不安全密碼實務包括:基於關鍵字的密碼、基於流行短語的密碼、基於使用者資訊的密碼,以及密碼重複使用。人工智慧與大型語言模型的快速發展,更進一步增強了攻擊者猜測密碼的能力。

儘管平台採用了如一次性密碼、多因素認證及加密密碼儲存等防禦措施,提升密碼本身的固有安全性仍然至關重要。本研究提出一種基於安全偽隨機數產生器的安全密碼產生器。此PRNG是使用雜湊訊息鑑別碼、區塊加密訊息鑑別碼或KECCAK訊息鑑別碼建構而成,用以產生密碼學安全的隨機數,進而用於產生密碼。

主要貢獻如下:

2. 文獻探討

2.1. 基於線性同餘產生器的偽隨機數產生器

許多程式語言(例如C、Java)實作了基於線性同餘產生器的PRNG。給定一個種子 $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)$,其中 $i \ge 1$

然而,LCG並不安全,因為下一個狀態是從前一個狀態線性推導出來的($f_{i-1}(k) \equiv (f_i(k) - c) \times a^{-1} \ (\text{mod} \ m)$),這使得攻擊者能夠回溯到種子。

2.2. 安全的偽隨機數產生器

2.2.1. 基於雜湊訊息鑑別碼(HMAC)

HMAC的安全性依賴於密碼學雜湊函數(例如SHA-2、SHA-3)的單向特性。對於金鑰 $k$ 與訊息 $M$,HMAC的計算方式為:

$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$

其中 $ipad$ 和 $opad$ 是固定的填充常數,$h$ 是雜湊函數。為了產生長度為 $L$ 的隨機位元流,使用計數器模式,為每個輸出區塊修改訊息:$M_i = i \ || \ \text{KDF} \ || \ 0x00 \ || \ M \ || \ L$,產生 $r_{hmac,i}(k, M_i)$。

2.2.2. 基於區塊加密訊息鑑別碼(CMAC)

CMAC的安全性基於進階加密標準。對於金鑰 $k$ 與被分割成長度為 $l_a$ 的區塊 $M'_i$ 的訊息 $M$,它以密文區塊鏈結模式運作:

$c_{i+1} = AES(k, c_i \oplus M'_{i+1})$,其中 $c_0 = Pad0(0)$。

最終輸出 $r_{cmac}(k, Split(M))$ 是在特定填充(Pad1)後,從最後一個密文區塊衍生而來。

2.2.3. 基於KECCAK訊息鑑別碼(KMAC)

KMAC基於SHA-3的海綿結構,具有靈活性與安全性。它可以類似於HMAC的方式,在計數器模式下用於產生確定性、不可預測的位元流,適用於PRNG目的,如NIST SP 800-108 Rev. 1所述。

2.3. 隨機性驗證方法

本文採用NIST SP 800-90B框架來驗證隨機性,著重於兩個關鍵面向:

3. 基於安全PRNG所提出的安全密碼產生器

所提出的系統架構包含:

  1. 輸入: 一個可選的使用者提供的「待雜湊訊息」以及參數(期望的密碼長度、字元集)。
  2. 安全PRNG核心: 一個使用三種MAC函數(HMAC、CMAC或KMAC)之一,依照NIST SP 800-108在計數器模式下建構的PRNG。此核心接收TBHM(以及一個內部金鑰/種子)來產生密碼學安全的偽隨機位元序列。
  3. 密碼產生: 將隨機位元映射到使用者指定的字元集(例如字母數字+符號),以建立所需長度的密碼。

安全性分析將所產生密碼的有效金鑰空間(基於字元集大小 $C$ 與長度 $L$,提供 $C^L$ 種可能性)與AES-128($2^{128}$)和AES-256($2^{256}$)的暴力破解抵抗力進行比較。例如,一個來自94字元集的16字元密碼提供約 $94^{16} \approx 2^{105}$ 種可能性,這比AES-128弱,但對於許多用途而言仍然足夠強健。

4. 實驗環境與結果

4.1. 實驗設定

實驗旨在使用所提出的基於HMAC、CMAC和KMAC的PRNG產生大量的隨機數序列。這些序列隨後接受NIST SP 800-90B測試套件的檢驗。

4.2. 隨機性驗證結果

關鍵發現: 實驗結果表明,所有三種提出的PRNG方法(HMAC/SHA-256、CMAC/AES-256、KMAC)所產生的隨機數,均成功通過了NIST SP 800-90B中指定的熵值驗證與IID驗證測試。

意涵: 這證實了輸出序列具有高熵值,且未顯示出可偵測的統計依賴性或偏差,滿足了密碼產生中安全隨機性來源的核心要求。

4.3. 運算效率分析

雖然這不是主要焦點,但本文暗示了權衡取捨。HMAC/SHA-256和KMAC通常在軟體中非常高效。CMAC/AES在特定平台上可能具有硬體加速的優勢。可以根據部署環境的效能限制來調整選擇。

5. 結論與未來工作

本研究成功設計並驗證了一個基於密碼學強健PRNG(HMAC、CMAC、KMAC)的安全密碼產生器框架。所產生的密碼,其安全性源自於這些MAC函數經過驗證的特性,以及底層位元流經過驗證的高隨機性。

未來方向包括:

6. 原創分析與專家見解

核心見解: 陳的研究是針對一個基礎安全問題——弱密碼熵值——所提出的一個務實、符合標準的工程解決方案。它正確地指出,許多密碼外洩的根本原因不僅僅是儲存缺陷,還包括可預測的產生方式。透過將解決方案錨定在NIST核准的建構體(HMAC、CMAC、KMAC)與驗證框架(SP 800-90B)上,這項研究避免了為創新而創新,而是提供了一種可驗證的可靠方法。這種方法反映了像Linux中/dev/urandom介面背後的理念,該介面匯總了來自系統事件的熵值,但此處的重點在於一個確定性、可播種且使用者可影響的過程,適合用於可重現的密碼產生。

邏輯流程: 論證是系統性的:1) 確立問題(弱、可猜測的密碼)。2) 排除常見但有缺陷的解決方案(基於LCG的RNG)。3) 提出具有已證安全性的建構模組(密碼學MAC)。4) 依照現有標準(NIST SP 800-108計數器模式)組裝它們。5) 對照嚴格的基準(NIST SP 800-90B)驗證輸出。這個流程是穩健的,並反映了應用密碼學研究中的最佳實務,類似於像CycleGAN論文中所見的結構化評估,該論文系統性地驗證了跨多個領域和指標的影像轉換品質。

優點與缺陷: 主要優點是其可靠性。使用經過實戰檢驗的密碼學原語和NIST指引,將風險降至最低。可選的使用者輸入(TBHM)是一個巧妙的設計,允許個人化但安全的種子。然而,一個重大缺陷是缺乏與最先進密碼產生器(例如在類似情境下使用Argon2或bcrypt進行金鑰延伸的產生器)的直接、比較性安全分析。與AES暴力破解強度的比較是有用的,但過於簡化。現實世界的攻擊向量通常是對雜湊密碼的離線破解;本文可以透過模擬對抗像Hashcat這類帶有最佳化規則集的工具之抵抗力來強化其論點。此外,雖然NIST測試具有權威性,但並未涵蓋所有密碼學特性;討論PRNG實作對旁通道攻擊的抵抗力將是有價值的。

可執行的見解: 對於安全架構師而言,本文提供了一個現成的藍圖。建議1: 實作基於KMAC的變體。作為SHA-3的衍生品,它被設計成能夠抵抗長度擴展攻擊(這種攻擊理論上在某些情況下會影響基於SHA-2的HMAC),並且代表了一個更具未來性的選擇。建議2: 將此產生器整合為企業密碼保險庫或需要基於政策建立密碼的單一登入系統的核心引擎。其確定性特性(相同的TBHM + 參數 = 相同的密碼)可以成為復原情境中的一個功能。建議3: 用使用者教育來補充此技術解決方案。產生器可以產生一個20字元的隨機字串,但如果使用者選擇一個簡短、易記的TBHM和8字元長度,安全性就會急遽下降。介面必須強制執行合理的預設值(例如,最少12個字元、完整字元集),並視覺化地傳達熵值強度,就像由NCC Group等組織的研究所啟發的密碼強度指示器一樣。

7. 技術細節與數學公式

核心安全性依賴於MAC的偽隨機函數特性。計數器模式下的PRNG可以抽象為:

$R_i = PRF(K, \text{Counter} \ || \ \text{Label} \ || \ 0x00 \ || \ \text{Input} \ || \ L)$

其中 $PRF$ 是 $HMAC$、$CMAC$ 或 $KMAC$,$K$ 是秘密金鑰,$R_i$ 是輸出區塊,串接後形成最終的位元流。

密碼映射: 給定一個從位元流衍生的隨機整數值 $v$ 和一個大小為 $C$ 的字元集,字元索引的選擇方式為:$index = v \mod C$。此過程重複 $L$ 次。

8. 分析框架與概念範例

情境: 一個網路服務需要為新使用者產生一個高強度、隨機的初始密碼。

框架應用:

  1. 參數選擇: 服務選擇KMAC256作為PRF,一個系統衍生的密碼學金鑰 $K_{sys}$(安全儲存),以及一個由使用者唯一、不可變的使用者ID和時間戳記組成的TBHM。
  2. 流程:
    • 輸入:TBHM = "USER12345@2023-10-27T10:30:00Z", 長度 $L$ = 16, 字元集 = 94個可列印ASCII字元。
    • PRNG核心在計數器模式下使用 $K_{sys}$ 處理此輸入,產生128個隨機位元(16字元 * log2(94) ≈ 105位元,因此128位元提供了充足的熵值)。
    • 位元被轉換為像這樣的字串:s9*!Lq9@Pz%2m#X&
  3. 安全性質:
    • 不可預測性: 在沒有 $K_{sys}$ 的情況下,即使TBHM已知,輸出也是不可預測的。
    • 確定性: 同一使用者在完全相同的時刻會得到相同的密碼,有助於除錯。
    • 高熵值: 該密碼具有約105位元的熵值,使得暴力破解不可行。

9. 未來應用與發展方向

10. 參考文獻

  1. M. Bellare, R. Canetti, and H. Krawczyk, "Keying Hash Functions for Message Authentication," CRYPTO 1996.
  2. NIST, "Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication," SP 800-38B.
  3. NIST, "SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions," FIPS PUB 202.
  4. NIST, "Recommendation for the Entropy Sources Used for Random Bit Generation," SP 800-90B.
  5. NIST, "Recommendation for Key Derivation Using Pseudorandom Functions," SP 800-108 Rev. 1.
  6. J. Kelsey, B. Schneier, and N. Ferguson, "Yarrow-160: Notes on the Design and Analysis of the Yarrow Cryptographic Pseudorandom Number Generator," SAC 1999.
  7. J. Zhu, T. Park, P. Isola, A.A. Efros, "Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks," ICCV 2017. (作為嚴謹方法論評估的範例引用)。
  8. NCC Group, "Password Storage Cheat Sheet," OWASP Foundation. (作為實用密碼政策指引的來源引用)。