代数太自由,需要一道锁
机密交易的骨架其实优雅:输出金额不写明文,写成一个承诺——金额乘上曲线基点、再叠上盲化因子的一次涂抹,像把数字放进一个只有开法、没有读法的胶囊。协议靠“所有输入承诺之和等于所有输出承诺之和”来验证守恒,零知识地证明钱没有多也没有少。但 2010 年代早期的推演很快发现代数过于自由:曲线上的承诺允许负数——“−100 枚币”是一个合法承诺,输入端加一个、输出端相应配平,等式照样成立,而任何人也看不出哪个胶囊里是负资产。现实里不需要构造负数也能出事故:比特币 2010 年那次众所周知的溢出事故,就是金额加法越过了表示上限导致校验逻辑失效,逼着社区临时分叉回滚。两个教训指向同一件事:光有守恒等式不够,必须给每个被隐藏的金额再加一道声明——它落在 0 到上限之间的正常区间里。这道声明就叫范围证明(range proof)。
朴素证明:把数拆成一排灯泡
早期方案(Cryptonote 谱系及其后的 Borromean 式构造)的直觉是把隐藏的金额按二进制拆成“是 0 或 1”的命题串,每个灯泡各自承诺、各自用环签名类工具证明它确实非 0 即 1,最后拼回原数。逻辑严密,代价诚实:灯泡数量决定证明体积,64 位金额就是 64 组证明堆料,一笔转账动辄多出几 KB。隐私链在 2017 年初通过硬分叉把隐藏金额设为默认机制时,交易体积膨胀到肉眼可见,网络随后又为费用与环参数做过多次调优——证明太肥,藏价格的代价就是所有人陪所有交易变重。
Bulletproofs:让证明随位数只长零头
2017 年发表的 Bulletproofs 论文(Bünz 等,加密社区常用编号 ePrint 2017/1066)把这门手艺推进一个数量级:借助内积论证,证明体积从随位数线性增长改为对数增长,多个输出还能合并成一份证明。对普通读者的换算很直接——同一笔交易里证明体积缩小大半,隐私功能第一次在费用层面接近“无感”。隐私链在 2017 年公告兼容方案、2018 年初通过升级上线批量替换旧证明,具体区块高度与激活节奏以官方公告为准。体积问题消解后,研究注意力转向另一个角落:证明的验证计算量随输出数仍是线性,理论上存在“小交易、大验证”的不公平,这类细节后来反哺了费率设计(让手续费同时考虑体积与验证成本),说明密码学构件从来不是孤立的数学题。
比特币的镜像应用
范围证明不是隐私链的专属零件。门罗之外的世界需要它的场合叫法不同:侧链与联合销户的审计要证明“储备金足以覆盖全部发行”而不点名储备结构;跨链桥验证一揽子资产守恒;改善方案里用同族工具给承诺加“非负”断言。构件层的收敛比叙事层的站队有意思得多:各条路线最终都在把“藏起来但可验证”这件事外包给同一族代数证明,只是隐私承诺与合规披露的比例不同。对想深入读者的阅读清单也简单——顺着承诺(Pedersen 构造)、内积论证、密钥透明化假设这三个词往下读,能覆盖这条线的主干。
快速问答
问:范围证明能顺带证明金额属于某段区间吗(比如工资范围)? 同一族工具可以构造更精细的断言(区间证明、二进制约束),具体表达力取决于协议选型,不是默认自带。
问:证明会完全泄露不了大小信息吗? 不泄露数值本身,但交易图、费率与输出数量仍可能给出统计线索,隐私评估要整体看,不能只盯一个构件。
风险提示:本文是密码学机制科普,不构成投资建议;各链参数与激活历史以官方文档为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。