以太坊里那条专门给零知识电路用的曲线:ERC-2494 Baby Jubjub
以太坊上验证一笔交易用的是 secp256k1,链上自带的预编译还支持 BN254 上的配对运算。但如果你想在一个 zk-SNARK 电路里面验证一把签名或算一个哈希,这两条曲线都不合用:secp256k1 的域太大,写进电路代价高昂;BN254 曲线的点坐标没法当作电路的标量安全使用。ERC-2494 创建于 2020 年 1 月 29 日,仓库状态 Stagnant,它解决的就是这一件事:给电路内部准备一条“在电路里运算便宜”的曲线。
曲线的定义与那个自由参数
原文给出的方程是扭曲爱德华兹形式:一条形如 a·x² + y² = 1 + d·x²·y² 的曲线,定义在 BN254 的标量域上,系数 a 取 168700,d 取 84444。文中特意说明 a 与 d 都是这个域里的元素,而且 d 既不是 0 也不是 1,以免退化成普通爱德华兹曲线的特殊情况。它还指出爱德华兹方程里系数 a 有一个自由度,作者选了 168700 这个具体数值,并在附录列出了曲线的阶、余因子、基点与子群结构。
为什么要绕这么大一个圈子?关键在于模数匹配。zk-SNARK 电路的所有运算都在 BN254 的标量域里做,如果内部曲线的坐标也来自同一个域,验证点加运算就是普通的域算术,电路规模可以压到几百到几千个约束;用另一条曲线的坐标,则要先做一整套域分解,成本呈数量级上升。这条曲线本质上是被这个约束“设计”出来的,而不是从密码学界现成推荐里挑出来的。

它能被拿来做什么
原文的用途章节举了两类:一类是 Pedersen 哈希,把哈希运算写成曲线上的点乘,就能在电路里高效证明“我知道某个原像”;另一类是 Edwards 曲线数字签名算法,可以在电路内部验证一把签名,而不把密钥本身暴露出来。这两件事合起来,正是隐私凭证类协议的基本零件——证明“这笔许可是我签的”“我知道这条秘密”,又不用把身份和秘密搬到公开账本上。文件明确说明它只描述曲线与实现细节,不含接口和函数,属于典型的密码学参数标准。
从这份标准往下查,会发现它被Circom 生态与若干门限签名与身份方案当作底层积木使用。这解释了一个常见的困惑:为什么有些隐私项目明明部署在以太坊上,签名却不像以太坊签名,验证时还要绕一圈零知识证明。答案就在这一层:链上验的是电路证明,电路内部跑的密钥体系是 Baby Jubjub,而不是账户那把钥匙。
读参数标准时的注意事项
这类标准给用户造成的实际风险,通常不在协议本身,而在版本口径上。不同实现可能选用不同实现路径,例如仿射坐标与投影坐标的效率差异,或者用查表优化的固定基点乘法。这些实现细节会显著改变电路规模,却不影响曲线的密码学安全性。因此,判断一个隐私产品是否可靠,与其纠结它用的是哪条曲线,不如确认两件事:那套电路与实现是谁写的、被审计过没有,密钥派生的可复现性怎么保证。一份曲线定义本身无法保证任何用户的资金或身份安全,它只是给后面所有实现一个共同的地基。本文为机制说明,不构成任何投资建议
为什么普通用户会碰到一条“看不见的曲线”
一个直观类比是:以太坊验签用的 secp256k1 像一把大门钥匙,验一把钥匙的成本在链上被预编译压到了很低的固定费用;而 Baby Jubjub 存在的全部意义是“钥匙可以带进门里面”。在一节电路内部,验证者可以检查“持有某 Baby Jubjub 私钥的人签了这份声明”,却不必把公钥公开,因为公钥本身可以作为电路里的私有输入。这就是隐私系统能把“我是这个秘密团体的成员”做成一枚不可转移凭证,而又不把成员地址写在明面上的原因。对普通用户的含义是:当某个隐私钱包或匿名凭证产品让你“生成密钥”时,它生成的那把钥匙可能和你在交易所或主钱包里的地址毫无关系,备份和找回规则也各自独立,不能指望用同一套助记词把两边一起恢复。
本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。