选择语言

一种基于密码学伪随机数生成器的安全密码生成器

本文提出了一种使用基于HMAC、CMAC和KMAC的伪随机数生成器的安全密码生成器,并通过NIST SP 800-90B熵测试和IID测试进行了验证。
computationalcoin.com | PDF Size: 0.5 MB
评分: 4.5/5
您的评分
您已经为此文档评过分
PDF文档封面 - 一种基于密码学伪随机数生成器的安全密码生成器

目录

1. 引言

网站账户和密码泄露事件屡见不鲜,凸显了信息安全和密码安全的至关重要性。虽然网站漏洞是一个因素,但密码本身的内在安全性才是关键。常见的不安全密码实践包括基于关键词的密码、使用流行短语、包含个人信息以及密码复用。人工智能和大语言模型的兴起进一步增强了攻击者猜测密码的能力。

本研究提出了一种基于密码学安全伪随机数生成器的安全密码生成器。它使用基于密钥的哈希消息认证码、基于密码的消息认证码或KECCAK消息认证码构建伪随机数生成器,以生成安全的随机数,进而用于生成密码。生成的随机性通过熵测试和独立同分布测试,依据NIST SP 800-90B标准进行验证。

2. 文献综述

2.1. 基于线性同余生成器的伪随机数生成器

线性同余生成器在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. 安全伪随机数生成器

密码学伪随机数生成器的设计目标是即使部分输出已知,其后续输出也是不可预测的。

2.2.1. 基于HMAC的伪随机数生成器

其安全性依赖于哈希函数(如SHA2、SHA3)的单向性。对于密钥$k$和消息$M$,HMAC的计算公式为:$r_{hmac}(k, M) = h((k \oplus opad) \ || \ h((k \oplus ipad) \ || \ M))$。计数器模式用于生成多个数据块,以获得更长的输出。

2.2.2. 基于CMAC的伪随机数生成器

其安全性基于高级加密标准。它在密码块链接模式下运行。处理填充后的消息得到的最终密文块作为MAC/输出:$r_{cmac}(k, Split(M))$。

2.2.3. 基于KMAC的伪随机数生成器

基于SHA-3哈希函数,KMAC提供可变长度的输出,被认为是后量子密码学的有力候选方案。

2.3. 随机性验证方法

NIST SP 800-90B提供了评估熵源的方法。熵估计量化了不可预测性(最小熵)。IID测试检查数据是否独立同分布,这是许多统计测试的关键假设。通过这些测试可以验证随机源的质量。

3. 提出的安全密码生成器

系统架构包括:1) 用户可选择提供待哈希消息。2) 一个密码学伪随机数生成器(基于HMAC/CMAC/KMAC)使用该消息(和密钥)生成高熵比特流。3) 该比特流被映射到用户定义的、指定长度的字符集(例如,字母数字+符号)上,以生成最终密码。通过比较密码的搜索空间与AES-128和AES-256的密钥强度来分析其安全性。

4. 实验与结果

4.1. 实验设置

实现了三种伪随机数生成器类型。生成了大量随机比特序列用于测试。

4.2. 随机性验证结果

关键结果:所有三种提出的伪随机数生成器构造均成功通过了NIST SP 800-90B的熵验证和IID测试。这从经验上证明了生成的数字具有足够的随机性和统计质量,可用于密码学密码生成。

4.3. 性能分析

评估了计算效率。虽然所有方法都可行,但KMAC和HMAC在不同平台上可能表现出不同的性能特征,而基于AES的CMAC在具有AES加速硬件的平台上通常更快。

5. 结论与未来工作

本文提出了一个基于密码学伪随机数生成器的安全密码生成器框架。生成的随机性使用NIST标准进行了验证,确认了其适用性。未来的工作包括将生成器集成到浏览器扩展或密码管理器中,探索其在生成密码之外的加密密钥方面的应用,以及测试其抵御新兴的基于人工智能的猜测攻击的能力。

6. 原创分析与专家评论

核心见解:本文并非发明一种新的密码算法,而是针对一个普遍存在的人为问题——弱密码创建——提供了一个务实的、符合标准的工程解决方案。其核心价值在于正确应用已建立的密码学原语作为NIST推荐的伪随机数生成器,并严格验证其输出——这一步在“自制”密码生成器中常常被忽略。在人工智能能够模拟个人数据模式的时代,将密码随机性的来源从人脑转移到经过验证的密码学算法上,是一项不容置疑的安全升级。

