技术支持
Featured

掷骰子能让比特币密钥保持离线状态,但并非所有人都愿意这么做

一个标准的六面骰子每次掷出时,会产生约2.6比特的不可预测信息。这听起来可能不多,但如果重复掷出足够多次,这些掷骰结果就能产生保护比特币钱包所需的原始随机性,而无需依赖软件或电子元件。

分享
掷骰子能让比特币密钥保持离线状态,但并非所有人都愿意这么做

关键要点:

  • 根据克劳德·香农的公式,一次公平的六面骰子掷骰可提供约2.585比特的熵。
  • Coinkite 的文档指出,50 次掷骰结果即可满足比特币钱包种子所需的 128 位标准。
  • 凯文·洛埃克(Kevin Loaec)在《Wizard Sardine》分析中指出,Coldcard工具在主种子之外还存在其他风险。

为何骰子投掷结果如此难以预测

建立信息论的数学家克劳德·香农,曾利用熵来衡量结果的不确定性。对于一个公平的六面骰子,每个面出现的概率均为六分之一。因此,每次掷骰大约产生2.585比特的熵。 抛硬币产生1比特熵,而掷八面骰子则产生3比特熵。

Image of different colored dice近期Coldcard事件的余波在社交媒体上掀起了基于骰子生成种子值的热潮。部分用户现在将其视为必不可少,另一些人则表示这保护了他们的资金,而经验丰富的操作者指出,大多数新手无法忍受这种缓慢且容易出错的设置过程。

关键不在于掷出的骰子在原子层面上表现得是否随机——事实上并非如此。结果虽受物理定律支配,但同时变化的微小变量太多,以至于任何人都无法可靠地计算出结果。 骰子离开手掌时带有特定的速度、角度、高度和自旋,随后撞击桌面,并在每次弹跳中改变方向。

实际上,即使是抛出时的微小变化,也可能产生截然不同的结果。手指位置的细微差异或力度的一点点变化,都会使轨迹发生足够大的改变,以至于仅凭观察运动轨迹无法预测最终点数。结果在理论上可能是确定性的,但对于钱包生成而言,关键在于攻击者无法重现或计算出该结果。

将骰子掷出结果转化为可用数据

计算机无法直接使用骰子结果列表。这些掷骰结果必须先转换为二进制数据,而转换方法至关重要。基本的奇偶转换方法虽然易于理解,但会浪费大量可用的熵。 每次掷骰的结果都被简化为一个比特,尽管骰子实际产生了约 2.6 比特的信息。更高效的方法是收集一长串掷骰结果,并对整个字符串进行处理,通常通过加密哈希函数实现。这样可以保留更多的随机性。

同样的原理也体现在“骰子法”(Diceware)中——这是一种用于生成安全密码短语的传统方法——以及手动生成比特币钱包的过程中。典型的12词钱包恢复短语是由128比特熵构建而成的。 按每次掷骰约产生2.6比特计算,大约50次公平掷骰就能提供足够的原始信息来跨越这一阈值。

Coldcard硬件钱包的制造商Coinkite建议,对于希望获得接近256比特熵值的用户,应进行99次或更多次掷骰。这并不会使钱包的使用难度增加一倍,却能为生成的密钥提供更大的数学安全裕度。

骰子生成种子在现实世界中的测试

Coinkite 披露一个可追溯至 2021 年的固件问题后,这一区别变得尤为重要。在某些 Coldcard 设备上,软件可能会绕过内部硬件随机数生成器,转而使用与非机密设备信息相关的、安全性较低的生成过程。

由于该过程的部分环节可以被重建,攻击者能够缩小可能的钱包密钥范围,而非在整个密钥空间中进行搜索。截至东部时间下午1点,该漏洞已被证实与约1100个地址中估计1,128.6633 BTC被盗的事件有关。

X screenshot
图片来源:X

完全由足够数量的独立骰子掷出结果生成的钱包种子并未通过同一途径泄露。这些用户提供了自己的熵源,因此有缺陷的硬件生成器并未参与生成主要钱包密钥。

