论文旨在解决一个根本性难题:如何以极低的成本,在比特币上验证复杂的密码学证明。
1 概览
1.1 核心问题
比特币的脚本语言功能有限,不像以太坊那样能直接运行复杂的逻辑或验证零知识证明。这极大地限制了其应用潜力。例如,价值上万亿美元的比特币无法以“无需信任”的方式安全地用于其他区块链的金融服务。根本原因在于比特币的区块空间极为宝贵,而执行复杂验证的计算和存储成本过高。
1.2 现有方案的局限
论文分析了两种主流方案:
- BitVM2:这是当前在测试网中使用的方法。它采用“乐观挑战”模型,即默认相信对方诚实,只在有争议时才上链挑战。其最大缺点是,一旦需要发起挑战,链上交易费用会异常高昂(单次可超过1.4万美元),因为需要将大量中间数据发布到链上。
- BitVM3:该方案将大部分验证工作移到链下,大幅降低了链上成本(约40美元)。然而,它引入了巨大的链下开销:用于验证证明的“混淆电路”本身体积高达42GB,导致其设置和存储成本高得令人望而却步。
1.3 新方案:BABE
BABE 提出了一种全新的比特币证明验证协议,其目标是:
- 保持 BitVM3 的低链上成本优势。
- 将 BitVM3 的巨量链下开销降低一千倍以上。
1.4 BABE 的核心思路
BABE 没有像 BitVM3 那样试图在混淆电路中验证整个证明,而是采用了巧妙的“分而治之”策略,组合了两种密码学技术:
- 见证加密:这是一种特殊的加密方式。验证者可以用一个“命题”(例如:“某个零知识证明是有效的”)来加密一条秘密信息(如比特币的赎回密钥)。只有能提供该命题有效“证据”(即有效的零知识证明)的人,才能解密出这条秘密。BABE 利用了一种针对特定数学关系(线性配对关系)的高效见证加密方案。
- 处理核心障碍:零知识证明(如Groth16)的验证等式中包含一个“非线性”的计算项,无法直接应用上述高效的线性加密。BABE 的妙招在于,它暂时将证明的一部分视为“已知”,从而将验证等式转化为一个纯粹的线性方程,完美适配了见证加密。
- 两方计算与专用混淆电路:然而,被暂时视为“已知”的那部分证明,在协议设置阶段其实是未知的。为了解决这个“先有鸡还是先有蛋”的问题,BABE 引入了一个安全的两方计算协议。具体来说,验证者使用一个为单一计算任务(椭圆曲线标量乘法)定制的、极度精简的混淆电路,在证明阶段帮助证明者完成一个关键计算,而不会泄露自己的秘密。
- 突破性的性能提升:这是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 + 1,x(π),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的数学原理是一个精妙的“分而治之”策略:
- 代数变形:利用Groth16等式的结构,将其拆解为一个适合高效见证加密的线性部分。
- 密码学组合:用见证加密处理线性的核心验证,用安全两方计算(混淆电路)处理非线性的前置计算。
- 算法优化:为这个特定的两方计算任务(标量乘法)设计极度专用的非布尔混淆方案(基于DRE),避免了通用混淆带来的巨大开销。
这三者环环相扣,最终实现了在保持链上成本极低的前提下,将链下负担降低了三个数量级。
3 BABE 协议
3.1 BABE 协议解锁交易
交易生命周期(三阶段模型)
锁仓交易(Locking Tx / Setup)
- 动作:用户(或协议)创建一笔比特币交易,将 BTC 锁定在一个特殊的 P2WSH(Pay to Witness Script Hash) 脚本中。
- 脚本逻辑:该脚本的解锁条件不是简单的签名,而是一个哈希锁(Hashlock)和一个时间锁(Timelock)。
- 关键数据:脚本中包含了 Witness Encryption 的密文
ct = (ct₁, ct₂, ct₃)(其中ct₃包含了加密后的赎回私钥或签名参数)。 - 状态:此时资金被“冻结”,无人能动。
链下挑战与证明(Off-chain Challenge)
- 触发:用户想赎回资金,或需要证明某个链下状态(如侧链余额)。
过程:
- 生成证明:用户(Prover)在链下运行 Groth16 证明系统,生成证明
π = (π₁, π₂, π₃),证明自己满足赎回条件(如“我在侧链没有作恶”)。 - 2PC 计算:用户与 Verifier(或协议)运行 BABE 的 2PC 协议,利用混淆电路和 DRE 计算
r·π₁。 解密密钥:用户利用计算结果,结合
ct₂和ct₃,通过解密公式计算出解锁密钥k:k=RO(e(ct₁, π₂) + e(π₃, ct₂))只有当π是有效证明时,k才是正确的私钥。
- 生成证明:用户(Prover)在链下运行 Groth16 证明系统,生成证明
解锁交易(Unlocking Tx / Sweep)
- 动作:用户使用上一步解密得到的密钥
k构造签名,并广播解锁交易。 - 链上验证:比特币网络无需理解 Groth16,它只做两件事: 检查哈希锁:验证提供的原像(即解密出的密钥或签名)是否与锁仓脚本中的哈希值匹配。 检查时间锁:验证是否已过冻结期。
- 结果:若均通过,BTC 被转移至用户指定地址。
- 动作:用户使用上一步解密得到的密钥
3.2 Bitcoin 交易图

