论文旨在解决一个根本性难题:如何以极低的成本,在比特币上验证复杂的密码学证明

1 概览

1.1 核心问题

比特币的脚本语言功能有限,不像以太坊那样能直接运行复杂的逻辑或验证零知识证明。这极大地限制了其应用潜力。例如,价值上万亿美元的比特币无法以“无需信任”的方式安全地用于其他区块链的金融服务。根本原因在于比特币的区块空间极为宝贵,而执行复杂验证的计算和存储成本过高。

1.2 现有方案的局限

论文分析了两种主流方案:

  1. BitVM2:这是当前在测试网中使用的方法。它采用“乐观挑战”模型,即默认相信对方诚实,只在有争议时才上链挑战。其最大缺点是,一旦需要发起挑战,链上交易费用会异常高昂(单次可超过1.4万美元),因为需要将大量中间数据发布到链上。
  2. BitVM3:该方案将大部分验证工作移到链下,大幅降低了链上成本(约40美元)。然而,它引入了巨大的链下开销:用于验证证明的“混淆电路”本身体积高达42GB,导致其设置和存储成本高得令人望而却步。

1.3 新方案:BABE

BABE 提出了一种全新的比特币证明验证协议,其目标是:

  • 保持 BitVM3 的低链上成本优势
  • 将 BitVM3 的巨量链下开销降低一千倍以上

1.4 BABE 的核心思路

BABE 没有像 BitVM3 那样试图在混淆电路中验证整个证明,而是采用了巧妙的“分而治之”策略,组合了两种密码学技术:

  1. 见证加密:这是一种特殊的加密方式。验证者可以用一个“命题”(例如:“某个零知识证明是有效的”)来加密一条秘密信息(如比特币的赎回密钥)。只有能提供该命题有效“证据”(即有效的零知识证明)的人,才能解密出这条秘密。BABE 利用了一种针对特定数学关系(线性配对关系)的高效见证加密方案。
  2. 处理核心障碍:零知识证明(如Groth16)的验证等式中包含一个“非线性”的计算项,无法直接应用上述高效的线性加密。BABE 的妙招在于,它暂时将证明的一部分视为“已知”,从而将验证等式转化为一个纯粹的线性方程,完美适配了见证加密。
  3. 两方计算与专用混淆电路:然而,被暂时视为“已知”的那部分证明,在协议设置阶段其实是未知的。为了解决这个“先有鸡还是先有蛋”的问题,BABE 引入了一个安全的两方计算协议。具体来说,验证者使用一个为单一计算任务(椭圆曲线标量乘法)定制的、极度精简的混淆电路,在证明阶段帮助证明者完成一个关键计算,而不会泄露自己的秘密。
  4. 突破性的性能提升:这是BABE成功的关键。与BitVM3中用于完整验证的庞然大物(42GB)不同,BABE的专用混淆电路仅需计算一次椭圆曲线标量乘法。通过最新的密码学技术(如“可分解随机化编码”),该电路被设计成直接在数据层面操作,避免了将复杂数学运算转换为海量逻辑门的巨大开销。最终,这个专用电路的大小仅为约22MB,相比BitVM3实现了超过1000倍的缩减。

简单来说,BABE 通过密码学“组合技”,将复杂的证明验证问题,拆解成“线性加密”和“一次乘法计算”两个更简单的问题,并分别为后者设计了极度优化的方案。这使得它在保持链上成本极低的同时,彻底解决了链下开销过大的瓶颈,让在比特币上实用、高效地验证零知识证明成为可能。

2 数学原理

2.1 核心目标:在比特币上验证Groth16证明

Groth16是一种高效的零知识证明(zk-SNARK)方案。在比特币上直接验证其证明的核心等式为:

e(π₁, π₂) = e([α]₁, [β]₂) + e(X, [γ]₂) + e(π₃, [δ]₂)

其中 (π₁, π₂, π₃)是证明,X是与公开输入相关的项。验证此等式需要计算双线性配对,这在比特币有限的脚本能力下成本极高。

2.2 密码学基石:针对线性配对关系的可提取见证加密