然而,该保护机制仅适用于通过骰子生成的种子,并不会自动保护该设备生成的其他所有密钥。

Wizard Sardine 深入剖析细则

安全研究员凯文·洛埃克(Kevin Loaec)于8月1日在Wizard Sardine网站上发布了一份关于Coldcard漏洞的评估报告。他最重要的发现涉及Coldcard中那些独立于主钱包种子之外生成自身密钥的功能。

“我认为必须强调的是,即使用户通过骰子导入或生成种子,只要使用了以下功能,同样存在安全漏洞,”洛埃克在X平台写道,随后展示了一张受影响系统的示意图。

该图表显示,存在缺陷的随机数生成器为Coldcard的多个次要功能提供支持。这些功能包括纸钱包创建、设备克隆、USB会话加密、“Secret Teleport”转账功能、共同签名密钥生成、内置密码生成器以及硬件安全模块(HSM)认证码。

X screenshot
图片来源:安全研究员 Kevin Loaec 发布的 X 帖子。

一个通过99次骰子掷骰生成的主钱包仍位于系统的另一个独立部分。问题在于,其他工具仍可向该有缺陷的生成器请求新的随机数。因此,即使种子安全,也无法保证在同一设备上生成的每个密码、备份、认证码或辅助密钥都具有同等的安全性。

为什么大多数新用户不会掷骰子

骰子生成的熵在操作正确时在技术上是可靠的,但这对大多数新用户来说并非现实的默认选择。掷骰子 50 或 99 次,准确输入每个结果,并确认没有漏掷或重复掷骰,这需要耐心和高度的专注力。 一个数字输入错误就可能彻底改变最终生成的钱包,而大多数设备无法分辨错误是源于掷骰结果异常、输入失误,还是对操作说明的误解。

X screenshot
图片来源:X

该过程还会引入一些在正常运行的硬件生成器中并不存在的风险。用户可能会将掷骰结果记录在纸上、拍照留存、输入到在线工具中,或者将列表放在他人可能发现的地方。 有些人以重复或受控的方式掷骰,使用被做过手脚或损坏的骰子,或者因为觉得过程过于繁琐而提前停止。其数学原理或许严谨,但结果的安全性完全取决于用户的操作流程。

X screenshot
图片来源:X

正因如此,即使在经验丰富的比特币用户中,掷骰子也并非总是被视为最佳方法。它将对设备的信任替换为对手动流程的信任。对于那些懂熵、会验证方法并能将掷骰序列保密的技术谨慎型用户而言,这种权衡或许有其道理。 但对于首次设置钱包的普通用户而言,这不仅增加了犯下不可逆错误的风险,同时也是一个令人烦躁的过程

X screenshot
图片来源:X

同样难以想象,比特币的广泛采用会依赖于人们坐在桌前记录 99 次骰子结果,才能安全地接收资金。安全实践必须能够适应真实的家庭环境、繁忙的日程、各种干扰,以及那些不愿钻研密码学知识的用户。 手动熵生成应作为高级选项保留,但长期目标是开发能够正确生成强随机数、清晰解释操作过程且尽可能减少专业知识要求的软硬件。

Coldcard 用户应检查的事项

受影响的 Coldcard 设备持有者应首先核实设备上安装的固件版本。随后,应审查在使用旧版固件期间曾用过的各项功能,而非仅关注主钱包种子是如何生成的。

任何曾使用受影响设备生成纸钱包、克隆密钥、密码、共同签名密钥或认证码的用户,可能需要立即更换相关材料。安装更新可防止新生成的密钥受到此问题影响,但无法修复先前已生成的内容。

此次事件也为多厂商钱包配置提供了更强有力的实践依据。在多签名方案中,可能需要来自不同制造商的独立硬件设备共同批准一笔交易。这种架构虽不能完全杜绝固件漏洞,但可以防止单个存在缺陷的随机数生成器独自导致整个钱包暴露风险。

本文由人工智能从英文翻译而来。英文原版为权威来源;自动翻译可能存在不准确之处,尤其是在法律和监管术语方面。