逻辑脉络:逻辑清晰合理,遵循经典的应用密码学模板:1) 识别漏洞(弱的人为生成密码)。2) 选择适当的、经过审查的密码学工具。3) 构建系统(将伪随机数生成器输出映射到字符集)。4) 验证核心组件(伪随机数生成器输出)。这种方法反映了安全系统设计的最佳实践。

优势与不足:
优势:严格的NIST验证是本文最突出的优点,提供了经验可信度。使用KMAC符合后量子准备。可选的用户输入是一个巧妙的功能,允许在需要时确定性地重新生成密码,同时如果伪随机数生成器足够健壮,则不会损害安全性。
不足:本文的主要局限在于其作为概念验证的范围。它缺乏对现实世界实现的分析,例如侧信道攻击、伪随机数生成器的安全密钥管理以及与现有密码策略的集成挑战。此外,虽然它将密码强度与AES进行了比较,但并未深入分析字符集映射过程中的熵损失,这对于短密码来说是一个关键细节。

可操作的见解:对于安全从业者而言,结论很明确:停止让用户或简单的随机函数选择密码。在“忘记密码”重置或初始用户设置时,实现类似本文的后端密码生成器。伪随机数生成器的具体选择可以定制:在常见服务器上为追求速度使用CMAC-AES,为长期量子担忧使用KMAC。至关重要的是,任何采用都必须以与任何加密密钥相同的严格程度来管理伪随机数生成器的种子/密钥。这项工作应被集成到OWASP的认证备忘单等框架中,作为安全密码生成的推荐模式。

7. 技术细节与数学公式

安全性取决于伪随机数生成器的公式。对于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$。伪随机数生成器选择:HMAC-SHA256。
2. 生成随机性: 收集种子$k$的熵。使用待哈希消息 = "serviceX_user123"。在计数器模式下运行基于HMAC的伪随机数生成器,产生约79比特的熵。
3. 映射为密码: 使用79比特流生成12个索引,每个索引从$C$中选择一个字符。
4. 验证检查: 生成的密码熵约为78.5比特,相当于约80比特的对称密钥强度,显著强于任何人为选择的密码。
无代码工作流: 此过程可以封装在服务器端API调用中,将密码学细节完全对最终用户隐藏。

9. 未来应用与方向

1. 密码管理器核心引擎: 将此生成器作为默认密码创建引擎集成到开源和商业密码管理器中。
2. 后量子过渡: 基于KMAC的生成是抗量子密码和令牌生成的现成解决方案。
3. 物联网与嵌入式安全: 轻量级CMAC-AES版本可以在受限环境中生成唯一的设备密码和API密钥。
4. 区块链与Web3: 使用可验证的随机源为加密货币钱包生成安全的随机助记词种子。
5. 标准化: 向IETF或FIDO等标准机构提议将此方法纳入下一代认证协议。

10. 参考文献

  1. M. Bishop,《计算机安全:艺术与科学》,Addison-Wesley,2018年。
  2. NIST,《特别出版物 800-63B:数字身份指南》,2017年。
  3. M. L. Mazurek 等,“为一所大学测量密码可猜测性”,IEEE S&P,2013年。
  4. B. Ur 等,“你的密码表现如何?强度计对密码创建的影响”,USENIX Security,2012年。
  5. NIST,《特别出版物 800-108:使用伪随机函数进行密钥衍生的建议》,Rev. 1,2022年。
  6. NIST,《特别出版物 800-90B:用于随机比特生成的熵源建议》,2018年。
  7. J. Kelsey, B. Schneier, D. Wagner,“低熵密钥的安全应用”,ISW,1997年。
  8. FIPS PUB 202,“SHA-3标准:基于置换的哈希和可扩展输出函数”,2015年。
  9. B. Hitaj 等,“PassGAN:一种用于密码猜测的深度学习方法”,NeurIPS Workshop,2017年。
  10. D. J. Bernstein 等,“新型密码学随机数生成器的安全影响”,2020年。