这是BABE协议的第一个核心数学工具。

  • 原理:存在一种高效的见证加密方案,可以加密一个消息 msg,使得只有知道满足特定线性双线性配对方程 e(w₁, x₁) + e(x₂, w₂) = x₃的见证 (w₁, w₂)的人才能解密。
  • 在BABE中的应用:BABE将Groth16验证等式进行变形,将 π₁视为“公开输入”的一部分,从而得到一个新的、关于见证 (π₂, π₃)线性配对关系e(π₁, π₂) + e(π₃, [δ]₂) = [α]₁[β]₂ + X[γ]₂
  • 加密与解密加密:验证者(Verifier)在设置阶段选择一个随机数 r,并生成密文:ct = (r·π₁, r·[δ]₂, RO(r·Y) + msg) = = (ct₁, ct₂, ct₃),其中 Y=[α]₁[β]₂ + X[γ]₂解密:证明者(Prover)在获得有效证明 (π₂, π₃)后,可计算:msg' = ct₃ - RO( e(ct₁, π₂) + e(π₃, ct₂) )

    其中

    • RO 是 Random Oracle 的缩写,中文常译为随机预言机,常被实现为哈希函数。
    • ct₂ 是验证参数。在解密计算中,ct_2(即 r[δ]₂)与证明元素 π₃进行配对运算 e(π₃, ct₂)。这一项的作用是“凑齐”验证方程。只有当 (π₂, π₃)是有效见证时,e(ct₁, π₂) + e(π₃, ct₂)的结果才会恰好等于 r·Y,从而使得 ct₃ - RO(...)刚好消去掩码,得到 msg
    • ct₃ 是消息载体。它本质上是将真正的秘密 msg(如比特币赎回权限)用 r·Y 掩码后的结果。解密时,Prover 需要从 ct_3中减去计算出的掩码值(即 RO 的输出)才能还原 msg
  • 安全保证:该方案在通用双线性群模型和随机预言机模型下被证明是安全的。这意味着,除非攻击者能提供有效的Groth16证明(从而可提取出有效的原始见证),否则无法获得关于加密消息 msg的任何信息。

2.3 关键挑战与解决方案:处理非线性项与安全两方计算

见证加密方案要求密文的第一部分 r·π₁在设置阶段就已知,但 π₁是证明的一部分,在证明阶段才由证明者产生。这造成了时序矛盾。

  • 解决思路:将 r·π₁的计算延迟到证明阶段,并通过一个安全的两方计算协议来完成,确保验证者的秘密 r不泄露,同时证明者能获得正确的 r·π₁
  • 实现工具:一个高效混淆电路,其功能是:以证明者的 π₁为输入,输出 r·π₁,且不泄露 r。这正是BABE相比BitVM3取得千倍性能提升的关键。

2.4 性能突破:为BN254标量乘法设计的高效混淆电路

