MSTR Cat

区块链/等级 II · 运作机制/2.1 密码学/课程 5

熵与随机性

无形的基石:为何密钥的强度只取决于生成它的噪声

材料一套骰子(可选,用于观察物理熵)笔记本

好奇

  1. 真正的随机性与人类的直觉有何不同?
  2. Linux 发行版中的软件漏洞是如何导致数千个密钥遭到暴力攻击的?
  3. 为什么一个由十二个单词组成的短语能够表示恰好128比特的熵值以及校验和?

探索

  1. 比特币私钥是一个介于 1 和 n-1 之间的随机整数,其中 n 是 secp256k1 曲线生成点的阶。这一空间大约包含 1.158 × 10^77 个可能的值。为了达到抵御离散对数攻击的 128 位安全目标,私钥必须从该范围内均匀选取。如果选取过程可预测或存在偏差,有效熵就会下降,攻击者所需的工作量也会降至理论最大值的一小部分。
  2. 熵以比特为单位衡量不确定性。12个单词的BIP39助记词编码了128位真正的随机数,外加由SHA-256得出的4位校验和。24个单词的助记词则承载256位。最后一个单词部分充当错误检测器:随机选取的单词很少能构成有效的助记词,因为校验和会验证失败。只要原始熵是真实的,这种结构就能减少难以察觉的抄写错误。
  3. 人为生成的随机性出了名地弱。人们自己选择的短语所含的熵远低于表面看上去的程度,因为人们偏爱熟悉的单词、名言和模式。攻击者利用这一点,对由易记短语派生的密钥(即所谓“脑钱包”)发起字典攻击。Vasek、Bonneau等人(2016年)记录了这类钱包如何屡屡被清空,而且往往在充值后很快就被清空,因为攻击者可以测试海量的可能短语列表。
  4. 软件实现中的缺陷屡次导致密钥生成出现问题。Debian对OpenSSL的修改(该版本在2006年至2008年间被使用,相关问题在DSA-1571中被披露)使得进程ID几乎成为决定密钥差异的唯一因素,因此每种密钥类型和大小仅能有约32,768个可能的密钥。2013年8月,Android系统中的SecureRandom存在缺陷,导致一些比特币钱包重复使用签名随机数,进而泄露私钥并引发盗窃事件。这些案例表明,熵源必须具备加密安全性,并且不能受系统状态的影响。
  5. Unciphered于2023年披露的“Randstorm”表明,BitcoinJS时代的网页钱包(约2011年至2015年)使用了强度不足的随机数生成器,使用户面临密钥恢复攻击。现代硬件钱包在初始化时会从多个内部来源收集熵,并逐个单词地显示生成的助记词。这些单词一旦被抄写下来,就成为控制资金的唯一凭证;丢失它们意味着永久失去访问权限。
  6. 良好的熵来源于操作系统的密码学安全随机数生成器(CSPRNG)、硬件随机数生成器,或掷骰子之类的物理过程(需注意偏差问题)。CSPRNG混合来自系统事件和硬件传感器的噪声,生成不可预测的比特。如果输出值介于1到n−1之间,它就成为有效私钥;否则,生成器会用新的随机数据重试。这一循环确保了在整个曲线阶范围内的均匀分布。

关键事实

  • 比特币私钥的目标安全级别为128位,需要从约1.158 × 10^77个可能的值中均匀选取。
  • 一个由12个单词组成的BIP39短语可编码128比特的熵值以及4比特的校验和;而24个单词则可编码256比特的熵值。
  • Debian OpenSSL漏洞(2006-2008年,DSA-1571)使得每种密钥类型和大小的密钥组合数量降至约32,768种。
  • 2013年8月披露的Android SecureRandom漏洞导致部分钱包重复使用签名随机数,使密钥暴露于被盗风险之中。
  • “Randstorm”(2023年公开)发现了大约在2011年至2015年间基于BitcoinJS技术的网页钱包存在的随机性缺陷。
  • 由易记短语派生的密钥(“脑钱包”)屡屡被攻击者找到并清空。

练习 九、六、三、一

9收集列出9种数字或物理随机性来源。请注明其生成机制(如系统时钟抖动、热噪声),以及每种来源所存在的已知历史漏洞。
6归类按照熵的质量将这9种来源分为6类:密码学安全的CSPRNG、硬件随机数生成器、物理过程、人为生成、有缺陷的软件实现,以及其他。
3提炼将这6类归纳为评估某个随机性来源是否适合生成比特币私钥的3条标准。
1凝结用一句话说明,为什么在曲线阶 n 范围内均匀分布对密钥安全而言是不可妥协的。

事实核查

日期、数字及数据均依据下方列出的已发表资料进行核实。

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS