一次少见的技术移植
Dash 在 8 月初宣布,屏蔽交易在 Evolution 主网上线了。
用的不是自研密码学,是 Zcash 的 Orchard——原封不动的那种。同一套 Halo 2 证明系统,同一条 Pallas 曲线,同一棵 Sinsemilla 承诺树。
这在加密行业不太常见。隐私协议向来是各造各的:Monero 用环签名,Zcash 用零知识证明,Dash 自己以前用 CoinJoin 混币,各有各的一套家底。这次 Dash 直接把别人的整套搬了过来。
于是有了一个挺有意思的观察窗口:同一套密码学,换条链跑,隐私强度会一样吗?
不一样。而且可能差一个数量级。
原因不在密码学,在一个大部分人没听说过的东西——匿名集。
下面按三段走:屏蔽交易本身是什么,Dash 和 Zcash 技术上到底哪里一样哪里不一样,然后收在匿名集上。
屏蔽交易到底屏蔽了什么
Dash 以前的隐私方案是 CoinJoin,思路是「混」。
几个人同时发起交易,把币放进一个池子搅一搅再分发出去。链上能看到有这么一笔混币交易,能看到进去几个人、出来几笔,只是没法确定哪笔对哪笔。你藏在人堆里,但人堆本身是公开的。
零知识屏蔽池不一样。它连「有没有这个人堆」都不告诉你。
Orchard 的做法大致是这样:你的钱不再是链上一条明文记录,而是一张加密的钱票(note)——金额、收款人都在密文里。要花掉它的时候,你不出示这张票,而是出示一个零知识证明,证明「我手上有一张有效的、还没花过的票,而且这笔转账收支平衡」。
链上因此只留下三样东西:
- nullifier(作废标记):从被花掉的那张票推导出来,用来防双花。它和原票之间是单向的,外人看不出作废的是哪张
- commitment(承诺):代表新生成的那张票
- Halo 2 证明:证明上面这一切都算对了
金额、发送方、接收方,一个都不出现。
所有承诺被攒进一棵不断生长的默克尔树里,树根叫 anchor。你证明的其实是「我的票在这棵树的某个位置上」,但不说是哪个位置。
Orchard 相比 Zcash 上一代 Sapling 最大的进步,是不需要可信初始化。Sapling 用的 Groth16 需要一群人办一场「仪式」生成公共参数,仪式过程中产生的废料如果没销毁干净,理论上能被用来无中生有地造币。Zcash 早年为此办过好几场大张旗鼓的多方计算,请公证人、全程录像、砸硬盘。
Halo 2 把这个环节整个删掉了。
删掉一个需要「相信某群人当年真的把电脑砸了」的环节,对隐私系统来说不是小事。
和 Zcash 到底哪里一样、哪里不一样
Dash Platform 的协议文档把这套实现写得挺细。翻完之后我的判断是:密码学层面几乎是照搬,工程层面改动不小。
一样的部分
Halo 2 证明系统、Pallas 曲线上的 RedPallas 签名、Sinsemilla 承诺树、每个 action 里 216 字节的加密 note 载荷(32 字节临时公钥 + 104 字节票据密文 + 80 字节带外密文)。这些数字和 Zcash 的 Orchard 规范完全对得上。
不是「参考了 Zcash 的思路」,是同一份 Rust crate。
差异一:屏蔽的是 Credits,不是 DASH
池子活在 Evolution 这条链上,不在 Dash 的 PoW 主链上。Evolution 里流通的记账单位叫 credits,1 DASH = 1000 亿 credits。所以钱要先跨到 Platform 层,才能进屏蔽池。
Zcash 的屏蔽交易只有三类:透明进屏蔽(t→z)、屏蔽内转(z→z)、屏蔽出透明(z→t)。
Dash 有六种状态转换:
- Shield — 从 Platform 地址进池
- Shielded Transfer — 池内转账,链上完全没有透明面
- Unshield — 从池里出到 Platform 地址
- Shield from Asset Lock — 从 L1 直接进池 ←
- Shielded Withdrawal — 从池里直接出回 Dash 主链
- Identity Create From Shielded Pool — 从池里直接开一个身份 ←
打箭头的那两条是 Zcash 没有的,也是这次实现里我觉得最有意思的地方。
差异二:可以从 L1 直接进池,不用先落一个透明地址
在 Zcash 上,想把币藏进屏蔽池,路径通常是:交易所提币到你的 t-address → 从 t-address 发一笔 t→z。
中间那个 t-address 是个可被观察的落脚点。它收了多少、什么时候收的、之后往池子里丢了多少,全在链上摆着。
Dash 的 Shield from Asset Lock 允许你拿主链上的一笔 asset lock 交易(配 InstantSend 或 ChainLock 证明),把资金直接送进屏蔽池,中间不经过任何 Platform 透明地址。
少一个透明落脚点,少一串可关联的时间和金额。这是真提升,不是营销。至于为什么这一步这么关键,下一节讲匿名集的时候会看得更清楚。
差异三:从屏蔽池开身份,只能用固定面额
Evolution 有身份系统,可以注册用户名、发数据、发代币。Dash 做了一条通道,让你能直接从屏蔽池里掏钱创建一个新身份,新身份的 ID 由被花掉的那几个 nullifier 排序后哈希推导出来。
关键在于:这条通道的出金金额只能是几个固定档位。
当前协议版本允许 0.03 / 0.1 / 0.25 / 0.5 / 1 DASH 这五档,上一个版本是 0.1 / 0.3 / 0.5 / 1 四档。填别的数字,共识层直接拒绝,报一个专门的面额错误码。
这个设计的用意,下一节会讲透。先记住一句话:金额是隐私系统里最难藏的东西,固定面额就是冲着这个问题去的。
差异四:anchor 会被剪枝
Dash 的节点不永久保留所有历史 anchor,而是维持一个滚动保留窗口,超期的定期剪掉。构造证明时选的 anchor 必须来自当前窗口,不能随便挑一个远古树根。
这是个实打实的取舍。
好处是节点状态小、客户端扫描快——Dash 宣称从零同步一个屏蔽钱包大约 20 秒,而 Zcash 钱包全量扫描经常要按小时算。这个体验差距在移动端是决定性的。
代价是你的证明只能挂靠在最近这段时间的承诺树上。这对匿名集意味着什么,下一节说。
差异五:每笔最多 6 个 action
每个 Orchard action 结构上包一次花费加一次产出。Dash 的实际上限是 6 个——因为 Halo 2 证明的体积随 action 数量增长,而状态转换有最大字节数限制。每个 action 还要永久占 344 字节链上存储(312 字节在承诺树,32 字节在作废标记树)。
实际影响:如果你的钱散在很多小票里,一笔转账合并不完,得拆成好几笔。
差异六:屏蔽交易不由身份签名
这条容易被忽略,但很重要。
Evolution 的普通操作都由身份公钥签名。屏蔽状态转换完全没有身份签名字段,授权靠 Orchard bundle 内部的每 action 花费授权签名、绑定签名,加上一个把透明字段绑进 bundle 的 platform sighash。
意思是:屏蔽交易和 Dash 的用户名、身份系统是解耦的。
要是不这么设计,一条链上既有
alice.dash 这样的公开用户名、又有屏蔽池,那屏蔽等于白做。这一步做对了。还有:最终性模型不同
Evolution 是 PoS/BFT 共识,出块即最终,Dash 宣称约 1 秒。Zcash 是 PoW,概率性最终性,实践中要等几分钟。
对支付场景,这个差别很大。
但别把它当成纯粹的优势——BFT 的确定性来自一个规模有限的验证者集合,PoW 的概率性来自全网算力,这是两种不同的安全模型,不是一个比另一个高级。
技术差异讲完了。密码学一模一样,工程上 Dash 做了几个真实的改进。
那是不是意味着,在 Dash 上做屏蔽交易,隐私强度和 Zcash 一样?
不是。差得还挺远。
匿名集:密码学之外的那一半
先讲个比喻。
密码学给你的是一件隐身衣。匿名集是你身边的那群人。
隐身衣做得再完美,如果房间里只有你一个人,观察者也知道那个动静是你弄出来的。他不需要看穿隐身衣,他只需要数人头。
匿名集的定义很简单:观察者无法区分的候选集合有多大。 集合里有一万个候选,你的匿名度就是万分之一;集合里只有三个,那基本等于没穿。
这个数字是任何隐私系统里最重要的指标,也是最少被公告提及的一个。
关于它有三件反直觉的事。
一、名义匿名集和有效匿名集是两回事
池子里有多少钱,不等于你的匿名集有多大。
伦敦大学学院的 Kappos、Yousaf、Maller、Meiklejohn 在 2018 年 USENIX Security 上发过一篇对 Zcash 的实证研究,结论相当扎心:当时只有约 15% 的 Zcash 交易和屏蔽池发生过任何交互,绝大多数流量根本没进池子。
更要命的是「往返」模式。研究者用一个很朴素的启发式——找那些进池金额和出池金额相近、时间也接近的组合——就匹配上了进入屏蔽地址的资金里约 31.5%。
这些人技术上确实用了零知识证明。但他们的钱在池子里只待了一会儿,进出金额几乎相同,等于在隐身衣上贴了张名条。
名义匿名集是池子的总规模,有效匿名集是扣掉所有能被启发式排除的候选之后还剩几个。 前者由链的数据决定,后者由用户行为决定。
二、行为模式能击穿密码学
Monero 那边有个更狠的例子。
2018 年 Möser 等十来位研究者在 PETS 上发表的分析发现:Monero 早期约 62% 带混币的交易输入,可以通过「链式反应」推演出真实输入——一旦某些输出被确定花掉了,引用它们当诱饵的其他环签名就能被逐个排除。
还有更简单的:Monero 采样诱饵的算法有偏,真实输入通常是环里「最新」的那一个。光靠这个规律去猜,准确率约 80%。
环签名本身没被破。密码学是好的。
被击穿的是采样策略和使用模式。
这两个案例指向同一个结论:隐私系统真正的攻击面从来不在证明系统里,在人的行为和协议的默认参数里。
三、匿名集是公共品,不是私人物品
这是最反直觉的一条。
你买一把好锁,安全性是你自己的,跟邻居装不装锁没关系。
匿名集不是。你每用一次屏蔽交易,都是在给池子里其他人提供掩护;别人不用,你就是在裸奔。
它有网络效应,也有搭便车问题——每个人都希望别人多用、自己少花手续费。这直接导出一个生死级的设计选择:默认开启,还是可选开启。
Zcash 早年的教训就在这里。屏蔽是可选的,绝大多数用户、交易所、矿池图省事全用透明地址,池子长期冷清,早期进池的人反而因为稀少而更显眼。
这个局面一直到 2025 年才有实质改观——那一年屏蔽持仓占流通量的比例从约 11% 涨到约 30%,靠的是 Zashi 这类默认屏蔽的钱包终于把体验做顺了。
花了九年,才把匿名集这件事补上。
回头看 Dash 那两个设计
现在再看前面那两条 Zcash 没有的设计,你会发现它们都是奔着匿名集去的。
固定面额:金额是隐私系统里最难藏的维度。如果出金可以是任意数字,那 0.7381 DASH 这样一个金额本身就是指纹——观察者只要在别处见过相近的数,就能把两端对上。把出金压缩到五个固定档位,等于强制所有人的出金动作长得一模一样。这是教科书级的匿名集设计。
从 L1 直接进池:消灭中间那个透明落脚点,就是在掐断 Kappos 那篇论文里最有效的一类启发式。
anchor 剪枝则是另一个方向的取舍——它换来了 20 秒同步,但也意味着你的证明只能挂在最近这段窗口的承诺树上。承诺树本身只增不减,但可选 anchor 的时间跨度被压窄了,这在时间维度上对匿名集不是加分项。
我不确定 Dash 团队在这三处各自权衡了多少。但能从协议文档里读出这些取舍,本身就说明写代码的人是真懂隐私的,不是把 crate 引进来跑通就完事。
Dash 现在的匿名集在什么位置
诚实地说:起点是零。
屏蔽池 8 月刚开,池子里的资产从零开始攒。作为参照,Evolution 主网上线至今累计处理的交易大约 6.4 万笔——这还是整条链所有类型加起来的数字,不是屏蔽交易。
对面 Zcash 的 Orchard 池,在今年 6 月那次安全事件披露前,屏蔽持仓约占流通量的 30%,其中 Orchard 占了大头。
两者不在一个量级,这点必须说清楚。
另一个现实是入口。官方 DashPay 钱包目前还没接上屏蔽功能(公告里写的是「即将推出」),能用的是第三方桌面钱包。主力入口没打通,匿名集就长不起来——而这是产品问题,不是密码学问题,反倒是好消息,因为产品问题修起来比密码学问题快得多。
有一条路径值得看。
Zcash 的匿名集主要靠「藏币」长出来——用户把 ZEC 存进屏蔽池,长期不动。这种匿名集的问题是流动性低,池内转账的频次并不高。
Dash 的底子不一样。它有十来年积累的商户网络和支付场景,加上 Evolution 原生的代币能力,以及正在做的屏蔽代币。如果屏蔽稳定币真的落地,Dash 的匿名集可能是靠花钱长出来的——高频、小额、金额分散、时间分散。
从匿名集的质量看,高频支付产生的匿名集,比长期囤积产生的要结实得多。
这条路 Zcash 至今没走通。Dash 有没有可能走通,我不知道。但这个方向本身是对的。
五个问题,体检任何一个隐私方案
以后再看到「我们上线了隐私功能」这类公告,别只看用了什么证明系统。问这五个问题:
1|默认开启,还是可选? 可选意味着匿名集要靠用户自觉,历史证明这条路很难走。
2|池子里有多少资产,占流通量多少? 这是名义匿名集的规模。低于个位数百分比,基本可以认为还在早期。
3|金额怎么处理? 金额是最难藏的维度。有没有固定面额、有没有额度分桶,直接决定匿名集会不会被金额指纹切碎。
4|主流钱包和交易所支不支持? 入口决定增长上限。只有小众钱包能用的隐私功能,匿名集永远起不来。
5|网络层怎么办? 链上藏得再好,广播交易时的 IP 一旦被记录,前面全白做。有没有 Tor 或混合网络支持,是必须问的一条。
这五条不需要你懂密码学,但比「用了什么证明系统」更能预测一个隐私方案最终好不好用。
收尾
Dash 这次做的事,我的评价是正面的:五个月,把行业里最先进的一套零知识隐私协议原样移植进一条完全不同架构的链,还在三四个地方针对自己的架构做了有价值的改进。工程质量摆在那。
但这件事最值得琢磨的地方,不是「Dash 也有隐私了」。
是它给了我们一个干净的对照实验:同一套密码学,跑在不同的链上、不同的用户量下,隐私强度可以差出一个数量级。
差别不在证明系统里,在有多少人跟你做了同一件事。
密码学是一次性买断的,匿名集是按月付费的。
Dash 这次买断的东西质量很高。账单才刚开始。