这是BABE最核心的数学与工程创新。其目标不再是像BitVM3那样混淆整个复杂的Groth16验证器,而仅仅是混淆一个椭圆曲线标量乘法函数 f(π) = r·π

  • 核心观察(来自论文引用的工作[EL26]):在BN254曲线上,将一个输入点 π与一个固定点 φ相加的操作,其结果(雅可比坐标)可以表示为输入点坐标 (x, y)及其低次单项式 (1, x, y, x², y², xy)线性函数,从而将椭圆曲线加法这一复杂运算“降维”成线性代数运算
  • BABE的优化:将上述线性函数进一步“线性化”,通过将输入扩展为比特分解后的特征向量 ū(π),使得 φ + δ·πδ ∈ {0,1})的雅可比坐标可以写为 $D(δ, φ) × \overline{u}^T(\pi)$ 的矩阵乘法形式,其中 D是仅依赖于 (δ, φ)的矩阵,从而将把椭圆曲线加法变成矩阵乘法

    • u(π):是将椭圆曲线点 π=(x(π),y(π)) 的坐标及其低阶单项式(如 (1, x(π), y(π), x(π)², y(π)², x(π)y(π)))展平成一个长特征向量 $u(π)=(1,x(π),y(π),x(π)^2,y(π)^2,x(π)y(π))$
    • ū(π) ∈ {0, 1}^ℓu(π) 的二进制分解,ℓ = 5n + 1x(π),y(π) 都为 n 比特。有 $u^T(\pi) = G \times \overline{u}^T(\pi)$,其中 G 是一个矩阵,只有对角线有元素,第一个元素是 1,其余为 2

      ū(π) 代表了 Prover 的输入。

    • D(δ, φ):这是一个预计算矩阵。Verifier 根据自己持有的秘密(固定点 φ和选择位 δ)提前算好这个矩阵。矩阵的每一行对应结果点坐标的一个分量。
    • ^T表示转置
  • 可分解随机化编码(DRE)的应用加权群求和DRE:将标量乘法 r·π分解为二进制位 r_i,计算 Σ 2^i * (r_i·π + ρ_i),其中 ρ_i是随机掩码且 Σ 2^i * ρ_i = 0。这允许将每个 r_i·π + ρ_i分别编码,最终由证明者求和即可得到 r·π私有仿射函数DRE:对于每个 i,计算 r_i·π + ρ_i的雅可比坐标等价于计算一个私有矩阵 D(r_i, ρ_i)与公共向量 ū(π)的乘积。DRE可以将这个内积运算编码为每个输入比特独立的份额,最终由证明者聚合解密。
  • 最终构造:混淆电路主要由一个小的布尔电路(用于验证输入点是否在曲线上,并计算其特征向量 ū(π)的比特)和一系列DRE编码表组成。证明者通过输入 π的标签(即Lamport签名)运行布尔电路,获得 ū(π)各比特的标签,再用这些标签解密对应的DRE份额,最后在电路外聚合这些份额得到 r·π这个设计将最耗时的椭圆曲线运算从布尔电路中移除,使得最终混淆电路大小仅为约22MB,相比BitVM3的42GB实现了跨越式提升。

2.5 数学原理总结

BABE的数学原理是一个精妙的“分而治之”策略:

  1. 代数变形:利用Groth16等式的结构,将其拆解为一个适合高效见证加密的线性部分。
  2. 密码学组合:用见证加密处理线性的核心验证,用安全两方计算(混淆电路)处理非线性的前置计算。
  3. 算法优化:为这个特定的两方计算任务(标量乘法)设计极度专用的非布尔混淆方案(基于DRE),避免了通用混淆带来的巨大开销。

这三者环环相扣,最终实现了在保持链上成本极低的前提下,将链下负担降低了三个数量级。

3 BABE 协议

3.1 BABE 协议解锁交易

交易生命周期(三阶段模型)

  1. 锁仓交易(Locking Tx / Setup)

    • 动作:用户(或协议)创建一笔比特币交易,将 BTC 锁定在一个特殊的 P2WSH(Pay to Witness Script Hash) 脚本中。
    • 脚本逻辑:该脚本的解锁条件不是简单的签名,而是一个哈希锁(Hashlock)和一个时间锁(Timelock)。
    • 关键数据:脚本中包含了 Witness Encryption 的密文 ct = (ct₁, ct₂, ct₃)(其中 ct₃包含了加密后的赎回私钥签名参数)。
    • 状态:此时资金被“冻结”,无人能动。
  2. 链下挑战与证明(Off-chain Challenge)

    • 触发:用户想赎回资金,或需要证明某个链下状态(如侧链余额)。
    • 过程

      • 生成证明:用户(Prover)在链下运行 Groth16 证明系统,生成证明 π = (π₁, π₂, π₃),证明自己满足赎回条件(如“我在侧链没有作恶”)。
      • 2PC 计算:用户与 Verifier(或协议)运行 BABE 的 2PC 协议,利用混淆电路和 DRE 计算 r·π₁
      • 解密密钥:用户利用计算结果,结合 ct₂ct₃,通过解密公式计算出解锁密钥 k

        k=RO(e(ct₁, π₂) + e(π₃, ct₂))只有当 π是有效证明时,k才是正确的私钥。

  3. 解锁交易(Unlocking Tx / Sweep)

    • 动作:用户使用上一步解密得到的密钥 k构造签名,并广播解锁交易。
    • 链上验证:比特币网络无需理解 Groth16,它只做两件事: 检查哈希锁:验证提供的原像(即解密出的密钥或签名)是否与锁仓脚本中的哈希值匹配。 检查时间锁:验证是否已过冻结期。
    • 结果:若均通过,BTC 被转移至用户指定地址。

3.2 Bitcoin 交易图

