选择语言

一种基于伪随机数生成器(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)$

对于$i \ge 1$,$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. 安全的伪随机数生成器

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$和消息$M$,将其分割成长度为$l_a$的块$M'_i$,在密码块链接模式下操作:

$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核心: 根据NIST SP 800-108,使用三种MAC函数(HMAC、CMAC或KMAC)之一在计数器模式下构建的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指南可以最大限度地降低风险。可选的用户输入是一个巧妙的功能,允许个性化但安全的种子。然而,一个显著的不足是缺乏与最先进的密码生成器(例如在类似上下文中使用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. (作为实用密码策略指导的来源引用)。