485 / 691MIX-H

Entropy Mixing

熵混合

Entropy Mixing 将多个输入组合起来,用于生成秘密值。其作用取决于不可预测性、相互依赖关系和具体机制;来源数量和哈希长度本身不能决定安全性。

熵混合将多个输入处理为共同状态或输出。必须区分输入数据、经证实的熵以及后续的确定性扩展。两个接口名称未必代表两个独立来源。

NIST SP 800-90B 指出,相关来源的联合熵可能难以估计。数据包到达时间与磁盘访问时间可能有关联。因此,没有明确记录的模型,不能直接将各自的估计值相加。 [NIST SP 800-90B — Additional noise sources]

RFC 4086 用 XOR 举例说明简单混合。独立且均匀的输入能保持结果均匀,但同一输入的副本会得到 X XOR X = 0。这说明依赖关系的重要性,并非钱包构造教程。 [RFC 4086 — Mixing and randomness requirements]

强混合可以集中已有的不确定性,但已知输入的确定性哈希仍可预测。RFC 4086 区分混合与扩展。输出长度或加入已知常量,都不能证明产生了等量的新熵。 [RFC 4086 — Mixing and randomness requirements]

NIST SP 800-90B 允许把额外噪声输入与主来源拼接后交给认可的调理机制,但在该模式下不为额外输入计入熵。这是特定评估规则,不是说其他来源永远没有帮助。 [NIST SP 800-90B — Additional noise sources]

在 OpenSSL 3.5 中,RAND_add() 混入 num 个字节;randomness 以字节为单位估计熵,范围从零到 num。缓冲区长度本身不能支持该估计。默认生成器通常会从系统来源自动初始化并重新播种。 [OpenSSL 3.5 — RAND_add and FIPS reseeding]

OpenSSL 3.5 文档说明,在 FIPS 模式下,应用数据只是附加输入,不是可信熵源。混入这些数据不算完整重新播种。因此,仅调用 RAND_add() 不能证明已完成这种更新。 [OpenSSL 3.5 — RAND_add and FIPS reseeding]

RFC 5869 区分 HKDF-Extract 与 HKDF-Expand。前者集中输入熵,后者派生所需长度。info 参数将输出绑定到应用上下文;它既不能代替优质初始材料,也不能证明产生了新熵。 [RFC 5869 — HKDF extraction, expansion and independence]

审查应确认输入来源、依赖关系、攻击者能力以及具体机制。RFC 5869 明确讨论独立性和盐值操纵。仅列出来源或测试输出是否看似随机,不能证明某个来源失效后整个构造仍然安全。 [RFC 5869 — HKDF extraction, expansion and independence]

要获得更完整的理解,请将本词条与以下词条结合阅读: Cryptographic Entropy, CSPRNG, True Random Number Generator, Seed Generation. 反向关联还来自: Dice Roll Entropy, True Random Number Generator.

DOC · 001NIST SP 800-90B — Additional noise sources规范 ↗DOC · 002RFC 4086 — Mixing and randomness requirements规范 ↗DOC · 003OpenSSL 3.5 — RAND_add and FIPS reseeding文档 ↗DOC · 004RFC 5869 — HKDF extraction, expansion and independence规范 ↗
来源优先 · 非投资建议