14.png

  • 蓝色箭头/签名:表示交易由 Prover (P) 在 setup 阶段预签名。这意味着 P可以随时执行这些交易(如 Withdraw)。
  • 红色箭头/签名:表示交易由 Verifier (V) 在 setup 段预签名。这意味着 V可以在特定条件下执行这些交易(如 ChallengeAssert、NoWithdraw)。
  • 时间锁(RelTimelock):确保交易有先后顺序。P必须在时间锁过期前完成操作,否则 V可以介入。
  1. 交易节点解析

    • Deposit(存款):这是起点。用户(Prover, P)和守门人(Verifier, V)共同将 1 BTC 存入一个锁定的 UTXO(输出金额为 v)。这确保了资金的安全锁定。
    • Assert(断言):由 P发起,证明自己没有作弊。如果成功,资金流向 Withdraw。
    • ChallengeAssert(挑战断言):由 V发起,用于挑战 P的断言(发现作弊时)。如果发起,资金流向 WronglyChallenged 或 Slash(未画出)。
    • Withdraw(提现):由 P发起,正常赎回资金。
    • NoWithdraw(未提现):由 V发起,如果 P没有在规定时间内提现,资金流向此处。
    • WronglyChallenged(错误挑战):由 P发起,证明 V发起的挑战是恶意的。如果成功,资金流向此处,并可能惩罚 V。
  2. 防止双花的核心机制:菱形节点(Diamond Shape)

    图中间的两个菱形节点(Diamond)是防止双花的关键。它们代表“或(OR)”逻辑,即同一时刻,资金只能流向其中一个分支

    机制分解:

    • 第一个菱形(Assert 之后)分支A(蓝线):指向 Withdraw。这是正常路径,P提现。 分支B(红线):指向 NoWithdraw。这是备用路径,V预签名了这笔交易,如果 P没有在 Withdraw的时间锁内完成操作,V就可以执行 NoWithdraw,防止资金悬空。 防止双花:由于是 OR 分支,资金要么被 P取走,要么被 V回收,不能两者兼得
    • 第二个菱形(ChallengeAssert 之后)分支A(红线):指向 WronglyChallenged。这是 P证明 V挑战错误的路径。 分支B(蓝线):指向 NoWithdraw或其他惩罚路径(未完全画出)。 防止双花:同样是 OR 分支,资金要么被 P证明清白后取回,要么被 V罚没,不能两者兼得
  3. 防止双花的完整流程示例

    假设 P试图进行双花攻击:既想正常提现,又想在提现失败后立即收回资金。

    1. P发起 Assert交易,证明自己没有作弊。
    2. P准备发起 Withdraw交易(蓝线)。
    3. 但同时,P也想发起 NoWithdraw交易(红线),以便在 Withdraw失败时立即回收资金。
    4. 但图中第一个菱形节点阻止了这一点**:WithdrawNoWithdraw是互斥的。一旦 Withdraw被广播并执行,NoWithdraw的输入就失效了;反之亦然。
    5. 如果 V发现 P作弊,可以发起 ChallengeAssert(红线),触发第二个菱形节点,此时 P只能选择 WronglyChallenged或接受罚没,不能同时进行。

这个交易图通过预签名的交易时间锁OR 分支(菱形节点),构建了一个互斥的资金流动网络。任何用户都无法同时执行两条路径,从而有效防止了双花攻击。BABE 协议正是利用这种精巧的交易图设计,实现了无需信任第三方的“保险库”功能。

3.3 算法

  1. Setup(初始化阶段)

    • 目标

      双方在链下生成所有必要的密钥、交易模板、加密数据,为后续 Prove 阶段做准备。

    • Prover (PSetup)

      • 步骤 4-6:生成比特币签名密钥对 (skP,pkP),发送给 Verifier。
      • 步骤 7-10:生成 Lamport 密钥对 (lskP,lpkP),构建交易集合 T 和提现集合 S,并用 skP预签名交易,发送给 Verifier。
      • 步骤 11-12:收到 Verifier 的 presigs_V后,签署并广播 tx_Deposit,锁定资金。
  - Verifier (VSetup)
    - **步骤 16-20**:生成陈述 x,比特币密钥对 (skV,pkV),随机数 msg, r,用 WE 加密 Groth16 验证关系得到 `ct_setup`,生成混淆电路 `ct_GC`和编码密钥 `ek`。
    - **步骤 21-24**:对 `ek`的每个 bit 生成哈希 $epk_j^b$,用于后续 hashlock。
    - **步骤 25**:发送公钥、哈希、密文等给 Prover。
    - **步骤 26-30**:收到 Prover 的信息后,构建交易集,预签名交易,发送给 Prover。

