478 / 736H

Cryptographic Entropy

密码学熵:秘密为什么难以猜中

一串又长又复杂的字符,并不一定安全。对钱包来说,更重要的是秘密如何产生,以及别人可能知道多少。

在密码学中,熵描述攻击者猜测一个秘密值时还面临多少不确定性。对于 Bitcoin 钱包,它从生成密钥基础的那一刻就很重要。关键不在字符看起来有多复杂,而在当时实际可能出现多少种结果、各自概率如何,以及攻击者对这个过程知道多少。

假设有人用创建钱包的日期和时间来生成秘密。编码后,结果可能看起来像一长串杂乱字符。但如果攻击者知道大致时间和生成方法,可能只需尝试很小一部分候选值。写得更长,不一定让攻击更难。因此 RFC 4086 区分了不可预测性与表面上的随机。只看一把密钥,无法判断它的熵;还需要知道它是如何生成的。 [3]

位(bit)是记录数据的基本单位,取值为 0 或 1。但位数本身并不说明攻击者还面临多少不确定性。 钱包按照 BIP39 创建 Seed Phrase 时,首先需要随机输入,然后才把输入转换为单词。12 个词对应 128 位输入和 4 位校验和;24 个词对应 256 位输入和 8 位校验和。校验和能帮助发现某些抄写错误,但不增加熵,因为它是从已有输入计算出来的。因此,更长的词列表也无法补救生成不良的随机性。重要的是备份如何产生,而不只是有多少个词。 [4]

钱包不必为每个新字节都做一次新的物理测量;一个字节包含 8 位。它可以使用称为 DRBG 的密码学生成器:一种从秘密初始状态生成更多数值的算法。在设计和使用正确时,不知道内部状态的人很难预测输出。但算法本身仍是确定性的:相同的完整状态和输入,会产生相同的后续结果。所以生成更多字节,并不自动产生更多新的物理熵。初始输入的质量和内部状态的保护都很重要。 [2]

哈希函数根据数据计算一个长度固定的指纹,这个指纹可能看起来很随机。但知道输入的人也能计算出同样的结果。完全已知的输入,不会就此成为秘密。技术术语 conditioning 指一种处理,可以减少偏差,并将已经存在的不确定性集中起来。它不是凭空制造秘密。多个来源的熵也不能自动相加:这些来源可能相互关联,提供的是同一份信息。 [1] [3]

电子噪声源可能发生故障,也可能随环境变化而改变表现。因此,NIST SP 800-90B 要求在启动时和运行中检查原始噪声,也就是在后续处理之前进行检查。这些检查寻找故障迹象,并不证明每次输出都安全。开发者需要了解来源、限制及可能存在的依赖关系。发现故障后,必须通知使用数据的应用;如果故障持续存在,来源必须停止输出。仅仅装有一颗标着“随机数发生器”的芯片还不够。 [1]

如果攻击者获得 DRBG 的内部状态,根据具体设计,他可能预测后续输出。恢复不可预测性,需要足够的新输入,而且这些输入必须是攻击者不知道的;补充这种熵称为 reseeding。只是继续计算,或加入已知时间,都不能保证恢复保护。同时要区分修复生成器和保护已有资金:生成器恢复正常,并不会使已经泄露的密钥失效。 [2]

统计测试可以发现可疑的重复等现象。但它无法确定攻击者是否掌握秘密输入,或者知道预测输出的方法。NIST SP 800-22 明确提醒了这一局限。测试是评估中有用的一环,却不能替代对整个生成器的分析。因此,一个充满看似随机数字的文件,本身并不能证明钱包安全。 [5]

初学者不必手动计算自己钱包的熵。更有用的是寻找有记录、可核查的生成过程:随机性从哪里来,如何处理,怎样应对错误,又如何保护秘密。NIST SP 800-90C 讨论的正是将熵源与 DRBG 组合成完整生成器。但引用某项标准或使用知名芯片,尚不能证明某个钱包版本正确使用了它。关键是实际实现中有证据支持的性质。 [1] [6]

要获得更完整的理解,请将本词条与以下词条结合阅读: Entropy Bit, CSPRNG, Dice Roll Entropy, Private Key. 反向关联还来自: BIP85, Dice Roll Entropy, Entropy Bit, Brute Force Search Space.

DOC · 001NIST SP 800-90B — Entropy source design and health tests规范 DOC · 002NIST SP 800-90A Rev. 1 — Deterministic generation and reseeding规范 DOC · 003RFC 4086 — Unpredictability and source limitations规范 DOC · 004BIP39 — Entropy, checksum and mnemonic encoding规范 DOC · 005NIST SP 800-22 Rev. 1a — Limits of statistical testing文档 DOC · 006NIST SP 800-90C — Complete random bit generator constructions规范
修订日期: 来源优先 · 非投资建议