原文:https://blog.lambdaclass.com/bitvm-enabling-efficient-verifiable-computation-in-bitcoin/
作者:LambdaClass
译者:Kurt Pan
比特币是历史上第一个区块链,首次实现了点对点的电子现金系统。由中本聪于2008年提出,它提供了一个优雅且简洁的构造,使全球各地的人们能够在一个无许可、抗审查的网络上存储和交换价值。
所有区块链的一个重要缺点是可扩展性问题,这源于安全性、去中心化和可扩展性之间的“区块链不可能三角”。由于所有节点都必须完成相同的工作量来保障网络安全,其中算力较弱的节点成为瓶颈,从而限制了吞吐量。 零知识证明允许证明者在不泄露除陈述有效性以外任何信息的情况下,说服验证者某个陈述为真。这类证明的验证速度远快于朴素的重新执行。
比特币的智能合约功能仅限于基本类型,如签名、时间锁和哈希锁。此外,比特币的区块大小和栈深度(最多1000个元素)在运行程序时是重大限制。比特币并非为“有状态计算”(即能够跨多笔交易和用户交互持续进行的计算)设计。实现有状态计算的方法有几种,安全假设各不相同:
这些方法已经取得了一些进展,但也遭到了一些批评。例如参见
比特币脚本的表达能力有限,使得任意程序的执行成本极其高昂。例如,执行 Groth16 证明的验证(在消费级笔记本电脑上只需几毫秒即可完成)需要高达 3GB 的存储空间,几乎比目前 4MB 的区块空间高出三个数量级!链上操作成本高昂,不仅会浪费空间,还会浪费资源,因此尽可能将计算转移到链下可以提高效率。在以太坊中,使用零知识证明更为直接,因为验证合约只需部署一次,我们可以随时调用它们。即使验证成本高昂,我们也可以使用递归证明验证(例如 Aligned 的证明聚合模式)将多个证明合并为一个,并在各个组成证明之间分摊成本。
在比特币中,我们必须依赖乐观计算,假设提交证明的一方行为诚实,且不同的参与方可以对其提出质疑,从而强制披露中间步骤,允许提供欺诈证明,以表明提交者在何处作弊。这样,除非受到质疑,否则证明者无需提供大部分步骤。这实际上是 naysayer 证明 的一个例子,可以显著减轻链上负担。
这种构造的一个优点是我们不需要在比特币的共识层上实施改变。
这是首个在比特币之上实现可验证计算的设计。基本思路是,证明者可声称某函数在给定输入上得出某个结果;如果声称错误,验证者可发起争议,提供简短的欺诈证明并惩罚证明者。
该设计仅涉及两方:证明者和验证者。该协议的链下计算和通信开销巨大,限制了可执行的程序类型;后续设计在此基础上进行了改进,允许多方交互,并进一步减少争议时的通信和计算负担。
证明者与验证者将程序编译成二进制电路。任意计算机程序均可表示为 0、1 信号在逻辑门(如 AND、OR、NAND)中流动的电路。BitVM 选择 NAND(非与)门,因为它是通用的——只需足够数量的 NAND 门即可构造任意计算。证明者随后将二进制电路以承诺的方式发往一个 Taproot 地址,在该地址中每个逻辑门对应一个叶子脚本。Taproot 树(或称 taptree)使得 UTXO 仅在满足特定条件时可被花费;这些花费条件即 Merkle 树的各个 tap-leaves。然后,他们预先签署了一系列交易,以支持挑战—响应机制。之后,证明者可以向该地址进行链上存款,从而激活合约,并开始交换链下数据以推动电路状态的改变。若证明者提出虚假声明,验证者即可取走其存款。
证明者如何承诺电路?基本思路是:对于每一个要承诺的比特,证明者准备两个哈希值,hash0 和 hash1。若要将该比特设为 0,就揭示 hash0 的原像;若要设为 1,就揭示 hash1 的原像。若证明者在某个环节被迫同时揭示了这两个原像,验证者便可利用它们来惩罚证明者。比特的值通过将原像哈希后与已有的哈希值进行比对来设置并压入栈中。任何逻辑门都可通过提供两个输入承诺和一个输出承诺来完成承诺操作。不用说,这种方法会极大地膨胀内存开销,因为每个比特都需要两次哈希,且程序必须以布尔电路的形式表示——这未必是最紧凑的表示方式。采用那些涉及诸如 u32 等更高层级的操作,则能得到更为紧凑的表示。
一切设置完毕后,证明者和验证者就可以进行挑战与应答博弈。如果其中一方在某个时间点停止合作(存在时间限制),另一方可以领取押金。证明者树中的叶子节点(代表门)只有知道验证者持有的原像时才能使用。如果证明者尝试更改门中使用的至少一个值,他将泄露未公开哈希值的原像( hash0 或 hash1 ),而验证者将同时拥有这两个原像,并可以惩罚证明者的不当行为。使用二分查找,验证者可以在几轮交互中有效地找到错误。为了减少链上占用空间,证明者和验证者可以在链下交换原像。如果证明者不愿合作,验证者可以强制其在链上披露信息。一个巨大的缺点是,证伪一个计算结果需要近 70 笔交易。
BitVM-2 在安全性和效率方面实现了诸多优势。例如,我们可以解决在设置过程中从 t-of-n 诚实多数到 1-of-n 存在性诚实的桥问题。新的设计支持多验证者(允许无权限挑战),并在此基础上开发了桥,这是 L2 的核心组件。
若比特币支持限制条款,BitVM-2 可以以更简单的方式实现。限制条款是一类拟议的支出约束,允许锁定脚本限制 UTXO 中货币的未来使用方式。为了规避这个问题,在每个 BitVM 实例的设置阶段,一个由 个签名者组成的委员会会创建一个新的密钥对,并使用用于支付 UTXO 的密钥对消息进行预签名,从而确定必须达到 个(共 个)的法定人数。然后,成员们会删除各自的密钥,以确保资金只能以预期的方式使用。只要其中有一个成员遵守此规定,我们就能确保这些约束得到执行。
对该设计的批评主要集中在桥机制:例如,此文表明,只要运营商的抵押率至少为 1:1,桥就是安全的。之后的讨论也考虑不同的选项。安全性需要非常大的流动性,这一事实构成了巨大的威胁,并具有实际意义。这种设计的另一个缺点是,确认和证伪交易的成本仍然很高,而且链上占用空间很大。
BitVM-3 使用混淆电路(garbled circuits) 进一步减少链上数据量。该电路旨在仅在混淆器提供无效的 SNARK 证明时才有条件地泄露秘密,从而充当欺诈证明。混淆电路是一种源自安全两方计算(姚氏协议)的技术,其中一方(混淆器)创建布尔电路的加密版本,并为输入值提供“密钥”,以便另一方(求值者)无需了解中间值即可求值电路——最终输出除外,在某些情况下,最终输出可以作为秘密泄露。在 BitVM3 的背景下,其理念是证明者对 SNARK 验证者电路进行混淆,如果提供的 SNARK 证明无效,则混淆电路的输出将泄露秘密(充当欺诈证明)。
最大的成本在于共享电路,这需要占用 5 TB 的内存。虽然这可能需要几天时间,但这只是一次性的设置成本。确认一笔交易大约需要 56 kB,而证伪一笔交易大约需要 200 字节(相比之下,BitVM-2 中大约需要 2 到 4 MB)。成本的降低使得比特币的证明验证成为可能,尽管我们仍然需要克服电路巨大的通信成本,但幸运的是,随着进一步的优化,这一成本将会降低。
电路混淆依赖于 RSA 。电路中的每条线路都有两个可能的密钥,分别对应 0 或 1。混淆器(证明者)生成这些密钥,只有正确的组合才能产生有意义的输出密钥。根据 BitVM3 文本,混淆器选择一个 RSA 模数 (两个安全素数的乘积)和一些公开指数 。此外还有秘密指数 和 。 和 是模 的逆,即 。使用 陷门 的秘密因子,混淆器计算线路标签值,使得它们之间的关系当且仅当门的逻辑真值表得到满足时成立。对于电路的输出标签 ,根据以下等式计算秘密输入线路 :
由于指数 被选择为较小的数字,因此这些指数运算可以高效地计算。此外,和 只需计算一次,即可在后续计算中重复使用。
混淆器从电路的输出开始,逆向运算,为每个门生成标签 。对于前一个门,其输出作为下一个门的第一个输入,则使用 和 ;如果是另一个输入,则使用 和 。
为了能够处理更通用的门电路(扇出大于 1 ,即有多个输出),混淆器会预先计算并发布一个静态因子 。对于使用标签 的输出线 ,反馈和输入线 ,静态因子由下式给出:
这样 。适配器成为电路公共参数的一部分。
我们还可以多次重新盲化标签(相当于多次重复使用电路)。这对于定义多次使用的较小子电路很有用,例如域运算或椭圆曲线运算。在每一轮重新盲化过程中,混淆器都需要发布一个新的 ,它与前几轮的指数互质 和 的唯一公约数必须是 1)。
如果我们使用不同的子电路进行域操作,则需要添加连接器,将一个子电路的输出连接到另一个子电路的输入。为了避免伸缩攻击,每个子电路都有两个副本(例如,MulA 和 MulB),且禁止连续两次使用同一类型的副本。
验证者可以通过检查每个门的明文来验证混淆电路结构的正确性。因此,混淆器只需在零知识证明下证明电路的输入已被正确地重新盲化,这仅涉及少量的指数运算。如果证明者行为不当,提供了错误的计算结果,电路将揭示输出标签 0(一个短字符串)的哈希值,用作欺诈证明。
BitVM 及其变体是比特币进化史上的一个重要里程碑,表明在比特币之上进行通用计算是可能的(就像以太坊一样),而无需改变比特币的共识机制。其核心思想基于naysayer 证明,这减少了链上占用空间,而链上占用空间是协议中成本最高的部分。由于链上验证证明的成本很高,我们可以让证明者在链上发布声明,而观察者/验证者可以在链下进行核实,并使用简短的链上证明对证明者的声明提出争议。BitVM 有一个大型的挑战与响应博弈,涉及多笔交易并具有很高的最终性。BitVM-2 将响应和挑战博弈减少到仅 3 笔交易,但成本仍然很高。BitVM-3 使用混淆电路进一步将证明和挑战的成本降低到 56 kB 和 200 字节,但代价是需要非常大的设置。显然,在过去的一年里,研究和工程技术一直在不断进步,不久之后,我们就能在比特币上实现信任最小化的桥、L2 层和通用智能合约。在接下来的文章中,我们将更深入地探讨比特币、其 L2 解决方案和其他虚拟机的各个方面。