双方通过预签名交易构建了“可执行”的交易图,所有交易在链上等待触发。

  1. Prove(证明阶段)

    • 目标

      Prover 和 Verifier 根据博弈结果,发布相应交易,完成资金转移或惩罚。

    • Prover (PProve)

      • 步骤 1-4:生成 Groth16 证明 π,用 Lamport 私钥签名 π1得到 wAssert,发布 tx_Assert
      • 步骤 6-7:若未被挑战(Δ2时间后),发布 tx_Withdraw,用 skP签名,取回资金。
      • 步骤 9-13:若被挑战(tx_ChallengeAssert),提取输入标签 L,评估混淆电路得到 ct_prove,解密消息 msg,发布 tx_WronglyChallenged,证明自己被错误挑战。
    • Verifier (VProve)

      • 步骤 16-19:收到 tx_Assert后,提取 π1和 Lamport 签名 μ,用 ek编码 π1得到输入标签 L,发布 tx_ChallengeAssert,附带签名和标签。
      • 步骤 21-22:若挑战后 Δ1时间无响应,发布 tx_NoWithdraw,取回资金(惩罚 Prover)。

    Prover 和 Verifier 通过“时间锁 + 挑战机制”实现原子性博弈,确保只有一方能取走资金。

  2. Helper Functions(辅助函数)

    • CREATE_TX_SET

      构建交易骨架(Deposit, Assert, ChallengeAssert, NoWithdraw, WronglyChallenged, Withdraw),返回交易集合 T和提现集合 S。

  • SIGN_TXS_P/ SIGN_TXS_V

    Prover 和 Verifier 分别对自己的交易进行预签名,确保链上可执行。

  • VERIFY_SIGS_P/ VERIFY_SIGS_V

    验证对方预签名的合法性,确保交易未被篡改。

​ 所有交易在链下预签名,链上仅需验证,提高效率与安全性。

4 扩展与优化

4.1 多验证者与多证明者(Multiple Verifiers and Provers)

  • 背景:之前的定义把 BABE 当作“两方协议”(一个证明者 vs 一个验证者),但在实际应用中,我们希望支持更多参与方。
  • 扩展方式多个验证者:可以像 BitVM2-core 那样,只要至少有一个验证者是诚实的,整个协议就能保持“健全性”(即不会接受错误的证明)。这提高了系统的容错能力。 多个证明者:允许多个证明者同时尝试证明自己的陈述,谁第一个生成有效证明,谁就能提走比特币。这引入了竞争机制,激励证明者快速响应。

这种扩展让 BABE 更适合真实世界中的多用户场景,比如多个矿工或验证节点共同参与。

4.2 乐观路径(Optimistic Path)

  • 核心思想:借鉴 BitVM2 的技术,BABE 可以引入“乐观执行路径”——当验证者能独立确认陈述为真时,完全跳过复杂的证明阶段
  • 例子:假设陈述是“Bob 在以太坊上偿还了贷款”。验证者可以直接去以太坊区块链上查最终的还款交易,如果确认无误,就不需要 Prover 提交零知识证明,也不需要发布输入标签,直接在比特币上执行提现。
  • 优势:极大降低了链上成本(on-chain costs),因为大部分计算和数据验证都在链下完成,只有在“争议发生”时才触发完整证明流程。

这种机制让 BABE 在“无争议”场景下几乎免费,只有在“有争议”时才动用昂贵的比特币链上资源,非常经济高效。

4.3 总结

这两个扩展让 BABE 协议从“理论原型”走向“工程可用”:

  • 多参与方支持 → 提升去中心化与鲁棒性;
  • 乐观路径 → 降低成本、提升效率,尤其适合跨链确认等场景。

这正是 BABE 想要实现的目标:在比特币上验证任意复杂证明,同时把成本压到最低