Brute Force Search Space 指猜测一个秘密时可以逐一尝试的所有候选项。假设你忘记了自己加密备份的密码:每个猜测都是一个候选项,还需要判断它是否正确解开了备份。等概率的候选项越多,验证成本越高,搜索通常就越困难。但面对真实钱包,首先要弄清楚究竟在寻找什么。
备份密码、授权花费比特币的私钥,以及生成该私钥时使用的生成器输入,并不是同一回事。候选项不同,验证方法也不同。如果一个有缺陷的生成器只会从很小的输入集合中选择,搜索可能比最终密钥的长度所暗示的容易得多。攻击者可以尝试这些有限的输入,而不必遍历数学上所有可能的密钥。因此,计算候选数量之前,先要了解秘密是怎样产生的。 [1] [3]
假设有16种等概率的可能,其中只有一种正确。我们依次检查,不重复尝试。有时很早就找到,有时要等到最后;平均需要检查8.5个候选项。对于一般的候选数量N,公式是 E = (N+1)/2。若速度恒定为每秒2次,平均耗时就是4.25秒。这里的小数表示平均值,并不是某次搜索真的做了半次尝试。这只是帮助理解的模型,不是实测的比特币钱包恢复时间。 [1]
常用词、姓名和容易记住的模式,比随机组合更常见。因此,攻击者可以先尝试更可能的答案。有缺陷的生成器如果更频繁地产生某些结果,也会造成类似问题。此时,前一个例子的平均值就不再适用。最小熵描述最优首次猜测的成功概率,却不能单独说明完整搜索需要多少工作,也不能给出保证成功的时间。只有候选数量而没有概率,是不完整的信息。 [1] [2]
检查一个猜测未必能瞬间完成。PBKDF2是一种根据密码和其他输入派生密钥的函数;重复计算会增加每次尝试的工作量。另一个输入是salt。它通常是用于区分不同派生过程的公开数据:salt不同,就不能简单地重复使用同一张预先算好的结果表。Salt不是另一个秘密密码,也不能代替足够强的输入。要估计速度,必须了解具体函数、参数设置和使用的硬件。 [3]
BIP39把恢复词和可选的passphrase,也就是附加密码,转换为seed:派生密钥所用的秘密起始值。它使用PBKDF2,以HMAC-SHA512作为内部计算函数,执行2048次迭代,也就是重复计算,得到512位seed。这里的salt参数是文本“mnemonic”后面接上passphrase;额外的秘密来自passphrase本身。每个passphrase都会产生有效的seed,所以恢复词的校验和不能确认你输入的是想要的passphrase。恢复自己的钱包时,例如可以使用正确的密钥派生设置,通过已知地址辨认钱包。输出很长,并不会让弱密码变强。 [4]
还有一些数学方法,并不只是依次猜测。在椭圆曲线密码学(ECC)中,可以由私钥计算公钥;反过来寻找私有值,则是称为离散对数问题的困难任务。SEC 2描述了比特币所用secp256k1曲线的参数。因此,仅仅计算所有256位字符串的数量,不能涵盖全部攻击路径。NIST SP 800-57区分密钥长度与安全强度;后者是在特定假设下突破保护所需工作量的估计。存在数学上的方法,并不意味着实际操作很容易。 [5] [6]
更多处理器可以分担相互独立的尝试,但收益还取决于内存和计算组织方式。挖矿hashrate衡量的是挖矿计算量,不是PBKDF2的速度,也不是ECC运算的速度。网站登录与备份副本也有区别。服务可以在登录失败后限制继续访问;但持有加密文件副本的人,可以在自己的设备上离线验证猜测。单靠网站的登录限制,无法阻止这些尝试。 [3] [6]
如果有人拿到完整的seed,就不必搜索庞大的候选空间。恶意软件或处理密钥的程序缺陷,也可能造成同样的后果。因此,安全不止是选择不可预测的秘密,还包括如何保存和使用它。看到所谓破解时间时,要问清假设了哪种攻击、攻击者已经知道什么,以及速度怎样测得。一个巨大的数字本身不能保证设备安全,这个模型也不承诺能恢复丢失的钱包。 [6]
要获得更完整的理解,请将本词条与以下词条结合阅读: Cryptographic Entropy, Entropy Bit, Private Key, Seed Phrase. 反向关联还来自: Entropy Bit, Random Number Generator.