- 蓝色箭头/签名:表示交易由 Prover (P) 在 setup 阶段预签名。这意味着 P可以随时执行这些交易(如 Withdraw)。
- 红色箭头/签名:表示交易由 Verifier (V) 在 setup 段预签名。这意味着 V可以在特定条件下执行这些交易(如 ChallengeAssert、NoWithdraw)。
- 时间锁(RelTimelock):确保交易有先后顺序。P必须在时间锁过期前完成操作,否则 V可以介入。
交易节点解析
- 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。
防止双花的核心机制:菱形节点(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罚没,不能两者兼得。
- 第一个菱形(Assert 之后): 分支A(蓝线):指向
防止双花的完整流程示例
假设 P试图进行双花攻击:既想正常提现,又想在提现失败后立即收回资金。
- P发起
Assert交易,证明自己没有作弊。 - P准备发起
Withdraw交易(蓝线)。 - 但同时,P也想发起
NoWithdraw交易(红线),以便在Withdraw失败时立即回收资金。 - 但图中第一个菱形节点阻止了这一点**:
Withdraw和NoWithdraw是互斥的。一旦Withdraw被广播并执行,NoWithdraw的输入就失效了;反之亦然。 - 如果 V发现 P作弊,可以发起
ChallengeAssert(红线),触发第二个菱形节点,此时 P只能选择WronglyChallenged或接受罚没,不能同时进行。
- P发起
这个交易图通过预签名的交易、时间锁和OR 分支(菱形节点),构建了一个互斥的资金流动网络。任何用户都无法同时执行两条路径,从而有效防止了双花攻击。BABE 协议正是利用这种精巧的交易图设计,实现了无需信任第三方的“保险库”功能。
3.3 算法
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。
双方通过预签名交易构建了“可执行”的交易图,所有交易在链上等待触发。
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,证明自己被错误挑战。
- 步骤 1-4:生成 Groth16 证明 π,用 Lamport 私钥签名 π1得到 wAssert,发布
Verifier (VProve)
- 步骤 16-19:收到
tx_Assert后,提取 π1和 Lamport 签名 μ,用ek编码 π1得到输入标签 L,发布tx_ChallengeAssert,附带签名和标签。 - 步骤 21-22:若挑战后 Δ1时间无响应,发布
tx_NoWithdraw,取回资金(惩罚 Prover)。
- 步骤 16-19:收到
Prover 和 Verifier 通过“时间锁 + 挑战机制”实现原子性博弈,确保只有一方能取走资金。
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 想要实现的目标:在比特币上验证任意复杂证明,同时把成本压到最低。


没有评论